我使用Backup LOG 和With No_log选项、DBCC Shrinkdatabase命令后,数据库日志反而增大了。
观察日志文件的使用情况,发现已使用空间为0,未使用空间100%。
反复几次之后,数据库日志文件越来越大。
根据这个库的使用情况,判断可能跟这个库上存在数据库复制有关。
我在数据库复制的编辑界面,手动取消所有的复制对象后,备份数据库,收缩,数据库日志依然越来越大。
后来使用sp_removedbreplication命令强制清除了所有复制对象,然后使用Backup LOG 和With No_log选项、DBCC Shrinkdatabase命令,这次日志文件被收缩掉了。
但是我所建立的数据库复制也被彻底清除了,但是订阅仍然存在。
从微软的论坛查阅到一些资料,通常如果你设置过数据库复制或发布,而后来设置失败并没有启用,可能会导致这个问题,你看不到跟复制有关的内容,但是在数据库里却存在这样的东西,于是日志被它堵住了,这成了一个永远无法完成的命令,所以后续的日志都无法截断。
实际情况是我的复制对象会定期进行发布,用以同步数据。
现在强制清除了复职,需要重新进行配置,对日常工作影响很大。
有没有其他方法,即不清除复制,又能收缩数据库日志?
32 个解决方案
#2
估计还是得压缩啊
#3
分离,移志或删除日志,附加。
#4
把数据库分离,移走或删除日志,再附加数据库,SQL会自动生成日志文件。
#5
--备份数据库
BACKUP DATABASE testdb TO DISK='d:\data\testdb20070906.bak'
--清空日志
DUMP TRANSACTION testdb WITH NO_LOG
--截断事务日志
BACKUP LOG testdb WITH NO_LOG
--收缩数据库
DBCC SHRINKDATABASE(testdb)
--设置自动收缩
EXEC SP_DBOPTION testdb,AUTOSHRINK,TRUE
试试看可以不
#6
这种方法我考虑过,只不过担心会对数据库造成损坏,如果附加不上或置疑了就不好玩了。
因为我使用DBCC Shrinkdatabase命令的时候提示所有的日志文件都正在被使用,无法进行收缩。
#7
...
#8
以前我也遇到过跟你相同的情况,我用分离附加解决的。
#9
谢谢楼上各位的回复。
不过希望曾经遇到过这种问题的达人指点一下,这些常用的命令就不用了。
不过希望曾经遇到过这种问题的达人指点一下,这些常用的命令就不用了。
#10
分离和附加应该不会导致失去去复制设置了吧。
#11
最有效的方法
#12
引用 4 楼 htl258 的回复:
把数据库分离,移走或删除日志,再附加数据库,SQL会自动生成日志文件。
这是最后的办法!
把数据库分离,移走或删除日志,再附加数据库,SQL会自动生成日志文件。
这是最后的办法!
#13
我认为这种方式危险系数过高,而且对于多文件组或多文件的数据库存在困难。
#14
这是个有危险的动作,要谨慎使用
#15
帮顶有分
#16
先备份数据库!然后再按上面的方法,应该可以实现的!
#17
海爷有没有其他方法?
#18
你是数据文件大还是日记文件?
#19
Log
#20
帮顶有分
如果没有直接的方法,那这个就成了SQL SERVER的BUG了。
如果没有直接的方法,那这个就成了SQL SERVER的BUG了。
#21
--指定收缩大小试试
DBCC SHRINKFILE(log逻辑文件名,1024)
#22
sp_helpdb DBname
贴一下log文件那行的数据。
贴一下log文件那行的数据。
#23
已经被我干掉了。
#24
先截断日志,再收缩
#25
难道要我打电话给MS咨询,T_T
#26
顶!打给比尔!
#27
我这里在发布数据库,每周都要清理事务日志,收缩数据库的,好像没发生楼主的情况啊。
#28
目前不是很清楚原因
#29
一个license只能问一个问题,囧
#30
学习一下,其实定期整理log就好了,这种情况没遇到
#31
#32
这个库是简单模型,自动收缩,本来没在意他的日志,偶然发现日志文件暴大。
#1
#2
估计还是得压缩啊
#3
分离,移志或删除日志,附加。
#4
把数据库分离,移走或删除日志,再附加数据库,SQL会自动生成日志文件。
#5
--备份数据库
BACKUP DATABASE testdb TO DISK='d:\data\testdb20070906.bak'
--清空日志
DUMP TRANSACTION testdb WITH NO_LOG
--截断事务日志
BACKUP LOG testdb WITH NO_LOG
--收缩数据库
DBCC SHRINKDATABASE(testdb)
--设置自动收缩
EXEC SP_DBOPTION testdb,AUTOSHRINK,TRUE
试试看可以不
#6
这种方法我考虑过,只不过担心会对数据库造成损坏,如果附加不上或置疑了就不好玩了。
因为我使用DBCC Shrinkdatabase命令的时候提示所有的日志文件都正在被使用,无法进行收缩。
#7
...
#8
以前我也遇到过跟你相同的情况,我用分离附加解决的。
#9
谢谢楼上各位的回复。
不过希望曾经遇到过这种问题的达人指点一下,这些常用的命令就不用了。
不过希望曾经遇到过这种问题的达人指点一下,这些常用的命令就不用了。
#10
分离和附加应该不会导致失去去复制设置了吧。
#11
最有效的方法
#12
引用 4 楼 htl258 的回复:
把数据库分离,移走或删除日志,再附加数据库,SQL会自动生成日志文件。
这是最后的办法!
把数据库分离,移走或删除日志,再附加数据库,SQL会自动生成日志文件。
这是最后的办法!
#13
我认为这种方式危险系数过高,而且对于多文件组或多文件的数据库存在困难。
#14
这是个有危险的动作,要谨慎使用
#15
帮顶有分
#16
先备份数据库!然后再按上面的方法,应该可以实现的!
#17
海爷有没有其他方法?
#18
你是数据文件大还是日记文件?
#19
Log
#20
帮顶有分
如果没有直接的方法,那这个就成了SQL SERVER的BUG了。
如果没有直接的方法,那这个就成了SQL SERVER的BUG了。
#21
--指定收缩大小试试
DBCC SHRINKFILE(log逻辑文件名,1024)
#22
sp_helpdb DBname
贴一下log文件那行的数据。
贴一下log文件那行的数据。
#23
已经被我干掉了。
#24
先截断日志,再收缩
#25
难道要我打电话给MS咨询,T_T
#26
顶!打给比尔!
#27
我这里在发布数据库,每周都要清理事务日志,收缩数据库的,好像没发生楼主的情况啊。
#28
目前不是很清楚原因
#29
一个license只能问一个问题,囧
#30
学习一下,其实定期整理log就好了,这种情况没遇到
#31
#32
这个库是简单模型,自动收缩,本来没在意他的日志,偶然发现日志文件暴大。