每次看到暴涨的数据库日志就有些头大,于是乱搜一通找个办法把日志干掉,下次又头大,又搜半天,于是还是写篇blog,不用乱找了。
1.将数据库设置成 简单 模式
选择要收缩的数据库,点右键 属性->选项,选择 简单模式
2.选择任务->收缩->文件
3.选择日志
或者用如下语句
![SQL <wbr>Server <wbr>2008下日志清理方法 SQL <wbr>Server <wbr>2008下日志清理方法](https://i-blog.csdnimg.cn/blog_migrate/81178cc93a2a3bb5048d90d76e7ec935.gif)
最后附上代码:
适用于SQL Server 2005的方法
Backup Log DNName WITH no_log GO DUMP TRANSACTION DNName WITH no_log GO USE DNName DBCC SHRINKFILE (2) GO
说明:由于SQL Server 2008对文件和日志管理进行了优化,所以以上语句在SQL2005中可以运行但在SQL2008中已经被取消。
------------------------------
适用于SQL Server 2008的方法
USE [master] GO ALTER DATABASE DNName SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE DNName SET RECOVERY SIMPLE --简单模式 GO USE DNName GO DBCC SHRINKFILE (N'DNName_Log' , 11, TRUNCATEONLY) GO USE [master] GO ALTER DATABASE DNName SET RECOVERY FULL WITH NO_WAIT GO ALTER DATABASE DNName SET RECOVERY FULL --还原为完全模式 GO
说明:优点:此清除日志所运行消耗的时间短。缺点:不过此动作最好不要经常使用,因为它的运行会带来系统碎片。普通状态下LOG和DIFF的备份即可截断日志。此语句使用的恰当环境:当系统的日志文件异常增大或者备份LOG时间太长可能影响生产的情况下使用。
查看该方法的原始出处可以点击这里。
SQL
有数据库 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'
然后使用 DBCC SHRINKFILE (xxdb_log,10)
总结:
完整的收缩日志文件的 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。