檢查複寫資料的正確性

將類似如下的語法做成 Job,若資料表內容很大,這需要在離峰時間做

use Northwind
go
exec sp_publication_validation
@publication=’test’,
@rowcount_only=2,  — 執行資料列計數及二進位總和檢查碼
@full_or_fast=2  –先嘗試從 sysindexes.rows 快速方法來執行條件式快速計數,若不同,再利用 COUNT(*)  執行完整計數

若想要確認驗證正確,可以看"複寫監視器",個別訂閱的細節資料:

image

若驗證錯誤,會寫到 Windows Event Log:

image

可啟動 SQL Server 自動為"訂閱者資料驗證失敗"所定義的警示(錯誤碼:20574):

image

從該警示中或可叫用"重新初始化具有資料驗證失敗的訂閱"作業,但因為未自動產生 snapshot,則該作業無法完成初始化

若針對單一資料表不合,可考慮使用以下目錄的 TableDiff 工具程式(它似乎不能處理 binary 欄位是 NULL 的記錄,有此記錄就放棄了):

C:Program FilesMicrosoft SQL Server100COM

image

在 Console 執行類似的指令,若目地檔已經存在,要先砍掉,否則該工具程式不會複寫舊的檔案

tablediff -sourceserver . -sourcedatabase northwind -sourcetable t2 -sourceschema dbo -destinationserver . -destinationdatabase d -destinationtable t2 -destinationschema dbo -f C:temptabledifferencepeer.sql -o C:temptablediffoutput.txt

產生出來個別的資料表內容如下:

tabledifferencepeer.sql

— Host: .
— Database: [d]
— Table: [dbo].[t2]
UPDATE [dbo].[t2] SET [c2]=N’1′ WHERE [c1] = 1
DELETE FROM [dbo].[t2] WHERE [c1] = 3
DELETE FROM [dbo].[t2] WHERE [c1] = 4
DELETE FROM [dbo].[t2] WHERE [c1] = 5

tablediffoutput.txt

Table [northwind].[dbo].[t2] on . and Table [d].[dbo].[t2] on . have 4 differences.
Fix SQL written to C:temptabledifferencepeer.sql.
Err    c1    Col
Mismatch    1    c2
Dest. Only    3   
Dest. Only    4   
Dest. Only    5   
The requested operation took 0.203125 seconds.

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

%d 位部落客按了讚: