28

28. 合併式複寫

合併式複寫簡介

使用合併式複寫

設定合併式複寫系統

管理複寫

合併式複寫的監控與校調

本章總結

合併式複寫和交易式複寫不同的地方在於，合併式複寫可多方作業。利用合併式複寫讓發行者和訂閱者都可以更新發行集。雖然交易式複寫也允許訂閱者更新發行集，但是這兩種複寫類型的功能性卻有很大的差異。本章中會學到合併式複寫的運作方式，以及如何設定、監控與校調合併式複寫。

合併式複寫簡介

合併式複寫在發行者與一個或多個訂閱者之間執行雙向複寫。這樣可以允許數個系統擁有可以更新的發行集副本，並且可以修改自己的發行集副本。在訂閱者的修改會被複寫至發行者，然後再到其他訂閱者。

不像交易式複寫，合併式複寫的執行方式是在發行者和訂閱者安裝觸發程序。當發行集或發行集的副本有變更時，會觸動適當的觸發程序，產生複寫命令，並佇列等待以傳送至散發資料庫。這個複寫命令最後會被送至散發資料庫，然後傳送到參與複寫的系統。基於這樣的執行方式，合併式複寫會比交易式複寫的負擔來的大，尤其是在發行者。

在本章中您會學到在合併式複寫中兩個重要的成員，一個是 合併代理程式（Merge Agent） ，一個是散發資料庫。 合併代理程式 會合併自上一次合併後所發生的增量資料變更。當您使用合併式複寫時（並不會使用散發代理程式），合併代理程式會與發行者和散發者通訊。快照代理程式只用於建立初始資料庫。合併式代理程式會執行以下的作業：

1. 合併代理程式上載所有訂閱者變更的資料。
2. 沒有衝突的所有資料列會立即上傳（這些資料列即為在發行者與訂閱者都沒有變更的資料列）。有衝突的資料列（這些資料列即為在發行者與訂閱者都有變更的資料列）會被送至衝突解決器。 解決器（Resolver） 是一種用來解決合併式複寫中產生衝突資料的模組，您可以自行設定適用於自己的解決器。
3. 所有的變更會套用至發行者。
4. 合併代理程式上載所有來自發行者的變更資料。
5. 沒有衝突的資料列立即上傳；有衝突的送至衝突解決器。
6. 所有變更套用至訂閱者。

這個處理過程會依照排程重複執行。在發送訂閱模式中，合併代理程式在散發者執行；在提取訂閱模式中，合併代理程式在訂閱者執行。每一個合併式發行集都有自己的合併代理程式。

使用合併式複寫

合併式複寫適用於需要雙向複寫的情況，其應用層面十分廣泛，其中可允許訂閱者修改遞增資料這一項就帶來了不少好處。以下為合併式複寫的應用：

- 公司內部資料共享 ：例如一個公司內的負責薪資、應付賬款及應收帳款的部門就可以存取一樣的資料。每一個部門的使用者可以自行修改資料，然後在部門的系統上，合併所有的修改。
- 多點資料共享 ：當不同地點的使用者需要用到相同的資料，並且需要修改資料時，就可利用到合併式複寫。
- 訊息傳遞 ：合併式複寫可當作是訊息傳遞的系統，可以修改資料並將變更後的資料傳送回到原系統。

設定合併式複寫系統

設定合併式複寫和設定快照式與交易式複寫類似。首先必須設定發行集，然後將發行集以發送或提取的方式供訂閱者訂閱。

說明

在設定任何類型的 SQL Server 複寫之前，您必須先設定發行與散發。請參閱

第26章的〈設定發行與散發〉 一節的敘述。

設定發行集

設定合併式複寫發行集的過程和之前兩種類型的發行集略有不同，以下為設定的步驟：

1. 使用 Enterprise Manager，透過下列任一步驟執行設定，選擇 工具 ／ 複寫 ，按一下 建立和管理發行集 ；或是選擇 工具 ／ 精靈 ，選擇 建立發行集精靈 。用任一方式都可進入建立和管理發行集的對話方塊，如圖28-1 所示。這裡可選擇預發行的資料庫或資料表。

   圖28-1　「建立和管理發行集」對話方塊

   若發行集已存在，下列的按鈕就會顯示：

   - 發送新的訂閱 ：您可以為已經存在的發行集建立新的發送訂閱，這個步驟將會在本章的 〈設定訂閱〉 一節討論。
   - 屬性與訂閱 ：可更改發行集與訂閱屬性。
   - 指令化發行集 ：可建立指令碼用以建立更多發行集。
   - 刪除發行集 ：可以刪除已經設定的發行集。
2. 選擇發行集資料庫（如圖28-1，選擇 Northwind 為發行集資料庫），選擇 建立發行集 進入 歡迎使用建立發行集精靈 視窗，如圖28-2所示。選取 顯示這個精靈中的進階選項 選項。

   圖28-2　「建立發行集精靈」的歡迎視窗

3. 按一下 下一步 進入 選取發行集的資料庫 視窗，如圖 28-3 所示。可再次選擇欲發行的資料。在步驟二選取的資料庫會反白顯示。

   圖28-3　「選取發行集的資料庫」畫面

4. 按一下 下一步 進入 選取發行集類型 畫面，如圖28-4 所示。

   圖28-4　「選取發行集類型」畫面

   您可以選擇任一複寫類型，三種發行集的功能如下：

   - 快照式發行集 ：可以週期性的複寫發行項的快照集至訂閱者。您可以使用任何資料表建立快照式發行集。
   - 交易式發行集 ：可以建立交易式複寫發行集，該發行集會以發行者的變更來更新訂閱者資料。只有資料表有主索引鍵時，才可以建立交易式複寫的發行項。
   - 合併式發行集 ：可以建立合併式複寫發行集，該發行集允許您在發行者與訂閱者之間雙向複寫。您可以使用任何資料表建立合併式複寫的發行項。
5. 按一下 合併式發行集 ，按一下 下一步 進入 指定訂閱者類型 視窗，如圖28-5 所示。這個視窗可以指定是否所有的訂閱者執行 SQL Server。圖28-5顯示預設值，預設的設定指定所有的訂閱者都執行 SQL Server 2000。如果接受此設定值，就是將複寫設定為使用原生 SQL Server 2000 的資料類型。其他還可以選擇 SQL Server 7.0 的伺服器，或其他性質的伺服器，這個選項會使複寫資料轉換回字元格式，當然也會經過一些繁雜的轉換手續。

   圖28-5　「指定訂閱者類型」視窗

6. 按一下 下一步 進入 指定發行項 畫面，如圖28-6 所示。在這個畫面中，可以指定將資料表或其他資料庫物件當作發行項以進行複寫。這些發行項構成您所建立的發行集。在左邊所列出的畫面，可以在 顯示 中複選所列出的項目，包括 資料表 、 預存程序 及 檢視表 ，一旦選取任何一個項目，在右邊的視窗就會列出這些項目的明細。然後您可以在右邊的明細中再選取想要發行的資料表，或是回到左邊的視窗，選取 全部發行 項目中的所有資料表。記住，每一個資料表、預存程序或檢視表都視為一個獨立的發行項，而發行集是由一組發行項構成。

   圖28-6　「指定發行項」畫面

   說明

   若在訂閱者已存在預存程序，可以利用複寫呼叫預存程序，而不需要在網路上傳遞預存程序的結果。

7. 由於選擇的是合併式複寫，我們可以替發行項定義更多的屬性。按一下 [...] 按鈕即可進入 資料表發行項屬性 畫面設定屬性，如圖28-7 所示。

   您可以透過這個視窗中的標籤頁為發行項設定不同的屬性，圖28-7 即為 一般 標籤頁。這裡可以指定發行項名稱與來源資料表擁有者，並且決定資料衝突的定義。預設選項會將同一資料行進行變更視為衝突。

   圖28-7　「資料表發行項」屬性中的「一般」標籤頁

8. 選擇 解決器 標籤頁可指定解決器，如圖28-8 所示。如果使用預設的解決器，當衝突發生時，發行者會被視為是勝利的一端。還有，如果在訂閱者之間發生衝突，則首先進行同步的訂閱者就會被視為是勝利者（而稍後執行的其他訂閱者則會被視為是失敗端）。您也可以選擇其他的解決器或是自訂的解決器。
9. 在 合併變更 標籤頁中（如圖28-9），您可以對特定的操作，指定額外的安全性。藉由在 檢查使用權限 中選取一個或多個選項，您可以指定合併代理程式的權限以執行特定的操作，或者指定在執行某些操作前先檢查。另外，該標籤頁中有預設的選項，指定了多重資料行更新的方式，請接受這個預設值。按一下 確定 繼續設定。

   圖28-8　「資料表發行項」屬性中的「解決器」標籤頁視窗

   圖28-9　「資料表發行項」屬性中的「合併變更」視窗

10. 按一下 下一步 。檢查發行集後的結果會在這裡顯示，最可能看到的視窗會如圖28-10 所示。合併式複寫需要一個唯一的識別資料行，這個資料行會自動的幫您加入到資料表內。另外，在識別資料行上將會建立 NOT FOR REPLICATION 選項。

    圖28-10　「發行項的問題」畫面

11. 按一下 下一步 進入 選取發行集名稱與描述 畫面，如圖28-11 所示。在這個畫面中，簡單的指定發行集名稱與描述即可。
12. 按一下 下一步 進入 自訂發行集的屬性 畫面，如圖28-12 所示。在這個畫面中可以決定是否需要定義資料篩選或自訂其他發行集的屬性，選擇 否，依指定建立發行集 。

    圖28-11　「選取發行集名稱與描述」畫面

    圖28-12　「自訂發行集的屬性」畫面

13. 選擇 下一步 進入 完成建立發行精靈 畫面。按一下 完成 ，就可看到精靈建立發行集的過程，執行完畢後發行集即成功的建立。

現在檢查 複寫監視器 的 合併資料代理程式 資料夾，並不會有任何資料出現，這是因為合併代理程式是用於雙向複寫，因此在複寫之前需要先設定訂閱者。在訂閱者設定完成後，合併代理程式才會出現在複寫監控器的資料夾中。

設定訂閱

就如同之前兩種類型的設定一樣，設定合併式複寫的最後一個步驟就是設定訂閱者。首先必須在散發資料庫中啟用訂閱者，啟用的方法以在

第26章的〈啟用訂閱者〉 一節中介紹過。然後在訂閱者或發行者設定訂閱，從訂閱者可設定提取訂閱，而從發行者則可設定發送訂閱。

設定提取訂閱

設定提取訂閱的方式在 第27章的〈設定提取訂閱〉 一節中有介紹設定的步驟，由於設定的過程幾乎一模一樣，因此在這裡只簡單的帶過設定的步驟。

1. 進入 提取訂閱精靈 。
2. 進入 歡迎使用提取訂閱精靈 畫面。
3. 按一下 下一步 進入 尋找發行集 畫面，在這個範例中選擇在已註冊伺服器的伺服器中尋找發行集。
4. 按一下 下一步 進入 選取發行集 畫面，並且選擇要使用的發行集。
5. 按一下 下一步 進入 指定同步代理程式登入 畫面，指定代理程式連線到發行者時的方式和登入帳號。
6. 按一下 下一步 進入 選取目的資料庫 畫面，指定複寫的發行項要放在哪個資料庫中。
7. 按一下 下一步 進入 初始化訂閱 畫面，選擇適當的選項。
8. 按一下 下一步 進入 快照集傳送 畫面，選擇快照集傳送位置。
9. 按一下 下一步 進入 設定合併代理程式排程 畫面。這個畫面的設定和 第27章 中的 設定散發代理程式排程 類似，可參照之前的設定邏輯選擇適合選項。
10. 按一下 下一步 進入 設定訂閱的優先權 畫面，如圖28-13 所示。優先權的意思是說當衝突發生時有哪些訂閱集會優先被認為是正確的。預設的設定（也是建議的設定）指定當衝突發生時，在發行者的設定會優先被用來解決衝突。
11. 按一下 下一步 進入 啟動必要的服務 畫面，並且啟動未被啟動的 SQL Server 代理程式。
12. 按一下 下一步 進入 完成提取訂閱精靈 畫面，檢視設定確定無誤後，選擇 完成 即可完成訂閱集的設定作業，現在提取訂閱會定期更新。

    圖28-13　「設定訂閱的優先權」畫面

設定發送訂閱

發送訂閱要在發行者啟動，您可以使用 發送訂閱精靈 來設定。請參照以下步驟使用 發送訂閱精靈 ：

1. 使用以下任一方法進入 發送訂閱精靈 。第一種方法是在 Enterprise Manager 中按一下 工具 ，選擇 複寫 ／ 將訂閱發送至其他伺服器 ，進入 建立與管理伺服器的發行集 對話方塊，如圖28-14 所示。

   圖28-14　「建立與管理伺服器的發行集」對話方塊

   在 資料庫與發行集 中選擇一個發行集，並按一下 發送新的訂閱 按鈕。要使用第二種方法進入圖28-14 的對話方塊，請在工具列中選擇 工具 ，在選取清單中選擇 精靈 ，然後展開 複寫 ，並選擇 建立發送訂閱精靈 。

2. 按一下 發送新的訂閱 後，會看到如圖28-15 的 歡迎使用發送精靈 畫面。

   圖28-15　「歡迎使用發送精靈」畫面

3. 按一下 下一步 進入 選擇訂閱者 畫面，如圖28-16 所示。這裡可以指定發行集要發送至哪一個訂閱者。在 啟用的訂閱者 清單中選取訂閱者。

   圖28-16　「選擇訂閱者」畫面

4. 按一下 下一步 進入 選取目的資料庫 畫面，如圖28-17 所示。這裡可以指定訂閱者的資料庫，您可以選擇已經存在的資料庫，或是依需要建立新的資料庫。按一下 瀏覽或建立 按鈕可以看到已經存在資料庫的清單。如要建立新的資料庫，在按一下此按鈕後可再按一下 建立新物件 ，然後在 資料庫屬性 的視窗中建立新的資料庫。
5. 按一下 下一步 進入 設定合併代理程式的位置 畫面，如圖28-18 所示。指定合併代理程式執行的位置，選擇接受預設值即將合併代理程式在散發者執行，您也可以選擇在訂閱者執行代理程式。除非散發者的工作非常忙碌，否則建議接受預設值。

   圖28-17　「選取目的資料庫」畫面

   圖28-18　「設定合併代理程式位置」畫面

6. 按一下 下一步 進入 設定合併代理程式的排程 畫面，如圖28-19 所示。在這裡可以選擇連續更新訂閱集或選擇依排程更新訂閱集。選擇依排程更新訂閱集，按一下 變更 按鈕可進入 編輯重複執行作業排程 對話方塊更改排程及更新訂閱集的頻率。記住如果選擇的是連續更新，會造成系統的負擔。

   圖28-19　「設定合併代理程式的排程」畫面

7. 按一下 下一步 進入 初始化訂閱 畫面，如圖28-20 所示。在這裡可以指定訂閱集是否需要初始化。初始化結構描述和在訂閱者的資料集已經由預設指定。如果結構描述已經存在，就無法選取 否， ...這個選項。這個畫面中也可以啟動快照集代理程式，建議在初始化快照集時就啟動快照集代理程式，否則就必須手動啟動代理程式。一旦啟用了快照集並且開始進行複寫，在新的訂閱建立之前都不會使用到快照集。每建立一次新的訂閱，就要建立新的快照集。
8. 按一下 下一步 進入 設定訂閱的優先權 畫面，如圖28-21 所示。這裡可以設定當衝突發生時訂閱的優先權。建立接受預設值，也就是當衝突發生時，發行者的設定會有優先權。

   圖28-20　「初始化訂閱」畫面

   圖28-21　「設定訂閱的優先權」畫面

9. 按一下 下一步 進入 啟動必要的服務 畫面，如圖28-22 所示。在這裡可以啟動還未啟動的 SQL Server 代理程式。

   圖28-22　「啟動必要的服務」畫面

10. 按一下 下一步 進入 完成發送訂閱精靈 畫面，如圖28-23 所示。檢查所有的設定是否正確後，按一下 完成 開始將快照集複製到訂閱者的程序。您會看到一個描述程序進行的對話方塊，最後會出現操作程序完成的訊息方塊。當精靈完成後，發送訂閱就建立，且會定期更新。

    圖28-23　「完成發送訂閱精靈」畫面

管理複寫

在了解如何在 SQL Server 2000 環境中建立與設定複寫資料庫後，現在可以來學習利用 Enterprise Manager 的監控功能與設定選項，管理與疑難排除當複寫不能如預期執行時的問題。

複寫代理程式的監控與管理

在 Enterprise Manager 中的 複寫監視器 資料夾可以找到 代理程式 。請參照以下步驟存取代理程式：

1. 展開伺服器群組、您的伺服器，及複寫監視器資料夾。
2. 如果展開的是發行者伺服器， 發行者 和 代理程式 資料夾會出現在 複寫監視器 資料夾中。 發行者 資料夾內包含屬於此伺服器的所有發行者。 代理程式 資料夾內含有 快照集代理程式 、 散發代理程式 、 合併代理程式 ，及用在清除和歷程記錄資料的 其他代理程式 。
3. 雖然代理程式通常不需要被手動啟動或停止，但需要時可使用 複寫監視器 來執行。如果複寫系統並未依照設定執行，很可能是由於使用預設的選項而沒有立即啟動快照集代理程式。（這就是為什麼之前在設定過程中我們建議選擇立刻執行初始快照集）。在 Enterprise Manager 中按一下代理程式資料夾，檢查代理程式的狀態，並在右方窗格中檢示有關代理程式的資訊，如圖28-24 所示。這裡可以決定是否執行某個代理程式，也可以看到是否該代理程式正在使用中。當啟動了某個代理程式，代理程式會執行直到任務完成，然後停止作業。接者，SQL Server 代理程式會依排程複寫代理程式。

   圖28-24　Enterprise Manager 中的合併代理程式

4. 在代理程式中按右鈕呼叫快顯功能表，在這裡有幾個可以提供監控和管理代理程式的選項，如圖28-25 所示。

   這些選項的簡介如下：

   - 錯誤詳細資料 ：列出所有曾經發生的錯誤清單。
   - 代理程式歷程記錄 ：列出代理程式活動。
   - 代理程式屬性 ：讓您修改複寫代理程式的排程、資料庫存取方式、代理程式的步驟，以及作業完成後的執行動作，例如可以選擇讓系統以電子郵件通知您代理程式執行事件的完成。
   - 代理程式設定檔 ：可以檢視及修改代理程式參數，例如登入逾時斷線時間、批次操作大小，以及查詢逾時斷線時間的設定等。
   - 在訂閱者端執行代理程式 ：可指定在訂閱者執行代理程式。
   - 在散發者端執行代理程式 ：可指定在散發者執行代理程式。
   - 啟動代理程式與停止代理程式 ：可以啟動或停止代理程式。
   - 重新整理速度和設定值 ：可以修改重新整理執行監控資料的頻率。
   - 選取欄位 ：可以指定結果集中想要檢視的資料行。
   - 顯示匿名訂閱 ：指定是否在視窗中顯示匿名訂閱。
   - 說明 ：提供關於此視窗的說明資訊。

   圖28-25　合併代理程式選項

設定合併代理程式

建立發行集後，可能會需要修改合併代理程式的行為模式。舉例來說，你可以指定合併代理程式的啟動模式。在連續模式中，合併代理程式在 SQL Server 代理程式啟動後也一併啟動。而在依照排程執行的模式中，合併代理程式會依照您指定的排程啟動，完成讀寫交易記錄檔中複寫的交易就停止。更改模式和其他的屬性可以提高執行效能，並降低發行者的負擔。以下為設定合併代理程式的步驟：

1. 在 Enterprise Manager，展開想要修改的伺服器，展開 複寫監視器 資料夾，展開 代理程式 後選擇 合併代理程式 資料夾。
2. 在右邊的窗格中，選取發行集按右鈕以呼叫快顯功能表，接著選擇 代理程式屬性 。
3. 合併代理程式屬性視窗出現，如圖28-26 所示。

   圖28-26　「合併代理程式屬性」視窗中的「一般」標籤頁

4. 選擇 步驟 標籤頁，如圖28-27 所示。在標籤頁，我們可以看到合併代理程式執行的步驟，這些步驟執行的動作各為：
   - 記錄讀取代理程式啟動訊息 ：將訊息記錄在 記錄讀取代理程式 的歷程記錄中（在散發資料庫的MSLogreader_histroy資料表中）。
   - 執行代理程式 ：依指定的排程啟動代理程式，當執行模式為連續時，代理程式會在系統結束時才停止執行。
   - 偵測非記錄性代理程式的結束 ：將代理程式事件失敗的訊息放在記錄讀寫器代理程式的歷程記錄中。
5. 選擇 執行代理程式 步驟選擇 編輯 按鈕進入 編輯作業步驟 對話方塊，如圖28-28 所示。在這個對話方塊可以設定如何啟動合併代理程式。

   圖28-27　「合併代理程式屬性」視窗中的「步驟」標籤頁

   圖28-28　「編輯步驟」對話方塊中的「一般」標籤頁

   合併代理程式可以設定很多選項。預設的合併代理程式參數可在本步驟中的 命令 方塊及 複寫代理程式設定檔的詳細資料 對話方塊中變更（稍後會介紹）。可變更的兩項參數如下：

   - Contunuous ：指定是否合併代理程式以連續模式或依排程執行。刪除參數即可將合併代理程式依排程執行。
   - DistributorSecurityMode ：指定合併代理程式使用 SQL Server 或 Windows NT 模式驗證。

   另外，您也可以在 編輯 對話方塊中指定其他參數，例如Login Timeout、Buffers、Polling Interval、Query Timeout、散發者和發行者資訊及Output。

   相關資訊

   關於這些參數的設定可以在 SQL Server《線上叢書》中找到資料。在 索引 標籤頁中輸入 合併代理程式 後選擇 啟動 主題即可。

6. 完成 合併代理程式屬性 的修改後，按一下 確定 儲存修改。

透過 合併代理程式設定檔 ，可以修改其他的選項，請按照下列的步驟：

1. 在 Enterprise Manager 左邊的窗格中，展開 合併代理程式 ，選定發行集後按右鈕，叫出快顯功能表，選擇 代理程式設定檔 ，如圖28-29 所示。

   圖28-29　「合併代理程式設定檔」對話方塊

   注意此對話方塊所包含的選項比記錄讀取器代理程式（

第27章 中有介紹）還多。這些設定檔提供了功能範圍，讓您可選擇一個最適合系統的設定檔。
- 按一下 新增設定檔 按鈕以建立一個新的設定檔。現有的設定檔不允許修改。按下按鈕後會看到如圖28-30 的畫面。

圖28-30　「複寫代理程式設定檔的詳細資料」對話方塊

- 在此對話方塊中，可以修改以下的參數：
  - BcpBatchSize ：在大量複製作業中傳送的資料列數目。在套用結構描述變更的作業中執行 bcp 時，「合併代理程式」會使用批次大小來決定記錄進度訊息的時間。數值 0 表示未記錄任何訊息。
  - ChangesPerHistory ：記錄上傳和下載訊息的臨界值。
  - DownloadGenerationsPerBatch ：自「發行者」下載變更至「訂閱者」時，單一批次中處理的世代數目。世代被定義為每個發行項的變更的邏輯群組。不可靠通訊連結的預設值為 10。

    不過，在各種狀況下，每個批次所處理的實際世代數目，會等於 UploadGenerationsPerBatch 設定與已發行的發行項數目加一之間的較大值。

  - DownloadReadChangesPerBatch ：自「發行者」下載變更至「訂閱者」時，單一批次中讀取的變更數目。
  - DownloadWriteChangesPerBatch ：自「發行者」下載變更至「訂閱者」時，單一批次中套用的世代數目。
  - FastRowCount ：指定驗證資料列計數時所用的資料列計數方法的型別。數值 1（預設值）表示使用快速的方法；數值 0 表示使用完整資料列計數的方法。
  - HistoryVerboseLevel ：在合併作業期間記錄的歷程的數量可為：
    - 總是更新相同狀態先前的歷程訊息（啟動、進行、成功等）。若無相同狀態的先前記錄，則插入新紀錄。這一層級會記錄最小的訊息數目。
    - 插入新的歷程記錄，除非此記錄用於類似閒置（Idle）訊息或長期執行的工作訊息的項目中，此時會更新先前的記錄。這一層級會記錄層級 1 的訊息，以及其他進行中的訊息。
    - 總是插入新的記錄，除非它是閒置（Idle）訊息。

    可以設定ChangesPerHistory參數，使歷程記錄對效能的影響減至最小。

  - KeepAliveMessageInterval ：歷程執行緒檢查是否有連線在等待伺服器回應之前的秒數。可以增加這個值，以避免長期執行批次時，代理程式遭檢查代理程式標示為可疑。
  - LoginTimeout ：在代理程式逾時之前嘗試登入的秒數。
  - MaxDownloadChanges ：在指定的合併工作階段期間，想要下載的最大變更的數目。由於要處理完整的世代，因此下載的資料列數目可能超過指定的最大值。
  - MaxUploadChanges ：在指定的合併工作階段期間，想要上傳的最大變更的數目。由於要處理完整的世代，因此上傳的資料列數目可能超過指定的最大值。
  - MaxDeadlockRetries ：合併處理序在遭遇死結（Deadlock）時重新嘗試內部作業的次數。可為介於 1 和 100 之間的任何值。
  - PollingInterval ：在連續模式下，「發行者」或「訂閱者」查詢資料變更的秒數。
  - QueryTimeout ：在代理程式逾時之前發出查詢的秒數。
  - UploadGenerationsPerBatch ：自「訂閱者」上傳變更至「發行者」時，單一批次中處理的世代數目。世代被定義為每個發行項的變更的邏輯群組。不可靠通訊連結的預設值為 1。

    不過，在各種狀況下，每個批次所處理的實際世代數目，會等於 UploadGenerationsPerBatch 設定與已發行的發行項數目加一之間的較大值。

  - UploadReadChangesPerBatch ：自「訂閱者」上傳變更至「發行者」時，單一批次中讀取的變更數目。
  - UploadWriteChangesPerBatch ：自「訂閱者」上傳變更至「發行者」時，單一批次中套用的變更數目。
  - Validate ：指定在合併工作階段結束時是否要加以驗證，若是如此，則該驗證是何型別。數值 0（預設值）表示無驗證。數值 1 表示是僅限資料列計數的驗證。數值 2 表示是資料列計數和加總檢查碼（Checksum）驗證。數值 3 表示二進位加總檢查碼驗證（僅可用於 SQL Server 2000）。
  - ValidateInterval ：設定為連續模式時，驗證此訂閱的分鐘數。

    如果合併式複寫是依排程模式執行，就會由 SQL Server 代理程式啟動，並且會在結束之前，依MaxUploadChanges及MaxDownloadChanges的指定，處理更改的次數。

停用複寫

利用 Enterprise Manager 可停用所有或部分的複寫，只要在 Enterprise Manger 的複寫精靈中移除選取的複寫元件即可。本節會學習如何簡單的執行這項作業。

移除發送訂閱

在散發者系統中，使用Enterprise Manager的發送訂閱精靈就可移除發送訂閱。在啟動發送訂閱精靈後就會出現 建立與管理發行集 對話方塊，按一下要刪除的訂閱後，按一下右方 刪除發行集 的按鈕，出現提示方塊，詢問是否確認刪除此訂閱。按一下 是 即可移除訂閱。

移除提取訂閱

在訂閱者系統中，使用 Enterprise Manager 的提取訂閱精靈就可移除提取訂閱。在啟動提取訂閱精靈後會出現 建立與管理發行集 對話方塊，按一下要刪除的訂閱後，再按一下右方 刪除發行集 的按鈕，出現提示方塊，詢問是否確認刪除此訂閱。按一下 是 即可移除訂閱。

移除散發和發行

要移除散發和發行，必須開啟 停用散發暨發行精靈 。在停用精靈的第一個畫面，必須指定是否停用所有散發及發行，或只移除發行。如果選擇的是第一個選項，伺服器上所有的發行集、訂閱和散發者都會被移除；如果選擇的是第二個選項（預設選項），就只有發行集會被移除。在選項決定後，會出現確認畫面，按一下 是 按鈕後就會移除所選的複寫元件。

合併式複寫的監控與校調

本節將學習如何監控和校調合併式複寫系統，使其以最佳化執行。另外也會介紹合併式複寫系統的設定要點，以及合併式複寫的屬性。

合併式複寫的屬性

合併式複寫和其他兩種類型的複寫方法不太相同，最大的不同處在於合併式複寫不採用單向的複寫方法，在發行者或任何訂閱者都可以進行修改。另外，交易式複寫的交易記錄檔是被讀取以追蹤變更，屬於 SQL Server 的外部操作；合併式複寫則是在複寫資料表中建立觸發程序來追蹤變更。

在首次執行合併式複寫時會利用到快照集，不過只會發生一次，因此不需校調快照式複寫處理過程。合併式複寫同時在發行者與散發者建立資料表，以執行複寫。另外，一個 GUID 資料行會被新增至複寫的每一個資料表中，這樣可以唯一的辨識出每一個資料列，因此複寫代理程式才能追蹤受影響的變更。

當插入或修改資料列，觸發程序會標記該資料列以供複寫，日後當合併代理程式被啟動時，就會將所有標記的資料列送至散發者資料庫以供複寫。同時，在訂閱者系統中被修改過的資料列，也會由合併代理程式將修改更新至發行者。這樣就完成了雙向的複寫程序。

設定合併式複寫

合併式複寫需要正確的設定所有參與系統的 I/O 子系統。網路對改善複寫執行效能也非常的重要。設定正確的批次操作大小也很重要。如果增加批次操作大小，每個批次操作的內容增多，檔案數量較少，這樣的設定較有效率。此外，您還可以校調快照式複寫。不過，由於快照集應用程式只作用一次，因此可以跳過這個步驟。最後您可以修改合併代理程式，這個修改程序在本章稍早有提及。本節將介紹的是 I/O 與合併式批次操作容量的設定。

設定足夠的 I/O 容量

若是 I/O 的容量足夠，就能增進複寫過程的效能。如同其他的 SQL Server 系統，系統中負責記錄複寫的交易記錄檔應該放在自己的 RAID 1 磁碟區中以便保護資料，而資料檔案則應該放在一個或數個 RAID 10 或 RAID 5 磁碟區。和交易式複寫相同的地方在於，合併式複寫只需微幅的調整標準 I/O 設定。

在發行者設定 I/O 子系統 一般來說，在設定發行者的 I/O 子系統時，應遵照本書中不斷提及的重點來設定。和交易式複寫不同的地方在於，合併式複寫不會增加交易記錄檔的負擔，只要遵照一般的要點作設定即可。

在散發者設定 I/O 子系統 散發者資料庫的交易記錄檔應設定在 RAID 1 磁碟區。這樣可使得散發者資料庫的記錄檔達到最佳執行效能，改善散發者的執行效能。

在訂閱者設定 I/O 子系統 由於合併式複寫是雙向的進行，因此訂閱者和發行者的校調方式類似，只要遵照一般的要點作設定即可。

設定合併批次操作容量

在繁忙的系統中，您可以利用設定合併批次操作容量的方式改善複寫執行。合併批次操作容量決定了單一批次操作中要複寫多少有變更的資料列。如果增加批次操作容量，每個批次操作的內容增多，檔案數量較少，這樣的設定較有效率。

監控合併式複寫系統

監控交易式複寫活動的方式可透過效能監視器。效能監視器在安裝 SQL Server 複寫時會加入一些物件，物件如下：

- SQLServer:Replication Agents ：計算現在系統中有幾個不同類型的代理程式正在執行。
- SQLServer:Replication Merge ：提供關於合併式複寫的速率資料，包括每秒中衝突、上載與下載次數。請注意這些資訊並不會真的一定有辦法輔助校調合併式複寫。

  利用效能監視器來監控這些值可讓您了解是否散發者有執行效能上的困難。雖然這些效能監視器資料提供很多有用的資訊，但並不一定可找出真正的問題。校調合併式複寫最好的方法還是注意網路的執行效能，檢查可能會產生網路效能瓶頸的地方。參照前兩章的要點，檢查散發者的負載是否過重。

  校調合併式複寫系統

  校調合併式複寫系統最主要的步驟就是正確的設定和監控系統，這些在前一節中已提及。透過效能監視器監控您的系統，注意網路的效能。不過，對合併式複寫資料來說，效能監視器所提供的資料就不是那麼有用。反而可能要參考其他 SQL Server 的計數器和 Microsoft Windows 2000 的計數器來校調系統。

第24章 曾經提到，當系統的更新次數頻繁，可能需要修改 BCP 批次操作容量和合併式批次操作容量。如果增加 BCP 批次操作容量大小，原來快照集代理程式的執行效能也會增加。如果增加合併批次操作容量，由於每個批次操作的內容增多，檔案數量較少，影響系統的次數也減少，是較有效率的設定。不過在複寫時會增加較多的工作量。

此外，您可以變更輪詢頻率，變更輪詢頻率可以使合併式複寫執行的頻率增加或減少。不過若非必要，並不建議這種變更。如果要校調輪詢時間，試著先變更批次操作容量。

如有必要，還要監控網路是否可承載負荷。如果系統並不是執行的很順，舉例來說，如果 CPU 和 I/O 子系統達到飽和，或是複寫過程的時間過長，就可能是網路出了問題。網路的問題就比較棘手，因為網路的問題不是檢查效能監視器就可以，可能要用到如 Microsoft System Management Server（SMS）這樣的網路監控產品才可以監控網路卡是否已達飽和。如果網路卡已達飽和，解決的辦法就是購買更快的網路卡，或是新增一條專屬的網路供複寫、備份和復原來使用。不論是發行者、散發者或是訂閱者，都屬於 SQL Server 系統。所以校調這些系統的方式就如同校調 SQL Server 系統時所應注意的要點。

本章總結

本章為複寫系列的最後一章，在本章中您應該已經學到合併式複寫的執行，及合併式複寫的用途。另外，也學習如何正確的設定、監控與校調合併式複寫。在下一章中我們將學習 Microsoft Analysis Service 的使用。