SQL2005和SQL2008如何压缩数据库及日志(log)文件?

时间:2022-06-18
本文章向大家介绍SQL2005和SQL2008如何压缩数据库及日志(log)文件?,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

以前在SQL2005中用的语句,到了SQL2008不能执行了,其实这个问题在7月份在美国的时候就遇到了,一直拖着,今天发现数据库占用空间达到30G了,当然了大部分是日志,因为有几张表每天Truncate然后重新生成,因为临时表的缘故。

SQL2005里面好用的SQL

--DatabaseName为数据库名
DUMP TRANSACTION DatabaseName WITH NO_LOG
BACKUP LOG DatabaseName WITH NO_LOG
DBCC SHRINKDATABASE(DatabaseName)

经过搜索,参考了比较全的一篇文章《SQL2008如何压缩日志(log)文件? 》,找到了好用的SQL语句,请看下面

-- Normal Shrink
USE WAIBPM
DECLARE @LogFileLogicalName sysname
SELECT @LogFileLogicalName=Name FROM sys.database_files WHERE Type=1
PRINT @LogFileLogicalName
DBCC SHRINKFILE (@LogFileLogicalName, 1);
--backup log, then shrink it
USE WAIBPM;
-- Get Log information
DBCC LOGINFO('WAIBPM')
DECLARE @LogFileLogicalName sysname
SELECT @LogFileLogicalName=Name FROM sys.database_files WHERE Type=1
PRINT @LogFileLogicalName
BACKUP LOG WAIBPM TO DISK='C:cdbackuptest20111028.bak'
-- Shrink the truncated log file to 1 MB.
DBCC SHRINKFILE (@LogFileLogicalName, 1);
GO

2011年10月31日,补充如下: 在使用先备份log,然后再收缩的时候,出现硬盘的空间不足,只能采用这种方法:先设置恢复模式为“简单恢复”模式,再收缩。

USE WAIBPM;
GO
ALTER DATABASE WAIBPM
SET RECOVERY SIMPLE;--设置简单恢复模式
GO
DBCC SHRINKFILE (WAIBPM_Log, 1);
GO
ALTER DATABASE WAIBPM
SET RECOVERY FULL;--恢复为原模式
GO