SQLServer中開啟CDC之后,在某些情況下會導(dǎo)致事務(wù)日志空間被占滿的現(xiàn)象為:
在執(zhí)行增刪改語句(產(chǎn)生事務(wù)日志)的過程中提示,The transaction log for database '***' is full due to 'REPLICATION'(數(shù)據(jù)庫“***”的事務(wù)日志已滿,原因?yàn)椤癛EPLICATION”).

CDC以及復(fù)制的基本原理粗略地講,對于日志的使用步驟如下:
  1,每當(dāng)基礎(chǔ)表(開啟了CDC或者replication的表)產(chǎn)生事務(wù)性操作(增刪改)之后,對應(yīng)的事務(wù)日志寫入日志文件,
  2,此時的日志被狀態(tài)被標(biāo)記為Replication,也即處于待復(fù)制狀態(tài),這個活動狀態(tài)跟數(shù)據(jù)庫的還原模式無關(guān),即便是簡單還原模式,
  3,然后有后臺進(jìn)程來讀取這個日志,根據(jù)事務(wù)日志的內(nèi)存寫入目標(biāo)表,
    這個目標(biāo)對于cdc來說是記錄數(shù)據(jù)變化的系統(tǒng)表,
    對于replication來說是寫入distribution這個庫
  4,步驟3完成之后,事務(wù)日志被標(biāo)記為正常狀態(tài),如果是簡單還原模式,被后臺進(jìn)程解析過的事務(wù)日志被截?cái)?,可以重?/p>

如果上述中間的第三個步驟出現(xiàn)問題,也即后臺進(jìn)程無法解析日志后釋放可用的日志空間,再次往數(shù)據(jù)庫中寫入操作,就會出現(xiàn):數(shù)據(jù)庫“TestDB”的事務(wù)日志已滿,原因?yàn)椤癛EPLICATION”的情況

本文通過通過演示開啟CDC的情況下日志空間被占滿的現(xiàn)象,以及對應(yīng)的處理辦法

 

測試環(huán)境搭建

  首先建立一個測試數(shù)據(jù)庫,

iOS培訓(xùn),Swift培訓(xùn),蘋果開發(fā)培訓(xùn),移動開發(fā)培訓(xùn)

USE masterGOCREATE DATABASE TestLogFull ON PRIMARY ( 
    NAME =&nbs