Sql-Server

伺服器崩潰後如何恢復複製

  • September 1, 2015

我們在一個 SQL Server 2005 實例上有兩個數據庫,它們之間有事務複製(3 個表作為文章)。該伺服器既充當發布者又充當分發者。

然後伺服器上的 RAID 失敗。但是,我們設法.mdf在崩潰前分離並複制了幾乎所有文件。

系統恢復後,我們重新安裝了 SQL Server,恢復了系統數據庫(master、model、msdb)並將.mdf文件放置到相同的路徑。於是就開始了。

複製出現問題。Local Publications文件夾為空,但Local Subscriptions文件夾包含有問題的訂閱。當我嘗試添加新出版物時,我得到:

新發布嚮導在檢索發布名稱時遇到一個或多個錯誤。

執行 Transact-SQL 語句或批處理時發生異常。(Microsoft.SqlServer.ConnectionInfo)

無效的對象名稱“dbo.syspublications”。(Microsoft SQL Server,錯誤:208)

我決定嘗試刪除左側訂閱(最終我設法)並禁用伺服器上的發布和分發,這給了我:

SQL Server 無法禁用“someserver”上的發布和分發。

無效的對象名稱“dbo.syssubscriptions”。EXECUTE 之後的事務計數表明缺少 COMMIT 或 ROLLBACK TRANSACTION 語句。先前計數 = 0,目前計數 = 1。EXECUTE 之後的事務計數表示缺少 COMMIT 或 ROLLBACK TRANSACTION 語句。先前計數 = 0,目前計數 = 1。EXECUTE 之後的事務計數表示缺少 COMMIT 或 ROLLBACK TRANSACTION 語句。先前計數 = 0,目前計數 = 1。EXECUTE 之後的事務計數表示缺少 COMMIT 或 ROLLBACK TRANSACTION 語句。先前計數 = 0,目前計數 = 1。EXECUTE 之後的事務計數表示缺少 COMMIT 或 ROLLBACK TRANSACTION 語句。先前計數 = 0,目前計數 = 1。將數據庫上下文更改為“主”。(Microsoft SQL Server,錯誤:208)

似乎某些資訊未從系統數據庫備份中恢復(可能distribution數據庫可能缺少某些內容)。

我也嘗試遵循無法禁用發布和分發中給出的答案。但是沒有成功。我嘗試syspublicationsmaster和中創建distribution,但沒有任何改變。

那麼,我怎樣才能在這台伺服器上進行複制呢?

試圖在伺服器上發布一些其他數據庫並且它有效。所以問題似乎與發布的數據庫有關。如何清除它以管理在其上創建新出版物?

System Tables問題數據庫的子文件夾錯過了發布數據庫時創建的複製表。

在複製監視器中,我可以看到那些舊訂閱,而它們在復製文件夾中不可用 。

最後,我只是按照伺服器的要求做了,即通過Script Table在有問題的數據庫(即發布者)中創建了所有“發布”表(dbo.MSpeer_* 和 dbo.sys*) As -> CREATE To對話框。多虧了這台伺服器,我才能禁用發布和分發。然後我只需要重新配置複製。

希望下次它崩潰時(實際上我希望它不會),我們將足夠明智地徹底備份複製中涉及的表。


Zane的附加資訊,最初留在評論中:

表 dbo.MSpeer_* 和 dbo.sys* 也可以通過在安裝了 SQL Server 的不同伺服器上配置分發器/發佈器來創建。這將在您為發佈設置的數據庫中創建這些表。請參閱 -> 表 -> SSMS 中的系統表。

然後,為所有這些表生成模式,然後在有問題的數據庫中創建這些表,這將允許您禁用分發和發布並重新配置分發器。

引用自:https://dba.stackexchange.com/questions/30543