26

26. Microsoft SQL Server 複寫：概觀與快照式複寫

什麼是資料庫複寫？

複寫概念

設定發行與散發

快照式複寫

管理複寫

快照式複寫校調

本章總結

Microsoft SQL Server 資料庫複寫技術可用於散發資料和預存程序在不同的伺服器，複寫允許設定系統自動地將資料複製到另一個系統。使用資料庫複寫，您可依您的需求決定應複製資料的多寡，並且可決定要把資料分配到多少個系統裡。由於複寫程序是自動的，並且複寫期間資料庫會將複寫的狀態資料及複寫資料都儲存下來，因此不用擔心資料遺失的問題。如果複寫程序被中斷（如斷電），在系統恢復正常運作後，複寫會從中斷處繼續進行。

由於複寫的程序相當複雜，本書以三章來討論這個主題。本章會先學到複寫與快照式複寫的基本方法與概念， 第27章 會介紹交易式複寫， 第28章 則介紹合併式複寫，這三章提供的資訊將可讓您徹底了解 SQL Server 複寫，包括如何規劃、管理與使用。

什麼是資料庫複寫？

資料庫複寫（Database Replication） 是一種從一個資料表或資料庫將資料複製或複寫到另一個資料表或資料庫的動作。使用複寫，您可以完整或指定部份的資料庫複本，分散到公司內部的其他系統。當使用 SQL Server 複寫，分配和複製資料的任務即自動進行，在複寫資料的過程中也不需要使用者的介入。由於資料複寫與程序是由 SQL Server 內部來完成，因此具備了穩定性與可復原性。如果複寫期間（或是任何 SQL Server 交易進行期間）產生錯誤，作業會在問題修復後從中斷處繼續執行。因此，許多人利用複寫取代其他在系統間搬移資料的方法。

有許多選項可用來規劃網路上的複寫。例如，您可指定要複寫的資料多寡。您可指定複寫的複本是唯讀還是可修改。也可指定資料每隔多久就需要複寫。在

〈規劃快照式複寫〉 一節裡將介紹這些與其他的選項。

複寫概念

本節將學習基本的資料庫複寫概念。首先了解發行和訂閱模型，以及複寫的三種類型：複寫資料、資料傳播以及複寫代理程式。

複寫元件

Microsoft SQL Server 2000 中的複寫是利用「發行和訂閱（publish-and-subscribe）」模式，這個模式首先在 SQL Server 6.0 中被用來建置資料的複寫，主要包括三個觀念，即 發行者（publishers） 、 散發者（distributors） 和 訂閱者（subscribers） 。「發行者」是使資料可供複寫的資料庫系統；「散發者」是包含分散資料庫或虛擬資料（pseudodata）來維護和管理複寫的資料庫系統；「訂閱者」是接受複寫資料和儲存複寫資料庫的資料庫系統。

發行者

發行者是由一個安裝有 SQL Server 資料庫的 Microsoft Windows 系統組成。此資料庫是被複寫資料的來源。此外也會偵測已經變更的資料，使資料確實的被複寫。發行者也需維護該站台中關於發行集的所有資訊，例如哪些資料被規劃複寫等等。依複寫類型的不同，發行者在複寫過程依需要負擔不同的工作量，本章稍後將有進一步解釋。

一個複寫環境可以包含很多訂閱者，但任何要給予發行的 發行項（article） ，亦即規劃要複寫的資料集，只能有一個發行者。（發行項將在本章稍後

〈複寫資料〉 一節裡詳細說明。）一個特定的資料集只能有一個發行者，並非意味著發行者是唯一一個可修改資料的元件，訂閱者也可修改資料甚而再發行資料，不過這需要一點技巧，您可參閱本章及後兩章。

散發者

散發者是包含散發資料庫和儲存中繼資料、歷程記錄資料及其他資訊的伺服器；散發者也需負責將複寫資料散發給訂閱者。發行者和散發者並不需要放在同一台伺服器上，事實上，您可能會比較喜歡用一台專用的伺服器來擔任散發者。當建立發行者時，每個發行者必須指派一個散發者，且一個發行者只能有一個散發者。這種安排方式將在本章稍後 〈規劃發行與散發〉 一節裡有詳細的說明。

說明

中繼資料（metadata） 是關於資料的概要資料，用來在複寫中追蹤複寫作業的狀態。該資料同樣會由發行者傳播給複寫集合中的其他成員，內容包括資料結構與資料屬性的相關資訊，如某一資料行中資料的型別（數值型態、文字型態等）或資料行的長度等。

訂閱者

剛才已經提到，訂閱者是儲存複寫資料和接收更新的資料庫伺服器。訂閱者也可進行更新並和發行者一樣對其他系統提供服務。同時，一個訂閱者也可以作為其他系統的發行者。要讓訂閱者接收複寫資料，它必須訂閱該資料。「訂閱複寫」（subscribing to replication）指的是訂閱者接收該資料的規劃方式。而一個「訂閱」（subscription）意指您所訂閱的資料庫資訊。我們在本章的 〈規劃快照式複寫〉 一節中將討論這些元件之間的相互關連性。

複寫類型

SQL Server 提供了三種類型的複寫：快照式（snapshot）、交易式（transactional）和合併式（merge）。這些複寫的類型提供了複寫資料庫中不同程度的資料一致性，同時也會有不同層級的系統負荷。

快照式複寫

快照式複寫是最簡單易懂的複寫類型。在快照式複寫中，資料庫的快照集（snapshot）將週期性地產生並傳播給訂閱者。快照式複寫的最主要的優點在於，它不涉及到發行者和訂閱者之間持續的系統負荷；也就是說，它不需要連續的監控發行者上的資料變更，也不需持續傳送資料至訂閱者。最大的缺點在於，目前存在於訂閱者上的資料庫不一定是最新的快照集。

在很多情況下，快照式複寫已經足夠並且合適。舉例來說，當來源資料的修改只是偶爾為之的時候，像電話清單、價格表和項目描述等資訊，可以很容易的使用快照式複寫來處理，這些清單可以在每天的業餘時間進行更新。

交易式複寫

交易式複寫可用來將變更複寫至資料庫。使用交易式複寫，任何發行項（規劃要複寫的資料集）的變更將立即從交易記錄檔中被擷取出來並傳播至散發者。依照您複寫的規劃，利用交易式複寫可讓您的發行者與其訂閱者保持近乎一致的狀態。

當需要保持所有複寫系統為最新狀態時，應使用交易式複寫。由於每個造成系統中資料變更的交易均會個別套用至複寫系統，交易式複寫比快照式複寫佔用更多的系統資源。不過，交易式複寫比快照式或合併式複寫更能保持系統在最新的狀態。交易式複寫將在 第27章 詳細說明。

合併式複寫

合併式複寫與交易式複寫類似的地方在於它會持續追蹤發行項的變更。不過，合併式複寫並不會個別的傳播造成變更的交易，而是週期性的傳送一整批變更。由於合併式複寫以批次方式傳送資料，它也類似於快照式複寫。（雖然在快照式複寫中，所有規劃要複寫的資料都會傳播，而不只是變更。）合併式複寫將在 第28章 詳細說明。

複寫資料

您必須將要複寫的資料儲存在一個稱為發行集的物件中。一個 發行集（publication） 是由一個（含）以上的發行項組成。讓我們更詳細的看一下發行項與發行集。

發行項

之前已提到，一個發行項是要複寫的資料的個別集合。一個發行項可以是一整個資料表，或是由特定的資料行與資料列構成的資料表子集，或是一個預存程序。您可以使用篩選器來建立子集。「水平篩選器（horizontal filter）」可用來建立由資料列構成的子集；「垂直篩選器（vertical filter）」則可用來建立由資料行構成的子集。水平與垂直篩選器將在本章稍後詳細說明。

說明

在合併式複寫中，篩選器的定義與運作跟快照式與交易式複寫並不相同。本章與接下來的兩章將會詳細說明。

發行集

發行集是發行項的集合，這些發行項被組合在一起視為一基本單元。發行集將邏輯分組後的發行項視為一組複寫物件。舉例來說，您可以建立一個發行集來複寫一個由許多資料表構成的資料庫，每個資料表定義成一個發行項。在複寫資料庫時，以一個發行集來複寫整個資料庫會比資料表個別地複寫要來得更有效率。

發行集可由單一的發行項來構成，但它多半都包含有一個以上的發行項。不過，訂閱者只能訂閱發行集，而不能訂閱發行項。因此，如果您希望訂閱一個單一的發行項，您必須設定一個只有此發行項的發行集，然後訂閱這個發行集。

發送與提取訂閱

複寫資料可以利用數種方法來傳送。所有的傳送方法的基礎不是「發送訂閱」（push subscriptions）便是「提取訂閱」（pull subscriptions）。訂閱者可以支援同時混合了發送訂閱和提取訂閱的訂閱方式。

發送訂閱

當使用發送訂閱時，散發者負責為訂閱者提供更新。更新的初始化並不需要任何來自訂閱者的請求。發送訂閱在需要集中管理時很有用，這是因為這些複寫都由散發者控制和管理，而不是不同的訂閱者。換言之，複寫的初始化與排程由散發者掌控。

發送訂閱允許您在複寫排程上有更大的彈性。發送訂閱可以被設定為保持複寫情形接近即時同步，或根據規定的排程來執行更新。在本章的

〈規劃複寫〉 一節中，您將學到更多有關這些選項的內容。

提取訂閱

提取訂閱（pull subscription）允許訂閱者初始複寫，複寫可依排程或以手動進行。提取訂閱適用於當發行集擁有大量的訂閱者或是訂閱者連線時間不定。透過提取訂閱，訂閱者可定期連線網路及提取複寫資料。提取訂閱的另一個好處是可降低送至散發者的連線錯誤訊息。如果散發者欲初始複寫至沒有回應的訂閱者，將產生錯誤訊息。因此，如果複寫是由訂閱者在連線時初始化，就不會產生錯誤訊息。

複寫代理程式

數個代理程式可執行將複寫資料由發行者傳至散發者，到最後至訂閱者手中。這些代理程式包括：快照集代理程式、記錄讀取器代理程式、散發代理程式、合併代理程式及佇列讀取器代理程式。本節將學習如何管理這些代理程式。

快照集代理程式

「快照集代理程式」用於建立及傳播快照集至散發者（或快照點）。快照集代理程式建立複寫資料（即快照集）和建立資訊，此資訊可讓散發者代理程式用來傳播資料（此資訊即中繼資料）。快照集代理程式將資料快照儲存至散發者，或指定其他或者額外位置來儲存。快照集代理程式也負責維護複寫物件的同步狀態資訊；這項資訊儲存在發行者資料庫中。

快照集代理程式依排程的不同，可定時啟動執行作業。快照集代理程式會執行下列步驟：

1. 建立散發者與發行者之間的連線。假設兩者未連線，則快照集代理程式不會建立快照集。當連線建立，快照集代理程式則鎖定所有發行項，以確保資料快照集的一致性。（由於鎖定後可以防止其他使用者更新資料表，因此快照集代理程式必須安排在資料庫活動的離峰時間執行。）
2. 建立發行者與散發者之間的連線，並為每個發行項寫入一份資料表結構描述至散發者資料庫，這份資料即為中繼資料。
3. 複製發行者上已經發行資料表中的資料，將其寫至快照集資料夾中。快照集資料夾不一定要放在散發者。如果所有訂閱者均屬於 SQL Server 系統，則快照集會儲存為 原生大量複製工具程式（native bulk copy program） （大量複製在 第24章 有討論）檔案。若有一或多個訂閱者屬於異質性資料來源，則快照集會儲存成文字檔。至此由快照集代理程式設定同步資訊。
4. 當資料被複製後，快照集代理程式即更新於散發者資料庫資訊。
5. 釋放每一個已經發行資料表的共用鎖定，並完成記錄歷程資料表的寫入動作。

所以，快照集代理程式僅負責建立快照集，而散發資料至訂閱者則由其他代理程式執行。

當使用快照集複寫且在發行者的資料有異動，快照集應經常更新。由於快照集固定被複製至訂閱者，故應保持最新狀態。

說明

當使用的是交易式複寫或合併式複寫，或是增加新訂閱，就無須更新快照集。

記錄讀取代理程式

記錄讀取代理程式用於交易式複寫。它可將標示為複寫的交易，自發行者的交易記錄移至散發資料庫中。標示為交易式複寫的每個資料庫都具有一個在散發者的記錄讀取器代理程式。記錄讀取器代理程式會在本書 第27章 詳細討論。

散發代理程式

散發代理程式（Distribution Agent）散發快照集與來自散發者資料庫中的交易至訂閱者。每一個發行者均有自己的散發代理程式。如果使用發送訂閱，則透過散發者的散發代理程式執行。如果使用提取訂閱，則透過訂閱者的散發代理程式執行。

合併代理程式

合併代理程式（Merger Agent）可搭配合併式複寫，用在合併遞增資料。當使用合併式複寫，就不使用到散發代理程式或快照集代理程式，而是使用合併代理程式連結發行者和訂閱者。在 第28章 我們會詳細討論合併代理程式。

佇列讀取器代理程式

佇列讀取器代理程式（Queue Reader Agent）用來傳送更新資料至具佇列更新選項的快照式複寫或交易式複寫訂閱者。這個選項允許在不使用分散式交易的情況下，在訂閱者處作變更。

監視複寫代理程式活動

您可使用 Enterprise Manager 監視複寫代理，步驟如下：

1. 在 Enterprise Manger 中展開伺服器群組，然後展開指定為散發者資料庫的伺服器。
2. 在 複寫監視器 按一下滑鼠右鍵，然後按一下 效能監視器 。
3. 展開 複寫監視器 資料夾，然後展開 代理程式 資料夾。
4. 展開欲監視的代理程式資料夾。
5. 按一下要監視的代理程式，在右方詳細資料窗格的資料列按一下滑鼠右鈕叫出快顯功能表，然後按一下 代理程式歷程 即可監視複寫代理程式歷程。

設定發行與散發

要設定發行與散發，可透過 設定散發暨發行精靈（Configure Publishing and Distribution Wizard） ，也可透過預存程序設定發行與散發，但透過 設定散發暨發行精靈 是較建議的做法。透過 Enterprise Manager，可利用以下的精靈作複寫設定：

- 建立發行集精靈
- 建立提取訂閱精靈
- 建立發送訂閱精靈
- 停用發行和散發精靈

本節將介紹的設定發行與散發程序適用所有複寫類型。在設定發行與散發者後，再設定複寫類型（本章稍後及以下兩章會介紹如何設定各類型複寫）。以下為設定發行與散發程序：

1. 在 SQL Server Enterprise Manager，按一下設定為散發者的伺服器。從 工具列 選擇 精靈 。在 選擇精靈 對話方塊顯示後，展開 複寫 資料夾，選擇 設定散發暨發行精靈 ，如圖 26-1。按 確定 。

   圖26-1　「選擇精靈」對話方塊

2. 出現 設定散發暨發行精靈 歡迎畫面，如圖 26-2。

   圖26-2　「設定散發暨發行精靈」歡迎畫面

3. 按 下一步 以顯示 選取散發者 畫面，如圖 26-3。

   圖26-3　「選取散發者」畫面

4. 在這個畫面裡您可以選擇將我們在步驟一選取的伺服器設為散發者及發行者，或是僅設定發行者並使用一個先前已完成設定的散發者。如果您選擇設定最近的系統作為散發者，按一下第一個選項。精靈將會為您建立散發資料庫與記錄檔。如果您想要使用另外一個系統作為散發者，按一下第二個選項。如果沒有其他的 SQL Server 系統被設定成散發者，則可用的選項將只有第一個。以一個專用的系統來作為散發者會是比較適合的選擇。

   說明

   一個發行者只能定義一個散發者，所有的發行集應使用同一個散發者。

5. 如果您選擇使用另一個系統作為散發者，您必須註冊該 SQL Server 系統並且它必須已被設定為散發者。按一下「新增伺服器」按鈕，並在「註冊 SQL Server 屬性」視窗中選擇一種驗證方式來建立散發者上 SQL Sever 的連線。
6. 在範例中，選擇設定中的系統為散發者。
7. 現在，精靈會確認發行者已經可以存取散發者。若是登入程序失敗， SQL Server 代理程式屬性 視窗會出現，允許修改代理程式註冊帳號，如圖 26-4 所示。

   圖26-4　「SQL Server 代理程式屬性」視窗

   說明

   如果在設定 SQL Server時使用本機系統帳號，會看到這種訊息：本機系統帳號僅具本機系統權限；故名。如果在設定 SQL Server 時使用網域帳號，就不會出現步驟七的 SQL Server 代理程式屬性視窗。

8. 在這個視窗中，可以修改 SQL Server 代理程式的其他功能（相關資訊可參照

第31章 ）。完成設定後按依下 確定 。
- 設定 SQL Server 代理程式 畫面出現，如圖 26-5 所示。這個畫面提示將 SQL Server 代理程式設為自動啟動。複寫將依 SQL Server 代理程式命令執行。所以若代理程式不執行，複寫也將無發執行。建議選擇讓 SQL Server 代理程式自動啟動，按一下 下一步 。

圖26-5　「設定 SQL Sever 代理程式」畫面

- 指定快照集資料夾 畫面出現，如圖 26-6 所示。指定快照集位置，可以使用預設位置或指定新位置。按 下一步 繼續。

圖26-6　「指定快照集資料夾」畫面

- 自訂組態 畫面出現，如圖 26-7 所示。

圖26-7　「自訂組態」畫面

- 在這個畫面，可選擇皆預設（第 2 個選項）或自訂散發者資料庫。如選擇接受預設，安裝過程即完成並出現完成畫面。在這裡，我們先選擇第 1 個選項繼續設定。

說明

預設的位置可能會選擇到空間不夠大的磁碟，因此我們繼續設定步驟，學習如何自訂散發者資料庫。

- 選擇 下一步 進入 提供散發者資料庫資訊 畫面，如圖 26-8 所示。指定散發資料庫名稱及檔案與記錄檔位置。

圖26-8　「提供散發者資料庫訊息」畫面

- 按 下一步 進入 啟用發行者 畫面，如圖 26-9 所示。選擇一個與步驟一不同的發行者，或新增一個發行者資料庫（按 新增 即可新增一個連線至 SQL Server 的發行者）。

圖26-9　「啟用發行者」畫面

- 按 下一步 進入 啟用發行集資料庫 畫面，如圖 26-10。可針對單一資料庫選擇啟用交易式或合併式複寫，預設狀態下不會選取任何複寫類型，因此如略過這個步驟，會建立一個發行者和散發者，但不會定義發行集。發行集可透過 建立發行集精靈 設定（較為建議的做法）。

圖26-10　「啟用發行集資料庫」畫面

- 按 下一步 進入 啟用訂閱者 畫面，如圖 26-11 所示。選擇訂閱這個發行集的訂閱者。我們建議不要使用這個步驟來選擇，最好是透過 設定發行暨發行集精靈 來做這項設定。
- 按 下一步 進入 完成散發暨散發精靈的設定 畫面，如圖 26-12 所示。這個畫面會顯示設定摘要。按 完成 完成設定，會花一點時間建立設定。當設定完成，會列出設定進行的程序，及是否需要設定 SQL Server 代理程式為自動啟動。要在 SQL Server 代理程式執行的情況下，複寫代理程式才會執行。當設定程序完成，就可看到在 Enterprise Manager 內多了 複寫監視器 。

圖26-11　「啟用訂閱者」畫面

說明

如果想要變更複寫資料庫的設定，在 Enterprise Manager 內點選該資料庫，在 工具 選擇 複寫 ，從列出的項目中選取預更改的選項。

圖26-12　「完成散發暨散發精靈的設定」畫面

快照式複寫

本節提供快照式複寫的詳細資訊。首先學習何時使用快照式複寫。接著介紹規劃快照式複寫。

使用快照式複寫

快照式複寫在資料大多屬於靜態資料且不常變更的情況下適用。如同之前所學，快照式複寫即將資料產生快照集並傳送至訂閱者。資料將會在下一次快照集使用時更新。如果使用快照式複寫，由於在下次使用快照集時就會更新，因此不需修改在訂閱者上的資料。

適合使用快照式複寫的時機如下：

- 某個銷售單位散發產品價格表至所有旗艦店，所有價格每晚更新一次。
- 檢視資料表，該資料表不需經常更新，屬於靜態資料。

  當資料需要經常性的更新（經常需要複寫），交易式或合併式複寫則較為適用。

設定快照式複寫

如之前所提到，設定任何複寫型態前，需設定發行者與發行集（如本章之前所示）。要設定快照式複寫，要先設定發行集，然後設定訂閱者。

設定發行集

設定發行集可指定欲複寫的資料，複寫的方式，及何時產生複寫。設定步驟如下：

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

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

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

   - 發送新的訂閱 ：可為已建立發行集建立新的發送訂閱，這個步驟將會在本章

〈設定訂閱集〉 一節討論。
- 屬性與訂閱 ：可更改發行集與訂閱集屬性。
- 指令化發行集 ：可建立指令用以建立更多發行集。
- 刪除發行集 ：可刪除已設定的發行集。
- 選擇發行集資料庫（如圖 26-13，選擇 Northwind 為發行集資料庫），選擇 建立發行集 進入 建立發行集精靈 的歡迎畫面，如圖 26-14 所示。

圖26-14　「建立發行集精靈」的歡迎畫面

- 注意在這個視窗，下方有 顯示這個精靈中的進階選項 選項。我們先不勾選這個選項，因為如果勾選這個選項，就會顯示立即建立更新及佇列更新訂閱者選項。進階選項允許訂閱者更新發行集與發行者。此外，還會出現允許訂閱集資料轉換的選項。

點選 下一步 進入 選擇發行集的資料庫 視窗，如圖 26-15 所示。可再次選擇欲發行的資料。在步驟二選取的資料庫會被點選。

圖26-15　「選擇發行集的資料庫」畫面

- 選擇 下一步 進入 選取發行集類型 視窗，如圖 26-16 所示。

圖26-16　「選取發行集」視窗

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

- 快照式發行集 ：可定期複製發行項的快照集至訂閱者。可在任一資料表上建立快照式發行集。
- 交易式發行集 ：可建立交易式複寫，在發行集資料發生修改時，將交易擷取並傳至 訂閱者 。只有當資料表設有主索引鍵時，發行項才可被建立。
- 合併式發行集 ：可允許發行者與訂閱者雙向複寫。任一資料表都可建立發行項。

- 選擇 快照式發行集 ，按 下一步 進入 指定訂閱者類型 視窗，如圖 26-17 所示。這個視窗可以指定是否所有的訂閱者執行 SQL Server。圖 26-17 顯示預設情況下的選擇，預設的設定指定所有的訂閱者都執行 SQL Server 2000。如果接受此設定，就是將複寫設定為使用原始 SQL Server 2000 的資料類型。其他還可以選擇 SQL Server 7.0 的伺服器，或其他性質的伺服器，這個選項會使複寫資料轉換回字元格式，當然也會經過一些繁雜的轉換手續。

  圖26-17　「指定訂閱者類型」畫面

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

  注意在此畫面中的發行項預設值按鈕。這個按鈕允許在系統中不同的發行項設定預設值，當按下這個按鈕，會出現發行項的類型供您選擇。選擇資料表發行項後按確定，會進入預設資料表發行項屬性視窗，如圖 26-19 所示。一般標籤頁中可指定下列的選項：

  - 發行項名稱
  - 發行項描述
  - 發行項的來源資料表名稱
  - 發行項的來源資料表擁有者

  圖26-18　「指定發行項」畫面

  圖26-19　「預設資料表發行項屬性」視窗的「一般」標籤頁

  在 快照集 標籤頁中，如圖 26-20 所示，可設定以下選項：

  - 卸除任何現有資料，並指定如何操作索引。
  - 指定是否是否複製叢集索引或非叢集索引。
  - 指定是否將使用者自定資料型別轉換為基底資料型別。
  - 指定是否複製條件約束。

  指定設定後按 確定 。

  圖26-20　「預設資料表發行項屬性」視窗的「快照集」標籤頁

- 確定 指定發行項 的選項後按 下一步 ，進入 發行項的問題 視窗，一個發行集的分析視窗就建立了。如果要發行的是 Northwind 資料庫，如圖 26-21 所示，會提醒您當 IDENTITY 資料行被傳到訂閱者時，並不會傳送 IDENTITY 屬性。
- 在分析了發行集之後，按 下一步 進入 選取發行集名稱與描述 視窗，如圖 26-22 所示。在這個畫面中，可以簡單的指定發行集名稱和描述，也可以在 Active Directory 服務中選擇列出這個發行集。

  圖26-21　欲複製 IDENTITY 資料行時出現的視窗

  圖26-22　選取發行集名稱與描述

- 按 下一步 進入 自定發行集的屬性 視窗，如圖 26-23 所示。在這個畫面中，可以指定是否定義資料條件篩選（選擇 是 即可），或是使用預設的設定選項（選擇 否 ）。若是選擇 否 後按 下一步 ，就後完成建立發行集精靈，如圖 26-31（在本節快要結束的地方）。本例中，我們先選擇 是 來看看剩下的畫面還提供哪些選項的設定。

  圖26-23　「自定發行集的屬性」畫面

- 選擇 下一步 進入 篩選資料 畫面，如圖 26-24 所示。在這個畫面中，可以指定要垂直篩選還是水平篩選資料行（也可以兩個都選擇）。本例中，我們兩項都勾選。

  說明

  不論使用的是快照式或交易式複寫，條件篩選所提供的功能皆相同。但是，條件篩選的執行方式就和所使用的複寫類型有關。在下一章中，我們會學習條件篩選對交易式複寫的影響。在快照式複寫中，是用建立快照集的 WHERE 子句來進行篩選的動作。本節步驟十三會解釋如何指定 WHERE 子句。

- 按 下一步 進入 篩選資料表的資料行 畫面，如 26-25 所示。這個畫面可以排除不要複寫的資料行。首先從 發行集中的資料表 內點選 資料表 ，然後在 選取資料表中的資料行 內將不要複寫的資料行的核取方塊取消。這樣就允許將發行項垂直篩選，也就是相較於發行者的資料表，複寫的資料表上會有較少的資料行。

  圖26-24　「篩選資料」畫面

  說明

  主索引鍵資料行不能被排除，下一章會解釋不能被排除的原因。

  圖26-25　「篩選資料表的資料行」畫面

- 按 下一步 進入 篩選資料表的資料列 畫面，如圖 26-26 所示。這個畫面可選擇排除不想要的資料列。選取一個資料表後按下 [...] 按鈕，建立篩選。

  圖26-26　「篩選資料表的資料列」畫面

- 指定篩選 對話方塊出現，如圖 26-27 所示。這個對話方塊允許在 SQL 陳述式中加入 WHERE 子句，排除必要的資料列。當完成所要排除的資料列時，按 確定 回到設定精靈。

  圖26-27　「指定篩選」對話方塊

- 按 下一步 進入 允許匿名訂閱 畫面，如圖 26-28 所示。這個畫面允許指定是否允許匿名訂閱或具名訂閱。可依您實際需要選擇。

  圖26-28　「允許匿名訂閱」畫面

- 按 下一步 進入 設定快照集代理程式的排程 ，如圖 26-29 所示。在這個畫面您可接受預設的排程設定，或是按 變更 按鈕進入編輯排程的對話方塊。

  圖26-29　「設定快照集代理程式的排程」畫面

- 按 變更 進入 編輯重複執行作業排程 對話方塊，如圖 26-30 所示。這個對話方塊可指定快照集發行的排程，選擇適合您需求的設定。圖 26-30 顯示該快照集的開始時間和結束時間為同一天。如果在設定的是快照式複寫（如現在正在操作中的程序），且要快照集定時更新，就要將快照集排程設為循環的排程。當設定的是交易式複寫，就要在建立新的訂閱者後再執行快照集（除非之前設定的是匿名訂閱者）。合併式複寫會將最新的快照集送至訂閱者，因此，在設定合併式複寫時，可以在將要建立或建立新的訂閱者後馬上執行快照集。設定完成後按 確定 。

  圖26-30　「編輯重複執行作業排程」對話方塊

- 按 下一步 進入 完成建立發行精靈 畫面，如圖 26-31 所示。這裡可以看到所設定發行集的總結。
- 檢示總結資訊後，按 完成 ，就可看到精靈建立發行集的過程，完成後會看到如圖 26-32 的畫面，告知發行集已成功的建立。

  圖26-31　「完成建立發行精靈」畫面

  圖26-32　告知發行集成功建立畫面

現在發行集已成功建立，並可發行至訂閱者處。您可以在 建立與管理發行集 的對話方塊（本節稍早有提及），讓訂閱者開始運作，或是修改這個發行集的屬性。

修改快照集排程

當網路狀況變更，可能會需要修改快照集的排程（啟用快照集排程設定的步驟在本節稍早做過介紹），當設定快照式複寫排程，必須考慮下列幾項因素：

- 資料的變動性 ：如果資料經常更新，快照集就必須經常更新，反之亦同。
- 更新的必要性 ：訂閱的系統是否取決於資料的更新？如果答案是肯定的，快照集就必須經常更新。
- 系統的執行速度 ：如果網路、發行者、散發者和訂閱者的系統速度都很快，就算快照集的更新頻率較高，也不會影響系統中其他元件的執行效能。

  依照以下的步驟設定快照集排程：

  1. 在 Enterprise Manager，展開想要修改的伺服器，展開 複寫監視器 資料夾，展開 代理程式 後，選擇 快照集代理程式 資料夾。
  2. 在右手邊的窗格中，點選欲修改的發行集按下滑鼠右鈕，叫出快顯功能表後選擇 代理程式屬性 ，如圖 26-33 所示。

     圖26-33　Enterprise Manager 中的一個發行集

  3. 進入 屬性 視窗，如圖 26-34 所示。這個視窗顯示發行集代理程式可選擇的屬性。

     圖26-34　「代理程式屬性」視窗的「一般」標籤頁

  4. 在這個畫面中選擇 排程 標籤頁，如圖 26-35 所示。在此標籤頁中可以檢視現存的發行集排程。 新的排程 按鈕允許新增排程，而 新的警示 按鈕則允許新增警示。 編輯 按鈕可用來修改已存在的排程，而 刪除 按鈕用來刪除已存排程。

     圖26-35　「代理程式屬性」視窗的「排程」標籤頁

  5. 選擇 編輯 進入 編輯作業排程 對話方塊，如圖 26-36 所示。這個對話方塊允許將快照集代理程式設定符合需求的排程。在點選 重複執行 時按下 變更 按鈕，進入 編輯重複執行作業排程 對話方塊。可以設定在當 CPU 休息時才執行代理程式。這樣的設定在某些狀況下有其優點，不過一但設定這個選項，您就無法預期代理程式會在何時執行。輸入合適的排程後按 確定 按鈕。

     圖26-36　「編輯作業排程」對話方塊

  當完成上述步驟，發行者會在發行者資料庫中更新快照集的資訊。這個排程會決定快照集建立的頻率。若是想要更新快照集複製到訂閱者的頻率，必須為訂閱設定發行集代理程式。

啟用訂閱者

在設定訂閱者前，必須在發行集資料庫中啟用訂閱者。啟用訂閱者可以讓 SQL Server 系統和發行集資料庫溝通。在建立了發行集資料庫和訂閱者間的連線後，就可以設定訂閱者（這個過程會在下一節

〈設定訂閱者〉 解釋）。現在先參照以下步驟啟用訂閱者：

1. 在 Enterprise Manager，選擇 工具 功能表。選擇 複寫 ／ 設定發行、訂閱及散發者 ，或是在選擇 工具 功能表中直接選擇 精靈 ／ 複寫 ／ 設定散發暨散發精靈 ，進入 發行者和散發者屬性 視窗，如圖 26-37 所示。
2. 發行者和發行者屬性視窗，選擇 訂閱者 標籤頁，如圖 26-38 所示。本標籤頁中可以看到在網路上已定義的訂閱者清單。訂閱者必須已定義在清單中才可接收訂閱。

   圖26-37　「發行者和散發者屬性」視窗

這個標籤頁中可以指定，哪些訂閱者對標籤頁中列出的發行者有訂閱權限。在第一次開啟 發行者和散發者屬性 視窗時，由於還沒有新增任何訂閱者，因此視窗中僅列出發行者系統。

圖26-38　「發行者和散發者屬性」視窗的「訂閱者」標籤頁

- 欲新增訂閱者，先按下 新增 按鈕進入 啟用新的訂閱者 對話方塊，如圖 26-39 所示。在此對話方塊中，選擇想要啟用的訂閱者（SQL Server、Microsoft Access、OLE DB、ODBC等）。這裡的設定決定新訂閱者所訂閱的發行集類型。選擇 SQL Server Database 後按下 確定 。

圖26-39　「啟用新的訂閱者」對話方塊

- 現在會進入 註冊的 SQL Server 屬性 視窗，如圖 26-40 所示。由於在前一個步驟選擇的是 SQL Server 資料庫，因此在這個視窗所出現的選項都和 SQL Server 連線的選項有關。如果在前一個步驟中選擇的是其他的選項，則會出現不同的視窗。可指定訂閱者的系統名稱和帳戶認證模式。

圖26-40　「註冊的 SQL Server 屬性」視窗

如果想選取更多的 SQL Server 系統，按下在伺服器旁的 [...] 按鈕，可進入選擇伺服器對話方塊，如圖 26-41 所示。在這裡可以選擇想要設為訂閱者的伺服器。

圖26-41　「選擇伺服器」對話方塊

- 步驟四的設定完成後按下 確定 ，並在 註冊的 SQL Server 屬性 視窗中也按下 確定 ， 發行者和散發者屬性 視窗會再出現，並且在 訂閱者 的清單中會出現上個步驟中新增加的訂閱者，如圖 26-42 所示。新增後的系統就可以當作所指定發行者的訂閱者。

圖26-42　顯示新訂閱者的「發行者和散發者屬性」視窗

設定訂閱集

在設定了發行者、散發者和發行集，以及啟用訂閱者後，就可開始設定訂閱。可以設定訂閱是來自訂閱者或是發行者。如果是來自訂閱者，則可設定提取訂閱；如果是來自發行者，則可設定發送訂閱。

設定提取訂閱

提取訂閱的設定及管理在訂閱者端，因此，在開始 提取訂閱精靈 前要在 Enterprise Manager 選擇訂閱者系統。通常，訂閱者並非經常連線到網路使用提取訂閱。舉例來說，業務人員可設定提取訂閱，每次當使用筆記型電腦時才連線更新訂閱。參照以下步驟設定提取訂閱：

1. 在 Enterprise Manager 選擇 工具 ／ 複寫 ／ 提取訂閱至 ，在 提取訂閱至 對話方塊中選擇 提取新的訂閱 ，或是在 工具 中選擇 精靈 ／ 複寫 ／ 提取定於精靈 。任何一種方式都可以進入 歡迎使用提取訂閱精靈 ，如圖 26-43 所示。

   圖26-43　「使用提取訂閱精靈」的歡迎畫面

2. 選擇 下一步 進入 尋找發行集 畫面，如圖 26-44 所示。這裡可以選擇尋找發行者的方式，可以是透過註冊伺服器（預設值），或是在 Activity Directory 中尋找。這裡可以決定如何搜尋發行者，這裡的決定影響下一個畫面呈現的結果。

   圖26-44　「尋找發行集」畫面

3. 按 下一步 進入 選取發行集 畫面，如圖 26-45 所示。這裡可以看到有哪些會被應用在複寫的發行集。註冊在 SQL Server 系統上的伺服器在這裡都會列出。展開所選的發行者系統，並選擇要使用的發行集，如圖 26-45 所示。

   如果需要註冊一個伺服器，按 註冊伺服器 進入 註冊伺服器屬性 視窗。在上一節中啟用訂閱者時我們曾經使用此視窗。

4. 選取發行集後按 下一步 進入 指定同步代理程式登入 面，如圖 26-46 所示。這裡可以指定代理程式連線到發行者時的方式和登入帳號。預設值選項是 模擬 SQL Server 代理程式帳戶 ，這通常也是較理想的選項。如果設定系統中的 SQL Server 代理程式使用特別的登入，就必須在這裡指定。

   圖26-45　「選取發行集」畫面

   圖26-46　「指定同步代理程式登入」畫面

5. 選擇 下一步 進入 選取目的資料庫 畫面，如圖 26-47 所示，這裡可以指定複寫的發行項要放在哪個資料庫中。圖 26-47 顯示我們為訂閱集選取了pubs資料庫。如果要建立新的資料庫，按 新增 進入 資料庫屬性 視窗。

   圖26-47　「選取目的資料庫」畫面

6. 如果開啟了 資料庫屬性 視窗新增資料庫，新增完成後按 確定 就可回到 選取目的資料庫 視窗。然後再按 下一步 進入 初始化訂閱 畫面，如圖 26-48 所示。選擇 是，初始化結構描述與資料 來開始訂閱者端的資料庫結構和資料。

   圖26-48　「初始化訂閱」畫面

7. 按 下一步 進入 快照集傳送 畫面，如圖 26-49 所示。這裡可以選擇快照集從哪裡傳送。通常接受預設值的位置即可。

   圖26-49　快照集傳送畫面

8. 按 下一步 進入 設定散發代理程式排程 畫面，如圖 26-50 所示。這個畫面可以選擇連續更新、依排程更新、或是僅在需要時更新。

   記住本例中我們所設定的是快照式複寫，所以當更新產生，所有的發行項內容都會更新至訂閱者端。這裡的選項可依您資料更新的頻率，以及保持資料同步的必要性來決定。按下 變更 按鈕可以進入 編輯重複執行作業排程 對話方塊（本章之前有提及），這裡可以自訂重複執行作業的排程。

9. 按 下一步 進入 啟動必要的服務 畫面，如圖 26-51 所示。如果 SQL Server 代理程式還未被啟動，從這個畫面中可以啟動服務。這裡可以看到 SQL Server 代理程式是否已在訂閱者端啟動。若是還未被啟動，會提示您啟動該代理程式，若是想手動啟動代理程式，在Enterprise Manager 中展開 管理 資料夾，在 SQL Server 代理程式中按下滑鼠右鈕，在快顯功能表中選擇啟動或停止 SQL Server 代理程式即可。

   圖26-50　「設定散發代理程式排程」畫面

   圖26-51　「啟動必要的服務」畫面

10. 如果 SQL Server 代理程式未被設為自動啟動，就會看到 設定 SQL Server 代理程式 畫面，按下 確定 即可。如果 SQL Server 代理程式已設為自動啟動，就不會看到這個畫面。
11. 按 下一步 進入 完成提取訂閱精靈 畫面，如圖 26-52 所示。選擇 完成 即可完成訂閱集的設定作業。

    圖26-52　「完成提取訂閱精靈」畫面

現在發行項會依設定的排程，在訂閱者端被複寫。在確認發行集代理程式的排程後，再啟用複寫。如果沒有設定及時產生快照集至散發者端，在快照集代理程式依自己排程執行的情況下，可能需要一些時間才能將資料送至散發者端。就算複寫在執行中，實際的資料也會在快照集代理程式作業完成後才會送至訂閱者端。

設定發送訂閱

發送訂閱要在發行者端啟動，可使用 發送訂閱精靈 來設定。當使用發送訂閱，複寫的排程由發行者端決定。發送訂閱適用於連線固定的訂閱者。使用這類型訂閱集的目的是在散發者端就可以方便的管理所有的訂閱集，不需要在訂閱者端個別的管理每一個訂閱集。請參照以下步驟使用 發送訂閱精靈 ：

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

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

   或是使用第二種方法，在 工具 中選擇 精靈 ，在 選擇精靈 對話方塊中展開 複寫 ，選擇 建立發送訂閱精靈 ，然後按下 發送新的訂閱 ，任何一種發法都可以進入 歡迎使用發送訂閱精靈 畫面，如圖 26-54 所示。

   圖26-54　「歡迎使用發送訂閱精靈」畫面

2. 按 下一步 進入 選擇訂閱者 畫面，如圖 26-55 所示。這裡可以指定發行集要發送至哪一個訂閱者端。本例中，我們選擇的系統是 B6S8A9。這些訂閱者必須被啟用，如稍早

〈啟用訂閱者〉 一節所示範。

圖26-55　「選擇訂閱者」畫面

- 選擇 下一步 進入 選取目的資料庫 畫面，如圖 26-56 所示。這裡可以指定訂閱者端的資料庫，可以選擇已存在的資料庫，或是建立新的資料庫。輸入所要的資料庫名稱，或按 瀏覽或建立 按鈕後從清單中挑選。要建立新的資料庫，在按下 瀏覽或建立 按鈕後選擇 建立新物件 ，就可進入 資料庫屬性 視窗設定。當完成建立新資料庫後，按下 確定 就可回再到 選取目的資料庫 畫面。

圖26-56　「選擇訂閱者」畫面

- 按 下一步 進入 設定散發代理程式排程 畫面，如圖 26-57 所示。在這裡可以選擇連續更新訂閱集或選擇依排程更新訂閱集。以快照式複寫來說，選擇連續更新並不合理。如果要變更排程，按下 變更 按鈕進入之前所解釋過的 編輯重複執行作業排程 對話方塊，更改排程。

圖26-57　「設定散發代理程式排程」畫面

說明

精靈中設定的排程是用來更新快照集用戶端的排程，和更新快照集的排程必須要協調。如果快照集本身沒有更新，傳送到用戶端的的資料就是舊的快照集資料。

- 按 下一步 進入 初始化訂閱 畫面，如圖 26-58 所示。在這裡可以指定訂閱集是否開始。初始化結構描述和在訂閱者端的資料集已由預設指定。如果結構已存在， 否，訂閱者已經有結構描述和資料 這個選項就不會提供選擇。這個畫面中也可以啟動快照集代理程式。建議在開始快照集時就啟動快照集代理程式，否則就必須手動啟動代理程式。設定快照集代理程式排程，使其和發送訂閱的排程具一致性也很重要，可參照本章在 〈修改快照集排程〉 一節的敘述。

圖26-58　「初始化訂閱」畫面

- 按 下一步 進入 啟動必要的服務 畫面，如稍早的圖 26-51 所示，可指定用自動啟動的方式啟動 SQL Server 代理程式。
- 按 下一步 進入 完成發送訂閱精靈 畫面，如圖 26-59 所示。檢查設定是否正確，按 完成 開始將快照集複製到訂閱者的程序。您會看到一個描述程序進行的對話方塊，最後會出現操作程序完成的訊息方塊。當精靈完成後，發送訂閱就建立，且會定期更新。

圖26-59　「完成發送訂閱精靈」畫面

管理複寫

在學習了 SQL Server 2000 環境中設定及安裝複寫資料庫後，可以利用 Enterprise Manger 中的監控功能，管理複寫環境或找出任何使複寫無法運作的問題。

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

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

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

   圖26-60　在Enterprise Manager 中的快照集代理程式

4. 在代理程式中按下滑鼠右鈕叫出快選功能表，在這裡有幾個可以提供監視和管理代理程式的選項，如圖 26-61 所示。

   圖26-61　複寫代理程式選項

   這些選項的簡介如下：

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

說明

發行集代理程式的監控會在下兩章討論。

停用複寫

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

移除發送訂閱

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

移除提取訂閱

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

移除散發和發行

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

快照式複寫校調

本節中會學習如何設定及校調快照式複寫系統至最佳化執行效能。快照式複寫系統的設定與校調，比起交易式和合併式複寫系統要來的簡單。在交易式和合併式複寫中，快照集在一開始時被傳送到訂閱者端，然後小型的資料量會不斷的傳送到這些系統中。然而在快照式複寫中，所有的資料庫都會重新整理，因此在操作上會簡單的多。在本節中我們先討論快照式複寫的屬性，然後再討論其設定、監控及校調的重點。

快照式複寫

由於快照式複寫先將已存在的資料庫複製散發者，然後到訂閱者，因此快照式複寫的執行效能取決於特定的系統元件是否有傳送大量資料的能力。以下為影響快照式複寫執行效能的幾項因素，若是正確的指定快照集大小和系統設定，就可以降低這些因素對效能的影響。

- 發行者的 I/O 效能 ：不論是整個資料庫或是部分資料庫都是從發行者端複製，因次發行者端 I/O 子系統的執行效能是其中一個影響快照式複寫執行效能的因素。快照集的建立作業和 I/O 較有關係，通常和 CPU 較無關。
- 散發者的 I/O 效能 ：散發者端會在同一時間接收及散發大量資料，因此散發者的 I/O 子系統不夠快，就會影響快照集建立的效率。
- 訂閱者的 I/O 效能 ：散發者會試者在同一時間散發所有或部分的資料庫到訂閱者端。如果訂閱者端 I/O 子系統的執行效能不夠好，就會影響複寫的執行。
- 發行者、散發者和訂閱者間的網路頻寬 ：由於三者間的資料傳輸資料量很大，因此很容易就在網路上產生瓶頸。確認網路頻寬足以負荷複寫的執行。

  設定快照式複寫

  本節會提供一些關於快照式複寫設定的要點。由於快照式複寫利用發行集資料庫作關於複寫程序的資訊狀態分類，而並非複寫資料本身（在一個資料夾），因此通常不需要在散發者端校調 SQL Server。這些要點可幫助您將快照式複寫系統以最佳化設定，設定要點如下：

- 在發行者、散發者和訂閱者端設定足夠的 I/O 容量
- 設定發行者，讓快照集保存在發行者系統
- 將散發者和發行者設定在同一系統上
- 增加 BCP 執行緒數量

  現在來仔細研究這些設定要點。

  設定足夠的 I/O 容量

  如前所述，快照式複寫在同一時間複製大量的資料，所以速度慢的磁碟子系統會降低整個程序的的速度。因此將特定的 I/O 子系統執行效能增加，就可提高複寫程序效能。在一個含複寫功能的系統中（如 SQL Server 系統），交易記錄檔應該被放在自己的 RAID 1 磁碟區中以保護資料。而資料夾則放置在一個或數個 RAID 10 到 RAID 5 磁碟區中。使用哪一個 RAID 層級取決於所設定的是發行者、散發者，還是訂閱者。

  設定發行者的 I/O 子系統 不論發行者端的資料夾使用的是 RAID 5 或是 RAID 10 磁碟區，都取決於資料在該磁碟區存取資料的讀寫比例。如

第5章 所提及，如果資料的寫入超過 10% 以上，RAID 10 就比 RAID 5 適用。不論選擇使用哪一個 RAID 層級，應該依 第5章 和 第6章 所提的方式，適當分配 I/O 子系統大小。

設定散發者的 I/O 子系統 由於快照式複寫將資料存在散發者而非 SQL Server 資料庫中，所以必須確定快照集的位置有足夠的 I/O 容量容納大量的寫入資料。所以，快照集的位置較適合放在 RAID 10 磁碟區。在本節稍後會看到，在某些情況下，將快照集存在散發者較有效率。

設定訂閱者的 I/O 子系統 將訂閱者資料夾放在 RAID 10 磁碟區可以加強快照式複寫的效能，這是因為訂閱者端在快照式複寫時所遇到大量的資料寫入。

說明

當設定快照式複寫的 I/O 子系統時，應該考慮快照集發行的大小。如果快照式複寫所複製的資料量很小，放在任何 RAID 層級都很方便。

選擇快照集位置

由於快照式複寫將快照先複製到散發者，然後到訂閱者，您可以設定將這個多餘的步驟由複寫中移除。散發者仍被使用，只是現在把快照設定儲存在訂閱者端。這樣就可以避免多餘的網路複製操作。請參照以下步驟設定散發者，讓快照存放在發行者端：

1. 在散發者端，叫出 設定散發暨發行精靈 ，並選擇 發行者 標籤頁，如圖 26-62 所示。

   圖26-62　「發行者」標籤頁

2. 按 [...] 按鈕，進入 發行者屬性 視窗，如圖 26-63 所示。

   圖26-63　「發行者屬性」視窗

3. 在這個視窗中，可以設定快照集在系統內的位置。在設定前必須確定這個位置的 I/O 容量足以應付快照集對系統造成的負荷。

說明

當在散發者端設定快照集，也等於設定了所有的發行集位置，所以如果散發者端有不只一個發行者系統，就不能做這樣的設定。

在同一個系統內設定散發者和發行者

如果所使用的複寫類型只有快照式複寫，就可以簡單的將發行者和散發者設定在同一個系統上。由於這樣的設定可以不必透過網路將快照集複製到散發者端，所以可以降低網路流量。但是，如果發行者的效能很重要，最好還是將快照集保留在散發者端，讓散發者端處理散發的問題。

增加 BCP 執行緒

透過增加快照集程序所使用的 BCP 執行緒，可以增加複寫效能，請參照以下步驟設定：

1. 在 Enterprise Manager 中展開 複寫監視器 資料夾，展開 代理程式 資料夾，然後選擇 快照集代理程式 資料夾。在右方的窗格中，點選選擇的發行集後按下滑鼠右鈕，在快顯功能表中選擇代理程式設定檔，進入對話方塊，如圖 26-64 所示。

   圖26-64　「快照集代理程式設定檔」對話方塊

2. 按 新增設定檔 按鈕，進入 複寫代理程式設定檔的詳細資料 對話方塊，以修改或新增設定檔，此對話方塊如圖 26-65 所示。在這裡更改 MaxBcpThreads 的參數。

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

3. 當設定完成後，將設定檔命名後按下 確定 ，就可儲存此設定檔。然後在 快照集代理程式設定檔 的對話方塊中選擇這個設定檔即可。

監視快照集系統

您可以使用 Microsoft Windows 2000 效能監視器來監視快照集。當使用 SQL Server 複寫時，會在效能監視器中加入幾個物件。另外，有一些效能監視器的標準物件對於監視快照式複寫也很有用。這些物件包括：

- SQLServer:Replication Agents ：計算現在系統中有幾個不同類型的代理程式正在執行。
- SQLServer:Replication Dist ：提供關於散發者延遲時間的資訊。
- SQLServer:Replication Snapshot ：提供關於快照式複寫效能的資訊。
- PhysicalDisk ：提供關於 I/O 活動的資訊，有很多效能上的問題都和 I/O 有關，所以這項資訊對快照式複寫格外有用。
- Processor ：允許監視系統處理器。
- System ：提供關於整個系統的資訊。

  這些計數器可使您清楚的知道複寫程序如何的執行，如果系統的設定和校調都很適當，快照集的執行過程就會非常的快。要使複寫的執行最佳化，注意以下可能產生問題的地方：

- I/O 效能瓶頸 ：I/O 率是否太高？注意 I/O 每秒的執行及每一次 I/O 的執行所需秒數。
- 網路效能瓶頸 ：這並不是一個容易發現的瓶頸，但可以試著將網路輸送量（network throughput）和快照式複寫所需的時間比對。

  校調快照集系統

  快照集系統校調方式通常用簡單的設定即可。影響複寫效能最明顯的問題不外乎就是 I/O 和網路效能，您必須看看您的網路效能是否足以負荷複寫的所需。現在看看以下的範例。

  假設您有一個 5GB 的資料庫。如果您用的是 10BaseT 網路，網路的最大頻寬就是每秒 10Mbps，差不多是每秒 1 megabyte（MBps）。因此，一個 5-GB 的資料庫就要花掉 5120 秒來傳送，或者說要花 1.4 小時在這個網路上複製。計算方式如下：(5 GB * 1024 (MB/GB)) / 1 (MBps) = 5120 秒，換算為 1.4 小時。比較起來，一個 100BaseT 網路就只需要 8.3 分鐘就可完成同樣的複寫程序。一個 Gigabit 乙太網路需要 51 秒完成同樣的動作，計算的結果整理在表 26-1 中：

  表26-1　網路比較表

  網路速度 | 執行一個 5-GB 資料庫快照集所需時間
  --- | ---
  10BaseT | 5120 秒
  100BaseT | 516 秒
  Gigabit 乙太網路 | 51 秒

  所以網路對執行效能影響由此可見。要計算如範例中般的精確，首先要了解執行一次的複寫到底需要多少的時間。如果複寫的時間太久，可能真的在哪裡遇到瓶頸，如 I/O、記憶體、磁碟等等。

  本章總結

  本章學到 SQL Server 三種複寫類型：快照式複寫、交易式複寫和合併式複寫。此外也學到了 SQL Server 複寫的的發行及訂閱模式，並學到如何設定快照式複寫。在

  第27章 和 第28章 中，會學習比較複雜的複寫類型，也就是不斷提及的交易式複寫和合併式複寫。