SQL Server 2005/2008複製可恢復被中斷的快照傳遞

apgcdsd發表於2011-08-16

背景

在很多情況下,客戶可能會有一個很大的資料庫被髮布,建立這個大資料庫的快照通常會是比較困難的。而且,即使被髮布資料庫的大小在可管理範圍之內,網路的速度和可靠性也可能會使問題變得複雜。

SQL Server 2005之後,快照傳遞可以從之前的中斷恢復了。這對於前面我們描述的那種情況來說,是一個很大的改進。

SQL Server 2005/2008中新的系統表MSsnapshotdeliverprogess,就是用來跟蹤快照傳遞過程的。該表居於訂閱資料庫,包含了關於哪些快照檔案被應用到訂閱方的必要細節資訊。對於每個成功傳遞到訂閱方的快照檔案,都會通過合併或分發代理向該表中新增一行。(關於MSsnapshotdeliverprogress表的說明,請查閱:http://msdn.microsoft.com/en-us/library/ms187398.aspx

工作機制

當中斷的快照傳遞被重新啟動時,複製(分發/合併)代理會像往常一樣,在所有需要應用到訂閱方的快照檔案中迭代;但是有了該恢復機制之後,分發/合併代理將會檢查Mssnapshotdeliveryprogress表,檢視是否有快照檔案已經被中斷之前的快照分發轉遞到了訂閱方。如果Mssnapshotdeliveryprogress上記錄表明某個檔案已經被之前中斷的快照分發應用了,分發/合併代理將會跳過這個檔案。

表結構(參照聯機叢書)

名稱

資料型別

描述

session_token

nvarchar(260)

標識從中成功傳遞檔案的快照資料夾的路徑。 對於使用引數化篩選器的釋出,將在此值後追加字串 dynsnap

progress_token_hash

int

根據 progress_token 的值生成的雜湊值,用於提高給定progress_token 值的查詢效率。

progress_token

nvarchar(500)

標識已成功傳遞的檔案,其值為檔名和路徑的組合。

progress_timestamp

datetime

datetime 值,指示成功傳遞快照檔案的時間。

什麼是不可恢復的?

以下快照檔案是不可恢復的:

  • 索引建立(.idx)檔案
  • 宣告引用完整性(.dri)檔案——僅在合併複製下
  • 應用到只使用DTS訂閱方的.bcp檔案
  • 任何使用者自定義的指令碼

如何復位MSsnapshotdeliveryprogress

在需要重啟整個快照過程時,就有復位Mssnapshotdeliveryprogress表的需要了。

我們可以執行訂閱資料庫上的sp_resetsnapshotdeliveryprogress儲存過程來移除Mssnapshotdeliveryprogress表中所有的行來重置快照傳遞 (僅適用於請求訂閱模式)。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25175503/viewspace-704951/,如需轉載,請註明出處,否則將追究法律責任。

相關文章