2009-04-07 33 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