SQLServer中開(kāi)啟CDC之后,在某些情況下會(huì)導(dǎo)致事務(wù)日志空間被占滿(mǎn)的現(xiàn)象為:
在執(zhí)行增刪改語(yǔ)句(產(chǎn)生事務(wù)日志)的過(guò)程中提示,The transaction log for database '***' is full due to 'REPLICATION'(數(shù)據(jù)庫(kù)“***”的事務(wù)日志已滿(mǎn),原因?yàn)椤癛EPLICATION”).
CDC以及復(fù)制的基本原理粗略地講,對(duì)于日志的使用步驟如下:
1,每當(dāng)基礎(chǔ)表(開(kāi)啟了CDC或者replication的表)產(chǎn)生事務(wù)性操作(增刪改)之后,對(duì)應(yīng)的事務(wù)日志寫(xiě)入日志文件,
2,此時(shí)的日志被狀態(tài)被標(biāo)記為Replication,也即處于待復(fù)制狀態(tài),這個(gè)活動(dòng)狀態(tài)跟數(shù)據(jù)庫(kù)的還原模式無(wú)關(guān),即便是簡(jiǎn)單還原模式,
3,然后有后臺(tái)進(jìn)程來(lái)讀取這個(gè)日志,根據(jù)事務(wù)日志的內(nèi)存寫(xiě)入目標(biāo)表,
這個(gè)目標(biāo)對(duì)于cdc來(lái)說(shuō)是記錄數(shù)據(jù)變化的系統(tǒng)表,
對(duì)于replication來(lái)說(shuō)是寫(xiě)入distribution這個(gè)庫(kù)
4,步驟3完成之后,事務(wù)日志被標(biāo)記為正常狀態(tài),如果是簡(jiǎn)單還原模式,被后臺(tái)進(jìn)程解析過(guò)的事務(wù)日志被截?cái)?,可以重?/p>
如果上述中間的第三個(gè)步驟出現(xiàn)問(wèn)題,也即后臺(tái)進(jìn)程無(wú)法解析日志后釋放可用的日志空間,再次往數(shù)據(jù)庫(kù)中寫(xiě)入操作,就會(huì)出現(xiàn):數(shù)據(jù)庫(kù)“TestDB”的事務(wù)日志已滿(mǎn),原因?yàn)椤癛EPLICATION”的情況
本文通過(guò)通過(guò)演示開(kāi)啟CDC的情況下日志空間被占滿(mǎn)的現(xiàn)象,以及對(duì)應(yīng)的處理辦法
測(cè)試環(huán)境搭建
首先建立一個(gè)測(cè)試數(shù)據(jù)庫(kù),
USE masterGOCREATE DATABASE TestLogFull ON PRIMARY ( NAME =&nbs