如何收缩数据库日志文件

上网查了一下,很多人都遇到过这样的情况:数据库的数据文件才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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注