驗證複寫的資料
交易式與合併式複寫可以讓您驗證訂閱者端的資料是否與發行者端的資料相符。可以驗證特定的訂閱或發行的所有訂閱。指定下列其中一種驗證類型,「散發代理程式」或「合併代理程式」將在下次執行時驗證資料:
- 僅限資料列計數。這將會驗證「訂閱者」上的資料表與「發行者」上的資料表是否具有相同數量的資料列,但無法驗證資料列內容是否相符。資料列計數驗證提供了一種輕量型驗證方法,可讓您發現資料中的問題。
- 資料列計數與二進位加總檢查碼。除統計「發行者」與「訂閱者」上的資料列數量之外,將使用 Microsoft SQL Server 2000 中導入的總和檢查碼演算法計算所有資料的總和檢查碼。如果資料列計數失敗,將不執行加總檢查碼。
- 資料列計數與加總檢查碼。此選項將被取代,並只應用於執行 Microsoft SQL Server 7.0 版的「訂閱者」。它使用的方法和資料列計數與二進位總和檢查碼相同,但使用的是 SQL Server 7.0 版中提供的總和檢查碼演算法。如需詳細資訊,請參閱本主題中的「資料驗證如何運作」一節。
除驗證「訂閱者」與「發行者」上的資料是否相符外,合併代理程式還可以驗證是否為每個「訂閱者」正確分割資料。如需詳細資訊,請參閱<驗證合併訂閱者的資料分割資訊>。
若要驗證資料
若要驗證訂閱中的所有發行項,請使用 SQL Server Management Studio、預存程序或「複寫管理物件」(RMO)。若要驗證快照式和交易式發行集中的個別發行項,您必須使用預存程序。
- Microsoft SQL Server Management Studio: 如何:驗證訂閱者端的資料 (SQL Server Management Studio)
- 複寫 Transact-SQL 程式設計:<How to: Validate Data at the Subscriber (Replication Transact-SQL Programming)>
- 複寫管理物件 (RMO) 程式設計:<How to: Validate Data at the Subscriber (RMO Programming)>
資料驗證結果
當驗證完成時,「散發代理程式」或「合併代理程式」將記錄有關成功或失敗的訊息 (複寫不會報告具體是哪些資料列失敗)。可以在 SQL Server Management Studio、「複寫監視器」和複寫系統資料表中檢視這些訊息。以上列出的「如何」主題說明了如何執行驗證並檢視結果。
若要處理驗證失敗,請考慮下列各項:
- 設定名稱為複寫: 訂閱者資料驗證失敗的複寫警示,以便通知您失敗的情況。如需詳細資訊,請參閱<如何:設定預先定義的複寫警示 (SQL Server Management Studio)>。
- 您的應用程式是否有驗證失敗的問題?如果有驗證失敗的問題,請手動更新資料以便對其進行同步處理,或重新初始化訂閱:
- 可以使用 tablediff 公用程式 更新資料。如需使用此公用程式的詳細資訊,請參閱<How to: Compare Replicated Tables for Differences (Replication Programming)>。
- 如需重新初始化的詳細資訊,請參閱<重新初始化訂閱>。
資料驗證的考量
在驗證資料時,請考慮下列問題:
- 您必須在驗證資料之前停止「訂閱者」上的所有更新活動 (在進行驗證時不必停止「發行者」上的活動)。
- 由於加總檢查碼與二進位加總檢查碼在驗證大型資料集時,可能需要使用大量的處理器資源,因此應該將驗證排在伺服器複寫活動最少的時間來進行。
- 複寫僅驗證資料表;它無法驗證只有結構描述的發行項 (例如預存程序) 在「發行者」與「訂閱者」上是否相同。
- 二進位加總檢查碼可以與任何已發行資料表一起使用。加總檢查碼無法驗證具有資料行篩選或其中資料行位移不同 (由於 ALTER TABLE 陳述式卸除或新增資料行) 的邏輯資料表結構的資料表。
- 加總檢查碼計算中不包含 text、ntext 或 image 資料行中的資料。
- 如果「訂閱者」與「發行者」上的資料類型不同,則使用二進位加總檢查碼或加總檢查碼的驗證會錯誤地報告失敗。如果您手動初始化訂閱並在「訂閱者」上使用不同的資料類型,或如果您為發行項使用下列結構描述選項,則可能會出現此錯誤:
- 將使用者自訂類型對應至基本資料類型 (結構描述選項 0x20)。
- 將 xml 對應至 ntext (結構描述選項 0x10000000)。
- 將 nvarchar(max) 與 varbinary(max) 對應至舊版 SQL Server 支援的資料類型 (結構描述選項 0x20000000)。
如需有關結構描述選項的資訊,請參閱<發行資料和資料庫物件>。
- 交易式複寫的可轉換訂閱不支援二進位加總檢查碼與加總檢查碼驗證。
- 複寫給非「SQL Server 訂閱者」的資料不支援驗證。
資料驗證如何運作
SQL Server 藉由計算「發行者」的資料列計數或加總檢查碼,然後將那些值與「訂閱者」所計算的資料列計數或加總檢查碼相比較,以驗證其資料。整個發行資料表計算一個值,整個訂閱資料表也計算一個值,但是 text、ntext 或 image 資料行的資料不包含在其計算中。
在執行計算時,會暫時以共用鎖定來鎖定正在執行資料列計數或加總檢查碼的資料表,但此計算會迅速完成,並移除共用鎖定,通常只需要數秒鐘。
使用二進位加總檢查表時,資料行會逐一發生 32 位元的 Redundancy Check (CRC),而不是資料頁中實際資料列的 CRC。如此可讓具有該資料表的資料行在資料頁以任何次序排序,而仍可計算資料列的相同 CRC。發行集具有資料列或資料行篩選時,可以使用二進位加總檢查表驗證。執行 SQL Server 7.0 版的「訂閱者」必須使用 SQL Server 7.0 版提供的總和檢查碼演算法,它產生的 CRC 值與使用 SQL Server 2000 及更新版本所產生的值不同。SQL Server 7.0 版中提供的總和檢查碼常式無法驗證具有資料行篩選或其中資料行位移不同 (由於 ALTER TABLE 陳述式卸除或加入資料行) 之邏輯資料表結構的資料表。