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