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

关于sql2008截断事务日志收缩数据库的问题
昨天客户说D盘空间不足了,然后我一看,日志文件才137G,当时手动收缩日志,不行,脚本收缩(有个问题是以前版本好用的语法,现在打死也不好用),还是不行,刚处理个这问题处理一上午还没处理好,分离和备份都不行。

下午看情况实在不行了,只好停掉服务强删掉日志,然后在一通搞,算是搞上去了。那个狼狈啊。
结果过了一会发现,日志文件还是蹭蹭的涨啊,我把增长调整成按10M的增长模式(没敢用百分比),还是一个小时200M的速度怎么增长。如果说软件有问题,那么以前好好的啊。大前天数据库置疑了,应该我处理的时候没处理。
最后只好分离数据库,把日志删除,然后再附加上(附加的时候注意,把那个不存在的日志文件删掉,就可以附加了,以前老纠结这个问题了),搞得比较晚,观察了一会没问题就回家了。今天客户还没上线,也不清楚啥情况。

言归正传:
当然倒是找了些解决的方法,例如:
http://blog.sina.com.cn/s/blog_701131ba0100ld30.html

感觉这个思路是对的,但是下面的这句话红色的地方我不知道怎么操作,求大神帮忙分析!

REPLICATION
这是我遇到的情况,但我根本没有启用过REPLICATION,据查,这好像是SQLSERVER2008的一个BUG,解决方法是给标有“REPLICATION”的数据库任意一个表创建数据库事务复制(TRANSACTION REPLICATION),然后再删除,执行数据库与日志备份后,就可以收缩了。


------解决方案--------------------
2008日志收缩
SQL code

-- Truncate the log by changing the database recovery model to SIMPLE.
ALTER DATABASE DB
SET RECOVERY SIMPLE
GO
-- Shrink the truncated log file to 1 MB.
DBCC SHRINKFILE (db_log, 1)
GO
-- Reset the database recovery model.
ALTER DATABASE DB
SET RECOVERY FULL
GO

select * from sys.database_files --查找数据库log文件逻辑名

------解决方案--------------------
这段话的意思就是让你建一个事务复制,然后运行一次删掉.以前也有人问过这个问题