1 基本介紹
每個(gè)數(shù)據(jù)庫(kù)都具有事務(wù)日志,用于記錄所有事物以及每個(gè)事物對(duì)數(shù)據(jù)庫(kù)所作的操作。
日志的記錄形式需要根據(jù)數(shù)據(jù)庫(kù)的恢復(fù)模式來(lái)確定,數(shù)據(jù)庫(kù)恢復(fù)模式有三種:
完整模式,完全記錄事物日志,需要定期進(jìn)行日志備份。
大容量日志模式,適用于批量操作的數(shù)據(jù)庫(kù),可以以更壓縮的方式處理日志,需要定期進(jìn)行日志備份。
簡(jiǎn)單模式,也有日志文件,只是該模式下可以通過(guò)checkpoint自動(dòng)重用virtual log file,所以日志文件會(huì)處于一直重復(fù)使用的過(guò)程,保持一定大小,但是,如果有一個(gè)事務(wù)啟動(dòng),很久沒(méi)有commit,那么從這個(gè)事務(wù)開(kāi)始到最后commit的時(shí)間段內(nèi)的事務(wù)日志存儲(chǔ)空間都無(wú)法checpoint自動(dòng)重用,這時(shí),你很可能看到一個(gè)很大的日志文件;注意,簡(jiǎn)單模式下是無(wú)法進(jìn)行日志備份。
數(shù)據(jù)庫(kù)里邊,任何對(duì)數(shù)據(jù)庫(kù)的讀寫(xiě)都是在內(nèi)存頁(yè)中找到對(duì)應(yīng)的數(shù)據(jù)也,再做修改,如果內(nèi)存頁(yè)中不存在數(shù)據(jù)頁(yè),則從磁盤(pán)加載如內(nèi)存中。當(dāng)一個(gè)修改操作發(fā)生時(shí),修改的將是內(nèi)存頁(yè)中對(duì)應(yīng)的數(shù)據(jù)頁(yè)面,同時(shí)也會(huì)實(shí)時(shí)記錄到日后文件ldf中。那么,什么時(shí)候數(shù)據(jù)會(huì)被同步到mdf文件呢,只有以下三種情況:
做checkpoint時(shí),后續(xù)會(huì)專(zhuān)門(mén)整理checkpoint的相應(yīng)文章;
Lazy write運(yùn)行時(shí),即內(nèi)存出現(xiàn)壓力,需要把內(nèi)存中的數(shù)據(jù)頁(yè)寫(xiě)入到磁盤(pán),騰出內(nèi)存空間;
eager write時(shí),即發(fā)生bulk insert和select into操作時(shí)。
DB中的事務(wù)日志記錄,可以給我們帶來(lái)很多好處,它可以支持以下操作:
恢復(fù)個(gè)別的事務(wù)。
在 SQL Server 啟動(dòng)時(shí)恢復(fù)所有未完成的事務(wù)。
將還原的數(shù)據(jù)庫(kù)、文件、文件組或頁(yè)前滾至故障點(diǎn)。
支持事務(wù)復(fù)制。
支持高可用性和災(zāi)難恢復(fù)解決方案:AlwaysOn 可用性組、數(shù)據(jù)庫(kù)鏡像和日志傳送。