2009-04-07 34 views
0

为了序言,我已经看过命令来回答这个问题,但现在我再也找不到它了,所以我只是在寻找单个SQL声明,将解决我的问题。SQL复制 - 已删除发布,但日志文件仍在增长

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

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

我得到一个消息,“数据库未发布”(因为我已经删除了发布,这是有道理的)。如果我尝试:

backup log dbname with truncate_only 

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

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

回答

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

0

你是否在寻找:

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

另见sp_dropmergepublication/sp_droppublication

+0

我不是 - 我想这些也是如此。它们似乎成功了,但我的事务日志中的条目仍在等待复制。我正在寻找一种方法来标记当前待处理复制的所有条目是“过时的”,因此它可以让我清除日志)。虽然谢谢! – SqlRyan 2009-04-07 20:21:17

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