USE [master]
GO
-- 收缩数据库
DECLARE @dbname nvarchar(255)
SET @dbname = '数据库名称'
-- 1.截断事务日志
EXEC('BACKUP LOG ['+@dbname+'] WITH NO_LOG')
-- 2.收缩数据库
EXEC('DBCC SHRINKDATABASE(['+@dbname+'], TRUNCATEONLY)')
-- 3.设定自动收缩
EXEC('EXEC SP_DBOPTION '''+@dbname+''', ''autoshrink'', ''TRUE''')
GO
DUMP TRANSACTION 和 BACK LOG 的区别:
DUMP TRANSACTION [数据库名称] WITH NO_LOG 是 sybase 的用法,SqlServer 的核心原来就是 sybase 的。因此 SqlServer 也能用 DUMP TRANSACTION。
BACK LOG [数据库名称] WITH NO_LOG 是 SqlServer 的用法。
DBCC SHRINKDATABASE 命令语法如下:(http://www.yesky.com/imagesnew/software/tsql/ts_dbcc_3pd1.htm)
DBCC SHRINKDATABASE (database_name
[, target_percent]
[, {NOTRUNCATE | TRUNCATEONLY}] )
各参数说明如下:
?target_percent 指定将数据库压缩后,未使用的空间占数据库大小的百分之几。如果指定的百分比过大,超过了压缩前未使用空间所占的比例,则数据库不会被压缩。并且压缩后的数据库不能比数据库初始设定的容量小。
?NOTRUECATE 将数据库缩减后剩余的空间保留在数据库,中不返还给操作系统 。如果不选择此选项,则剩余的空间返还给操作系统。
?TRUNCATEONLY 将数据库缩减后剩余的空间返还给操作系统。使用此命令时SQL Server 将文件缩减到最后一个文件分配,区域但不移动任何数据文件。选择此项后,target_percent 选项就无效了。例6-14: 压缩数据库mytest 的未使用空间为数据库大小的20%。