用新的数据文件或日志文件所提供的额外空间,sql server 应该能完成数据库的恢复。
5. 释放磁盘空间并且重新运行恢复操作,按照下面的步骤收缩日志。
sp_resetstatus 关闭数据库的置疑标志,但是原封不动地保持数据库的其它选项。
为从根本上解决这样的问题,你可以按下面的操作配置sqlserver 2000:
a.如果不需要恢复到指定的时间点,你可以将数据库的恢复模式配置为简单,这样
update,delete,select就不会记录日志,日志就不会增加的很大:
use master
go
alter database db_name set recovery simple
b.如果你的恢复模式是全部,你一定要配置日志字段收缩:
use master
go
sp_dboption 'databasename','trunc. log on chkpt.',true
sp_dboption 'databasename','autoshrink',true
c.通过每日备份将日志收缩:
backup database database_name to backup_devices
backup log database_name to log_devices
or
backup log database_name with truncate_only
**检查日志的容量:dbcc sqlperf (logspace) 这时日志并没有收缩!
d.每天在备份数据库完成之后,重新启动ms sqlserver service.
use database_name
go
dbcc shrinkfile(2,truncateonly)
**检查日志的容量:dbcc sqlperf (logspace) 这时日志已经收缩!
e.手动快速收缩日志:
/ *run below script,you will shrink you database log files
immediately, in my experience,you need to run the script for 3 or
4 minutes before stopping it manually */
use databasename
dbcc shrinkfile(2,notruncate)
dbcc shrinkfile(2,truncateonly)
create table t1(char1 char(4000))
go
declare @i int
select @i=0
while(1=1)
begin
while(@i<100)
begin
insert into t1 values ('a')
select @i=@i+1
end
truncate table t1
backup log youdatabasename with truncate_only
end
go
注意 只有在您的主要支持提供者指导下或有疑难解答建议的做法时,才可以使用
sp_resetstatus。否则,可能会损坏数据库。
由于该过程修改了系统表,系统管理员必须在运行 sp_resetstatus这个过程前,启用系统表更新。要
启 用更新,使用下面的过程:
use master
go
sp_configure 'allow updates', 1
go
reconfigure with override
go
过程创建后,立即禁用系统表更新:
sp_configure 'allow updates', 0
go
reconfigure with override
go
只有系统管理员才能执行 sp_resetstatus。执行该过程后,立即关闭 sql server。