0

作为序言,我以前见过回答这个问题的命令,但现在我找不到了,所以我只是在寻找可以解决我问题的单个 SQL 语句。

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

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

我收到一条消息“数据库未发布”(并且由于我已删除该出版物,这是有道理的)。如果我尝试:

backup log dbname with truncate_only

我收到消息说我的日志中有未复制的事务,它不会被截断。

我以前见过这种情况,不存在任何出版物,但数据库被标记为仍在参与复制,我找到了一个单行脚本来取消将数据库标记为复制源,这立即解决了我的问题。不过,我现在找不到它,当我再次需要它的时候——希望你们中的某个人能有所启发。谢谢!

4

3 回答 3

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

于 2009-04-13T20:37:19.837 回答
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
于 2010-12-15T09:11:34.347 回答
0

您是否在寻找:

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

?

另请参见sp_dropmergepublication / sp_droppublication

于 2009-04-07T19:38:01.677 回答