2009-08-31 49 views
0

我在sql-server 2005實例和多個sql-server 2000實例之間建立了複製。在我收到以下錯誤消息之前,複製將成功一段時間:合併過程無法更新訂閱列表

違反UNIQUE KEY約束'unique_pubsrvdb'。不能在對象'dbo.sysmergesubscriptions'中插入重複鍵。 (來源:MSSQLSERVER,錯誤號:2627)

當我檢查sysmergesubscriptions時,有額外的條目似乎來自2000實例。

我的問題是有沒有人遇到過這個問題,你是怎麼處理它(不重建整個事情)

回答

1

的問題是,用戶之一有被複制,在系統表老的發佈和訂閱貫穿整個系統。這導致違反了UNIQUE KEY約束。

一旦我們刪除了這些舊條目,我們就可以重新啓動複製。

我們能夠識別sysmergepublication中的有效記錄,因爲我們在複製無效條目之前知道該表的狀態。如果您需要,此forum post會向您顯示如何定位無效的出版物。

我們使用的後續SQL檢查其他訂閱條目:

select * 
    from sysmergepublications 

select * 
    from sysmergesubscriptions 
where pubid in (select pubid from sysmergepublications) 

select * 
    from sysmergesubscriptions 
where pubid not in (select pubid from sysmergepublications) 

這裏是我們用來刪除無效預訂的SQL:

delete from sysmergesubscriptions 
     where pubid not in (select pubid from sysmergepublications) 

注:該代碼示例上述假設sysmergepublication僅包含有效的出版物

或者:您可以使用EXEC sp_removedbreplication @dbname='<dbname>'完全刪除數據庫的複製。該命令似乎刪除數據庫中的所有複製觸發器。

1

在我的情況下處理多個訂閱和剛剛適應刪除訂閱是有問題:

delete 
from sysmergesubscriptions 
where pubid not in (select pubid from sysmergepublications) 
and subscriber_server = 'SUBSCRIPTIONSERVER'