下面是修复的步骤和收缩日志的步骤:
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:\MSSQL\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.',true
sp_dboption'databasename','autoshrink',true
c.通过每日备份将日志收缩:
BACKUPDATABASEDATABASE_NAMETOBACKUP_DEVICES
BACKUPLOGDATABASE_NAMETOLOG_DEVICES
OR
BACKUPLOGDATABASE_NAMEwithtruncate_only
**检查日志的容量:DBCCSQLPERF(LOGSPACE)这时日志并没有收缩!
d.每天在备份数据库完成之后,重新启动MSSQLSERVERSERVICE.
USEDATABASE_NAME
go
DBCCSHRINKFILE(2,truncateonly)
**检查日志的容量:DBCCSQLPERF(LOGSPACE)这时日志已经收缩!
e.手动快速收缩日志:
/*runbelowscript,youwillshrinkyoudatabaselogfiles
immediately,inmyexperience,youneedtorunthescriptfor3or
4minutesbeforestoppingitmanually*/
usedatabasename
dbccshrinkfile(2,notruncate)
dbccshrinkfile(2,truncateonly)
createtablet1(char1char(4000))
go
declare@iint
select@i=0
while(1=1)
begin
while(@i<100)
begin
INSERTINTOT1VALUES('A')
SELECT@I=@I+1
END
TRUNCATEtableT1
BACKUPLOGyoudatabasenamewithtruncate_only
end
GO
注意只有在您的主要支持提供者指导下或有疑难解答建议的做法时,才可以使用
sp_resetstatus。否则,可能会损坏数据库。
由于该过程修改了系统表,系统管理员必须在运行sp_resetstatus这个过程前,启用系统表更新。要启用更新,使用下面的过程:
USEmaster
GO
sp_configure'allowupdates',1
GO
RECONFIGUREWITHOVERRIDE
GO
过程创建后,立即禁用系统表更新:
sp_configure'allowupdates',0
GO
RECONFIGUREWITHOVERRIDE
GO
只有系统管理员才能执行sp_resetstatus。执行该过程后,立即关闭SQLServer