Transactional replication 的Snapshot 檔案在什麼情況下會被清除

stswordman發表於2013-07-31

Snapshot agent負責收集publication database的資訊,將article的內容儲存在snapshot檔案中。而distribuiton cleanup job(後文簡稱清除作業)則負責刪除這些檔案。清除作業預設每15分鐘執行一次,但並不是每一次都會去刪除這些檔案。那麼其中有什麼規律嗎?

 

實際上這取決與您的設定。如果您的publication啟用了immeidate_sync,那麼清除作業會一直保留這些檔案,直到達到了 max distribution retention(這個值可以透過執行sp_Helpdistributor檢視到)。如果沒有啟用immediate_sync,那麼distribuiton agentsnapshot應用到訂閱資料庫之後,這些檔案就可以被刪除了。

 

您可能會好奇為什麼會有這樣的設定:

immediate_syncfalse是,理論上來說,只要msrepl_transactoinsmsrepl_commands中的資料已經被同步到了訂閱,那麼這些資料是可以被立即刪除的。那就是說,我們無法透過當前的snapshotmsrepl_transactions/msrepl_commands中的資料來還原(初始化)一個的subscriptoin database,所以也就沒有必要保留這些檔案了。

 

如果immediate_synctrue,那麼只有當到達了max distribution retention msrepl_transactoinsmsrepl_commands中的資料才會被刪除。在這之前,SQL Server可以透過snapshot+msrepl_transactions/msrepl_commands來初始化一個訂閱資料庫的。所以這些檔案也就不會被提前刪除了。

實際上這個設定也影響到了重新初始化操作(reinitializtion), immedate_syncfalse是,您必須使用一個新的快照;反之您可以選擇使用現存的快照檔案。

下面是一個重新初始化的截圖(immediate_syncfalse),您可以看到“Use the current snapshot”的按鈕是禁用的。

 

 

 

注意:

在有些情況下,由於metadata不完整,清除作業無法查詢到snapshot檔案,也無法將其刪除。您手動地將這些檔案刪除即可。

相關文章