每次看到暴漲的數據庫日志就有些頭大,於是亂搜一通找個辦法把日志干掉,下次又頭大,又搜半天,於是還是寫篇blog,不用亂找了。
1.將數據庫設置成 簡單 模式
選擇要收縮的數據庫,點右鍵 屬性->選項,選擇 簡單模式
2.選擇任務->收縮->文件
3.選擇日志
或者用如下語句

GO
ALTER DATABASE DNName SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE DNName SET RECOVERY SIMPLE
GO
USE DNName
GO
DBCC SHRINKFILE (N ' LogFileName ' , 0 ,TRUNCATEONLY)
GO
USE [ master ]
GO
ALTER DATABASE DNName SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE DNName SET RECOVERY FULL
GO
SQL Server 2000要清理日志使用的是dump語句,但是在SQL Server2008里,這個語句不管用了,如果日志文件很大,比如超過1G,就需要截斷一下日志文件以加快sqlserver的運行速度,在SQL Server2008里,方法改為:
有數據庫 xxdb 在 SQL Server 2008 下,日志文件已經超過1G。
以往使用BACKUP語句-BACKUP LOG xxdb WITH NO_LOG 已經失效,在查閱 MSDN 之后發現 MS 提供的標准截斷日志語句已經變為了 “BACKUP LOG 語句不指定 WITH COPY_ONLY”
使用語句 BACKUP LOG xxdb to disk='x:\work\1.bak' 成功將日志文件備份,並截斷日志文件。這里x:代表你想要備份文件的盤符。
然后使用 DBCC SHRINKFILE (xxdb_log,10) 收縮日志文件到 10M
總結:
完整的收縮日志文件的 T-SQL 語句:
BACKUP LOG xxdb to disk='x:\work\1.bak'
DBCC SHRINKFILE (xxdb_log,10)
GO
--
BACKUP LOG <db_name> to disk=<'backupfilename'>
DBCC SHRINKFILE (<log_filename>,10)
GO
里面的x:\work是隨意設置的。當然也可以收縮到比如5M或1M。