SQL Server 2008 收缩日志方法

为了安全起见,SQL Server 2008 及以后版本的 SQL Server 已经废弃了日志“暴力”清除命令:

BACKUP LOG WITH TRUNCATE_ONLY

但在SQL Server 2008 及以后版本中允许备份日志后收缩日志,命令如下:

USE AdventureWorks
BACKUP LOG AdventureWorks TO DISK='F:\MSSQL_Backup\AdventureWorks.trn'
DBCC SHRINKFILE (AdventureWorks_Log, 1024)

即,首先使用 BACKUP LOG 命令备份日志,然后使用 DBCC SHRINKFILE 命令收缩文件,其中的文件名(AdventureWorks_Log)为日志文件的逻辑文件名,后面的数字为保留的日志文件大小,单位为 MB。

另外,使用此方法仍然可以做到“暴力”清除的效果,就是在备份日志时,将备份文件名修改为 ‘nul’,即:

BACKUP LOG AdventureWorks TO DISK='nul'

此时,将不会创建日志备份文件,但仍然可以收缩日志。
但是此方法将丢失数据库日志,对数据库是危险的,除非你的数据库不重要,否则,不要用!

此外,常规的办法是修改数据库的恢复模式为简单模式,然后收缩日志,再将恢复模式改为完整模式,命令如下:

---------------------------------数据库日志文件收缩--------------
USE [master]
--简单模式
ALTER DATABASE DBName SET RECOVERY SIMPLE WITH NO_WAIT
GO
USE DBName 
GO
--执行收缩命令,收缩到5MB
DBCC SHRINKFILE (N'DBName_log' , 5, TRUNCATEONLY)
GO
USE [master]
GO
--还原为完全模式
ALTER DATABASE MemberDB SET RECOVERY FULL WITH NO_WAIT
GO

但是在简单模式下,数据库的安全性降低,不建议使用。