前言,我之前看到过回答这个问题的命令,但是现在我再也找不到了,所以我只是在寻找可以解决我问题的单一SQL语句。
我曾经在SQL Server 2000数据库上有两个出版物,但我已经删除了它们。但是,我的日志文件正在增长,并且似乎包含未复制的事务,并且正在不断增长。我试过这个:
EXEC sp_repldone @xactid = NULL, @xact_segno = NULL, @numtrans = 0, @time = 0, @reset = 1
我收到一条消息“数据库未发布”(因为我删除了该出版物,这是有意义的)。如果我尝试:
backup log dbname with truncate_only
我收到的消息是我的日志中存在未复制的事务,并且不会截断。
我以前见过这个,没有出版物,但数据库被标记为仍然参与复制,我找到了一个单行脚本来取消标记数据库作为复制源,立即解决了我的问题。但是,当我再次需要它时,我现在找不到它 - 希望你们中的一个能够解决问题。谢谢!
答案 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'