SQL复制 - 发布已删除,但日志文件仍在增长

时间:2009-04-07 17:38:47

标签: sql-server sql-server-2000 replication truncate-log

前言,我之前看到过回答这个问题的命令,但是现在我再也找不到了,所以我只是在寻找可以解决我问题的单一SQL语句。

我曾经在SQL Server 2000数据库上有两个出版物,但我已经删除了它们。但是,我的日志文件正在增长,并且似乎包含未复制的事务,并且正在不断增长。我试过这个:

EXEC sp_repldone @xactid = NULL, @xact_segno = NULL, @numtrans = 0, @time = 0, @reset = 1

我收到一条消息“数据库未发布”(因为我删除了该出版物,这是有意义的)。如果我尝试:

backup log dbname with truncate_only

我收到的消息是我的日志中存在未复制的事务,并且不会截断。

我以前见过这个,没有出版物,但数据库被标记为仍然参与复制,我找到了一个单行脚本来取消标记数据库作为复制源,立即解决了我的问题。但是,当我再次需要它时,我现在找不到它 - 希望你们中的一个能够解决问题。谢谢!

3 个答案:

答案 0 :(得分:1)

我无法通过任何支持的方法清除这些尚未复制的数据,因此我不得不强制重建日志文件。它是SQL 2000,因此有一个不受支持/未记录的SP来执行此操作:

DBCC REBUILD_LOG('DBName','D:\Log folder\Logfile name.ldf')

这将为数据库创建一个新的空日志文件,并放弃旧的日志文件。请注意,这将强制截断当前事务,因此请确保您有备份。数据库需要处于“紧急恢复”模式才能使用此命令,因为它不会回滚已部分应用于数据的任何进程内事务,这可能会破坏数据完整性。

有关我使用的流程的完整详细信息,请参阅此主题的第7篇文章:http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=76785

答案 1 :(得分:1)

use master
go
exec sp_replicationdboption @dbname='SERVICEDESK', @optname = 'publish', @value= 'true', @ignore_distributor = 1
go
use servicedesk
go
EXEC sp_repldone @xactid = NULL, @xact_segno = NULL, @numtrans = 0,  @time = 0, @reset = 1
go
use master
go
exec sp_replicationdboption @dbname='SERVICEDESK', @optname = 'publish', @value= 'false', @ignore_distributor = 1
go
dump tran servicedesk with no_log
go

答案 2 :(得分:0)

您在寻找:

EXEC sp_replicationdboption 
    @dbname = @publicationDB, 
    @optname = N'merge publish', 
    @value = N'false'

另见sp_dropmergepublication / sp_droppublication