以前在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:\cd\backup\test20111028.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