--备份事务日志 (自上一次备份以来,至当前的已完成的事务的日志)
backup log MyDBName to disk='F:/dbbak/GamePoint/MyDBName_log_2010052709.bak';
--截断日志(截断掉当前的已完成的事务的日志), SQL Server 2005, 2008没有这个选项.
backup log MyDBName with no_Log;
--收缩日志(至1M,第一个参数为日志文件名,而不是物理文件名。如果日志还在使用,会延迟收缩)
dbcc shrinkfile (adventureworks_log, 1); --(查询文件名select name from sys.database_files) go
一般来讲backup log后,会自动截断已完成(又称未活动)的事务日志,并且收缩该文件的大小。但如果你的数据库一直是在运行当中,且只有一个日志文件的时候,备份日志后,它是无法收缩该文件的大小(联机帮助上是说延迟收缩,实际上不知它延迟到什么时候),须backup log MyDBName with no_Log; 才能立即收缩文件大小。
因此,创建数据库时,建议分成2个日志文件,这样只要backup log后,至少会有一个日志文件会被截断并收缩到“已设定的日志文件最小值”。
-- 以下在sql server 2008下,快速收缩日志文件大小的方法。仍然建议数据库中多个日志文件,通过备份日志来自动截断和收缩日志。
use adventureworks;
go
-- truncate the log by changing the database recovery model to simple.
alter database adventureworks
set recovery simple;
go
-- shrink the truncated log file to 1 mb.
dbcc shrinkfile (adventureworks_log, 1); --(查询文件名select name from sys.database_files)
go
-- reset the database recovery model.
alter database adventureworks
set recovery full;
go
恢复事务日志, 待续...