上网查了一下,很多人都遇到过这样的情况:数据库的数据文件才2G左右,但是日志文件就已经20G多,如何收缩数据库日志文件呢?
大致的方法有以下几种:
1.DUMP TRANSACTION database_name WITH NO_LOG 清空事务日志
2.BACKUP LOG WITH NO_LOG 截断事务日志
3.BACKUP LOG WITH TRUNCATE_ONLY 截断事务日志
4.DBCC SHRINKDATABASE() 收缩指定数据库中的数据文件和日志文件的大小
5.DBCC SHRINKFILE() 收缩当前数据库的指定数据或日志文件的大小
6.删除日志文件
其中前3中方法是SQL Server 2008 中不再可用的数据库引擎功能,使用了第四种方法感觉效果不明显.下面我们介绍一下如何使用后两种方法收缩数据库日志文件.
1.使用DBCC SHRINKFILE() 收缩当前数据库的指定数据或日志文件的大小,以AdventureWorks数据库为例
USE AdventureWorks;
GO
— 设置AdventureWorks数据库的恢复模式为简单
ALTER DATABASE AdventureWorks
SET RECOVERY SIMPLE;
GO
— 收缩数据库日志文件到1M
DBCC SHRINKFILE (AdventureWorks_Log, 1);
GO
— 设置AdventureWorks数据库的恢复模式为完全
ALTER DATABASE AdventureWorks
SET RECOVERY FULL;
GO
2.删除日志文件,以AdventureWorks数据库为例
USE master
GO
— 分离AdventureWorks数据库
EXEC sp_detach_db ‘AdventureWorks’
GO
— 删除日志文件
EXEC master..xp_cmdshell ‘del “C:/Program Files/Microsoft SQL Server/MSSQL10.MSSQLSERVER/MSSQL/DATA/AdventureWorks_Log.ldf”‘
GO
— 如果cmdshell功能不可使用则使用下面语句激活cmdshell功能
USE master
GO
sp_configure ‘show advanced options’, 1
GO
RECONFIGURE WITH OVERRIDE
GO
sp_configure ‘xp_cmdshell’, 1
RECONFIGURE WITH OVERRIDE
GO
— 使用sp_attach_single_file_db附加.mdf文件
USE master
GO
EXEC sp_attach_single_file_db ‘AdventureWorks’, ‘C:/Program Files/Microsoft SQL Server/MSSQL10.MSSQLSERVER/MSSQL/DATA/AdventureWorks_Data.mdf’
GO
或者
— 使用”CREATE DATABASE database_name FOR ATTACH_REBUILD_LOG”附加数据库(推荐使用)
CREATE DATABASE AdventureWorks ON
(FILENAME = ‘C:/Program Files/Microsoft SQL Server/MSSQL10.MSSQLSERVER/MSSQL/DATA/AdventureWorks_Data.mdf’)
FOR ATTACH_REBUILD_LOG
GO