如果因为磁盘可用空间不足,而不能完成数据库的恢复,那么 SQLSERVER2000会返回错误1105并且将sysdatabases中的status列设为置疑。
你可以看到在SQLSERVER的ERRORLOG和OS的应用程序日志中应该有1105的错误信息:
SQLSERVER事务日志可能会被填满,这会阻止之后的数据库操作,包括UPDATE,DELETE,INSERT和CHECKPOINT。
事务日志填满会导致1105错误:
Can'tallocatespaceforobjectsyslogsindatabasedbnamebecause
thelogsegmentisfull。Ifyouranoutofspaceinsyslogs,dump
thetransactionlog。OtherwiseuseALTERDATABASEor
sp_extendsegmenttoincreasethesizeofthesegment。
这种现象可能出现于任何一个数据库中,包括Master和TempDB。一些难以预见的因素可能消耗日志空间。例如:
一个大型事务,尤其像批量数据更新、插入或删除。
一个未提交的事务。
检查点处理程序截除时所需的带宽过大。
截除时超过阈值
上述各种条件互相作用的结果。
用于发布的标记事务没有被日志读取程序读走
下面是修复的步骤和收缩日志的步骤:
1.在命令提示符下运行以下命令启动SQLSERVER:
SQLSERVER-f-m
备注:-m开关以单用户模式启动SQLSERVER。在单用户模式下,只能成功建立一个连接。请注意是否有任何其他客户机或服务可能会在您通过SQLSERVER查询分析器 建立连接前使用那个连接。
2.重置置疑数据库的状态。
sp_resetstatus'database_name'
下面是结果集:
Database'database_name'statusreset!
WARNING:YoumustrebootSQLSERVERpriortoaccessingthisdatabase!
3.用ALTERDATABASE向数据库添加一个数据文件或日志文件:
USEmaster
GO
CREATEDATABASEdb_nameON
(
NAME=dbname_dat1,
FILENAME='D://Data/dbname_dat1.ndf',
SIZE=1000MB,
FILEGROWTH=50MB
)
GO
--更改该数据库以添加一个2GB大小的新数据文件
ALTERDATABASEdb_name
ADDFILE
(
NAME=dbname_dat2,
FILENAME='F:/MSSQL/DATA/dbname_dat2.ndf',
SIZE=2000MB,
FILEGROWTH=50MB
)
GO
--更改该数据库以添加一个1GB大小的新日志文件
ALTERDATABASEdb_name
ADDLOGFILE
(NAME=db_name_log2,
FILENAME='F:/MSSQL/Data/db_name_log2.ldf',
SIZE=1000MB,
FILEGROWTH=20MB),
GO
4.停止并重新启动SQLSERVER:
用新的数据文件或日志文件所提供的额外空间,SQLSERVER应该能完成数据库的恢复。
5.释放磁盘空间并且重新运行恢复操作,按照下面的步骤收缩日志。
sp_resetstatus关闭数据库的置疑标志,但是原封不动地保持数据库的其它选项。
为从根本上解决这样的问题,你可以按下面的操作配置SQLSERVER2000:
a.如果不需要恢复到指定的时间点,你可以将数据库的恢复模式配置为简单,这样
UPDATE,DELETE,SELECT就不会记录日志,日志就不会增加的很大:
USEMASTER
GO
ALTERDATABASEDB_NAMESETRECOVERYSIMPLE
b.如果你的恢复模式是全部,你一定要配置日志字段收缩:
USEMASTER
GO
sp_dboption'databasename','trunc.logonchkpt.',true1