日期:2014-05-18  浏览次数:20540 次

收缩数据库
请教下各位;
客户服务器上的数据库说越来越大,
备份下来由1个G,
当客户把数据库给我时,
我附加后 再备份下 发现是文件只有450M,
当我有压缩备份后 文件只有200M,
请问下是不是因为服务器上日志的原因,
如果是日志的原因,
以下这段代码是否能够解决
SQL code

--在sql server 2008上,收缩日志之前必须把数据备份等级设置为simple(简单),切记!

ALTER DATABASE your_database_name SET RECOVERY SIMPLE
GO

-- 收缩 
DBCC SHRINKFILE (2,30)  --30单位为M,日志文件的大小
 GO 

-- 更改模式为FULL ,再改回来,如果本身就已是simple,那就不必要了
ALTER DATABASE your_database_name SET RECOVERY FULL
  GO





------解决方案--------------------
试下嘛

如果一般情况下,设置简单模式不必修改回来,就不必过一段时间收缩一次了
------解决方案--------------------
SQL code

LZ上面的方法可以,我下面還有幾種方法,LZ可以看看
方法一:
--BigData为数据库名(該方法在SQL2008無效)
DUMP TRANSACTION BigData WITH NO_LOG
BACKUP LOG BigData WITH NO_LOG
DBCC SHRINKDATABASE(BigData )
方法二:
USE BigData;
GO
BACKUP LOG DATABASENAME TO DISK='d:\test.bak'
-- Shrink the truncated log file to 1 MB.
DBCC SHRINKFILE (Bigdata_Log, 1);
GO
方法三:
use DB_NAME
sp_dboption DB_NAME, "trunc. log on chkpt.", true
checkpoint
sp_dboption DB_NAME, "autoshrink", true 
--每一行指令请单独执行。其中的DB_NAME是指Database Name,在下完语法后的数小时至数十小时,该LOG档会逐渐释放空间,最后大约都会维持在数1024KB左右

------解决方案--------------------
日志文件可以定期shrink,但是数据模式一般不要设置为simple
纯订阅、存放临时性数据的数据库可以设置为simple
------解决方案--------------------
SQL code

select name from sys.database_files WHERE type_desc = 'LOG'

------解决方案--------------------
探讨

SQL code

select name from sys.database_files WHERE type_desc = 'LOG'


查到你要收缩的数据库日志名字,然后替换语句中的文件名就行了。
前提是在当前数据库下执行上面的语句