今天遇到一个状况,一个数据库的日志文件过大,导致占用了过多的服务器硬盘空间。需要对于数据库的日志文件进行瘦身。网上查询了一下资料,分享几个链接。
由于SQL2008对文件和日志管理进行了优化,所以部分在SQL2005中可以运行,在SQL2008中已经被取消。
如:DUMP TRANSACTION 库名 WITH NO_LOG
参考文章
http://jimshu.blog.51cto.com/3171847/932669
http://www.cnblogs.com/TLLi/archive/2012/07/15/2592042.html
http://www.cnblogs.com/tylerdonet/p/3550434.html
http://www.cnblogs.com/qingyuan/p/4238071.html
http://www.cnblogs.com/Joe-T/archive/2011/12/22/2298051.html
自己总结
1.收缩数据(一种是界面操作,一种是执行sql语句,个人倾向于执行sql语句)
界面操作
第一,
-- 修改数据为SIMPLE类型
ALTER DATABASE 数据库名 SET RECOVERY SIMPLE
GO
第二,
选择要收缩的数据库,右键-->任务-->收缩-->文件
第三,
ALTER DATABASE 数据库名 SET RECOVERY FULL
GO
sql语句执行
-- 检查日志文件名称
USE 数据库名
SELECT NAME, size FROM sys.database_files
一般_log 就是日志文件,记录一下
最终执行语句
USE master GO ALTER DATABASE 数据库名 SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE 数据库名 SET RECOVERY SIMPLE GO USE 数据库名 GO DBCC SHRINKFILE (N'数据库日志名' , 2, TRUNCATEONLY) GO USE master GO ALTER DATABASE 数据库名 SET RECOVERY FULL WITH NO_WAIT GO ALTER DATABASE 数据库名 SET RECOVERY FULL GO
以下是常用语句
-- 检查日志文件名称
USE 数据库名
SELECT NAME, size FROM sys.database_files
-- 查看数据库的recovery_model_desc类型
SELECT NAME, recovery_model_desc FROM sys.databases
-- 如果是FULL类型,修改为SIMPLE类型
ALTER DATABASE ChinaKnowledgeDB SET Recovery simple
-- 收缩日志文件大小(单位是M)
DBCC SHRINKFILE (N'ChinaKnowledgeDB_log' , 10)
-- 恢复成FULL类型
ALTER DATABASE ChinaKnowledgeDB SET Recovery FULL
总结:收缩日志一定要把数据变为简单模式