由于SQL2008,2012对文件和日志管理进行了优化,所以以下语句在SQL2005中可以运行但在SQL2008中已经被取消:
在SQL2008,2012中清除日志就必须在简单模式下进行,等清除动作完毕再调回到完全模式。
SQL2005清空删除日志:
-- 这里的DNName是要收缩的数据库名,注意修改下面的数据库名。
-- 用sqlperf查看log大小及使用率
use master
dbcc sqlperf(logspace)
go
-- 先用sp_helpdb找出目标数据库的逻辑文件名
sp_helpdb DNName
-- 用以下语句也可以
use DNName
SELECT * FROM sys.database_files;
go
-- 截断事务日志
use master
Backup Log DNName with no_log
go
-- 设置事务日志为空
use master
dump transaction DNName with no_log
go
-- DBCC SHRINKFILE ({ file_name | file_id }{ [ , target_size ] } )
-- file_name 要收缩的文件的逻辑名称。
-- file_id 要收缩的文件的标识 (ID) 号。
-- target_size 用兆字节表示的文件大小(用整数表示)。 如果未指定,
-- 则 DBCC SHRINKFILE 将文件大小减少到默认文件大小。 默认大小为创建文件时指定的大小。
USE DNName
DBCC SHRINKFILE (2)
Go
--------------------------------------------------------------
(SQL2008,2012):在SQL2008,2012中清除日志就必须在简单模式下进行,等清除动作完毕再调回到完全模式。
<pre name="code" class="sql">USE[master]
GO
ALTER DATABASE DNName SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE DNName SET RECOVERY SIMPLE --简单模式
GO
-- 先用sp_helpdb找出目标数据库的逻辑文件名
sp_helpdb DNName
-- 用以下语句也可以
USE DNName
SELECT * FROM sys.database_files;
GO
USE DNName
GO
DBCC SHRINKFILE (N'DNName_Log' , 11, TRUNCATEONLY)
GO
USE[master]
GO
ALTER DATABASE DNName SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE DNName SET RECOVERY FULL --还原为完全模式
GO