Distribution DB 因故毀掉,但回復後內容較舊

以下做個實驗:

–建立個版本較舊的 Distribution DB Backup
BACKUP DATABASE Distribution TO DISK=’C:tempDistribution.bak’  WITH INIT

–停掉執行散發的 job,讓散發先不做
EXEC msdb.dbo.sp_stop_job @job_id=N’4b36094a-87bf-4223-964f-e065c97845bc’

INSERT Northwind.dbo.t2 VALUES(100,100)

–確認需要散發代理程式執行的命令已經在 Distribution DB
select a.agent_id,
a.UndelivCmdsInDistDB,
a.DelivCmdsInDistDB,
b.name,
b.publisher_db,
b.publication
from distribution.dbo.MSdistribution_status a
join distribution.dbo.MSdistribution_agents b
on a.agent_id=b.id
where
b.publication=’test’ and
b.name=
‘P714P4USER-Northwind-test-P714P4USER-14’

image

–為 Restore 做準備,刪掉所有連接在 Distribution DB 的連接
SELECT * FROM sys.sysprocesses WHERE dbid=DB_ID(‘Distribution’)
KILL 52

–讓 Disbribution DB 的版本較舊
RESTORE DATABASE Distribution FROM  DISK=’C:tempDistribution.bak’

–將發生 Publisher 已經標示某個 LSN 在 Distribution DB 已經寫入的命令,
–但 Distribution DB 卻紀錄沒有該筆的不一致行為
— 參考 http://www.microsoft.com/products/ee/transform.aspx?ProdName=Microsoft+SQL+Server&ProdVer=09.00&EvtSrc=MSSQLServer&EvtID=18768

image
–放棄既有的交易紀錄標示
–若執行失敗,錯誤訊息如下,要停掉 Log Reader Agent,也就是停掉 Agent service 對應的 Job
–訊息 18752,層級 16,狀態 2,程序 sp_repldone,行 1
–每次只有一個記錄讀取器代理程式或記錄檔相關程序 (sp_repldone、sp_replcmds 與 sp_replshowcmds) 可以連接到資料庫。如果您執行了記錄檔相關程序,請卸除用以執行程序的連接,或在啟動記錄讀取器代理程式之前在該連接執行 sp_replflush,或執行另一個記錄檔相關程序。
USE Northwind
EXEC sp_repldone @xactid = NULL, @xact_segno = NULL, @numtrans = 0, @time = 0, @reset = 1

–清掉原 DB 的 transaction log
backup log northwind to disk=’c:tempnwind.trn’ 

–做完後會一直有兩個 Log Reader
/*
該處理無法執行 ‘sp_repldone/sp_replcounters’ (在 ‘P714P4USER’)。 (來源: MSSQL_REPL,錯誤號碼: MSSQL_REPL20011)
取得說明: http://help/MSSQL_REPL20011
每次只有一個記錄讀取器代理程式或記錄檔相關程序 (sp_repldone、sp_replcmds 與 sp_replshowcmds) 可以連接到資料庫。如果您執行了記錄檔相關程序,請卸除用以執行程序的連接,或在啟動記錄讀取器代理程式之前在該連接執行 sp_replflush,或執行另一個記錄檔相關程序。 (來源: MSSQLServer,錯誤號碼: 18752)
取得說明: http://help/18752
*/
–要停掉執行本語法的連接,或
–重起 Agent Service/SQL Server,Replication 得以繼續進行,但資料不一致

–依然透過前一篇 Blog 的指令,求兩個資料表的一致
–tablediff -sourceserver . -sourcedatabase northwind -sourcetable t2 -sourceschema dbo -destinationserver . -destinationdatabase d -destinationtable t2 -destinationschema dbo -f C:temptabledifferencepeer.sql -o C:temptablediffoutput.txt

–確認 Replication 可以正常執行
DELETE Northwind.dbo.t2 WHERE c1=101
SELECT * FROM d.dbo.t2

發表迴響

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

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 位部落客按了讚: