[MSSQL]SQL Server 2008 R2 收缩日志文件
前言
随着数据库的使用,日志文件越来越大,有时候就需要收缩一下没用的日志文件占用的空间。
由于SQL2008对文件和日志管理进行了优化,所以以下语句在SQL2005中可以运行但在SQL2008中已经被取消:
--(SQL2005)
BackupLog DNName with no_log
go
dumptransaction DNName with no_log
go
USE DNName
DBCC SHRINKFILE (2)
Go
方法一:命令模式
在SQL2008中清除日志就必须在简单模式下进行,等清除动作完毕再调回到完全模式。
--1步骤执行
USE [master]
GO
ALTER DATABASE DataBaseName SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE DataBaseName SET RECOVERY SIMPLE --简单模式
GO
--2步骤执行
USE [DataBaseName]
GO
DBCC SHRINKFILE (N'DataBaseName_Log' , 9, TRUNCATEONLY)
GO
--3步骤执行
USE [master]
GO
ALTER DATABASE DataBaseName SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE DataBaseName SET RECOVERY FULL --还原为完全模式
GO
下边SQL命令也可实现效果,具体和上边的SQL有什么区别,我还不太懂,有知道的可以评论留言,求指教
USE DataBaseName;
GO
-- 通过将数据库恢复模型更改为SIMPLE来截断日志。
ALTER DATABASE DataBaseName
SET RECOVERY SIMPLE;
GO
-- 将截断的日志文件缩小到1 MB。
DBCC SHRINKFILE (DataBaseName_Log, 1);
GO
-- 重置数据库恢复模型。
ALTER DATABASE DataBaseName
SET RECOVERY FULL;
GO
若提示:
则检查数据库实际的日志文件名称:
sp_helpdb DataBaseName
方法二:部分命令模式 + 任务->收缩->文件(单个数据库)
--先执行此SQL,将数据改成简单模式
ALTER DATABASE DataBaseName SET RECOVERY SIMPLE --简单模式
GO
右键要收缩的数据库,任务->收缩->文件->确定(界面直接确定就可以)
操作完成后,数据库的日志只保留了1M。
-- 之后要执行此SQL
ALTER DATABASE DataBaseName SET RECOVERY FULL --还原为完全模式
GO