Sql-Server-2014

如何暫停事務複製的訂閱者端

  • September 24, 2021

如何在訂閱者端暫停事務複製。

我們在伺服器 A 上有一個發布者,在伺服器 B 上有一個分發者,在伺服器 C 上有一個訂閱者。所有這些都在同一個網路中。

一些背景知識,我們有一個非常繁忙的 BizTalk 伺服器,我們將數據從 BAM 部分複製到一個單獨的數據庫伺服器,該伺服器將用於定制的 Web 應用程序進行統計、搜尋等。看到 BizTalk 伺服器中的表都相當大型和缺失的索引等,因為它們基本上只是為了將數據轉儲到其中,我們選擇擁有第二個複制數據庫,我們可以在其中應用各種優化來讀取數據。

不過我注意到的一件事是,添加一個基本的、非集群的索引需要很長時間並導致各種鎖(我們使用的是 SQL Server Standard,所以不幸的是,線上索引不是一種選擇)我在想,給數據庫在創建索引時從 BizTalk 數據的所有寫入操作中稍作喘息將是一個好主意(對還是錯?)。

問題是,如何在創建索引時在訂閱者端暫停複製(而不失去來自發布者的任何數據)?

複製使用“代理”執行——本質上是執行工作的外部執行檔。對於事務複製,您有三個代理:

  • 快照代理 - 這是執行快照以初始化複製的過程(假設您沒有通過其他方法進行初始化。大多數人使用快照)。每個出版物有一個。它存在於 Publisher 或 Distributor 上。
  • 日誌讀取器代理 - 這是讀取發布者上的事務日誌、辨識更改並將這些更改寫入distribution分發伺服器上的數據庫的過程。每個出版物有一個。它存在於 Publisher 或 Distributor 上。
  • 分發代理 - 這是從您的distribution數據庫中獲取更改並將其推送給訂閱者的過程。每個訂閱者有一個。它存在於訂閱者或分發者上。

標准設置是代理作為 SQL 代理作業執行。如果您想停止向訂閱者分發命令,只需停止作業即可。您可以根據工作類別查找分銷代理REPL-Distribution。作業名稱將包含發布者/訂閱者資訊,以幫助您辨識要禁用的正確作業。在製作作業名稱時,這些值可能會被截斷,因此如果您有多個分銷商,您可能需要查看分配作業步驟本身,以 100% 確定您已確定正確的作業。

請注意,您還可以通過查詢分發數據庫來確認正確的作業——但我通常發現查看作業本身更快、更容易。

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