简述oracle的日志缓冲区,2.4 重做日志缓冲区
2.4? 重做日志緩沖區(qū)
Oracle重做日志的概念是記錄每個數(shù)據(jù)塊插入某個值或者刪除某個值的語句。假設(shè)某個Update語句更新了10個數(shù)據(jù)塊,則按照Oracle重做日志的概念,會針對每個數(shù)據(jù)塊記錄一對刪除舊值和插入新值的語句,因為有10個數(shù)據(jù)塊,所以會有10對類似的語句被記錄下來。而為了減少I/O的次數(shù),Oracle在內(nèi)存結(jié)構(gòu)里的系統(tǒng)全局區(qū)中,劃分一塊內(nèi)存塊專門存放這些變更的數(shù)據(jù),這塊區(qū)域就叫做重做日志緩沖區(qū)(Redo Log Buffer),所以說,重做日志緩沖區(qū)是用來跟蹤并記錄最近變更過的數(shù)據(jù)記錄的。這里所指的變更是包含DML與DDL的語句:Insert、Update、Delete、Create、Alter,以及Drop,也就是說服務(wù)器進程(Server Process)及后臺進程(Background Process)對Oracle的變更記錄會寫到重做日志緩沖區(qū),也即在數(shù)據(jù)庫高速緩沖區(qū)中所做的變更,都會產(chǎn)生重做日志,而這些變更的數(shù)據(jù)都在內(nèi)存中的重做日志緩沖區(qū)中以Redo Entry(重做條目,也可稱為Redo Record)的方式存儲。Redo Entry是Oracle從用戶會話占用的內(nèi)存里將這些變更的記錄復(fù)制到重做日志緩沖區(qū)內(nèi),其在內(nèi)存中是一段連續(xù)的內(nèi)存塊,Oracle利用后臺進程中的LGWR在適當(dāng)?shù)臅r機將重做日志緩沖區(qū)中的信息(也就是Redo Entry)寫回到聯(lián)機重做日志文件內(nèi),以便萬一數(shù)據(jù)庫崩潰,可以進行必要的恢復(fù)。后臺進程LGWR將Redo Entry寫回到聯(lián)機重做日志文件的時機如下:
當(dāng)用戶下了提交指令時,就會觸發(fā)LGWR將重做日志緩沖區(qū)內(nèi)的數(shù)據(jù)寫回到聯(lián)機重做日志文件內(nèi)。
先期寫入?yún)f(xié)議機制,此原理是在后臺進程DBWR將臟緩沖區(qū)寫回到數(shù)據(jù)文件之前,也就是在執(zhí)行檢查點(Checkpoint)作業(yè)前,重做日志緩沖區(qū)內(nèi)相關(guān)的Redo Entry都必須完成寫入動作,以備不時之需;如果DBWR發(fā)現(xiàn)某些Redo Entry尚未寫入聯(lián)機重做日志文件,就會通知LGWR前來處理,之后DBWR才會真正的處理。同時,Oracle會定期執(zhí)行檢查點操作,以保證數(shù)據(jù)文件的內(nèi)容與聯(lián)機重做日志文件的內(nèi)容一致。
提示
檢查點的機制是避免在數(shù)據(jù)庫恢復(fù)時,讀取的Redo操作過多,導(dǎo)致恢復(fù)的時間過長,因此,Oracle是通過檢查點來縮減恢復(fù)時間的,當(dāng)檢查點發(fā)生時,它會先確認當(dāng)前的SCN(System Chang Number)號,此時的SCN被稱為Checkpoint SCN,之后Oracle會通知后臺進程DBWR把修改過的數(shù)據(jù),也就是此檢查點SCN之前的臟緩沖區(qū),從數(shù)據(jù)庫高速緩沖區(qū)內(nèi)寫到數(shù)據(jù)文件上;在檢查點設(shè)置完成后,后臺進程CKPT會更新控制文件和數(shù)據(jù)文件的文件頭,記錄檢查點的相關(guān)信息。SCN號是Oracle的相當(dāng)重要的概念,關(guān)于SCN號的詳細內(nèi)容,請參閱第6.1節(jié)。
LGWR每隔三秒會確認一下重做日志緩沖區(qū)內(nèi)的空間,當(dāng)空間剩余不到2/3時,就會觸發(fā)LGWR,將重做日志緩沖區(qū)內(nèi)的數(shù)據(jù)寫回到聯(lián)機重做日志文件內(nèi)。
當(dāng)重做日志緩沖區(qū)內(nèi)的數(shù)據(jù)達到1 MB時,就會觸發(fā)LGWR,將重做日志緩沖區(qū)內(nèi)的數(shù)據(jù)寫回到聯(lián)機重做日志文件內(nèi)。
發(fā)生聯(lián)機重做日志切換(Log Switch)時,就會觸發(fā)LGWR,將重做日志緩沖區(qū)內(nèi)的數(shù)據(jù)寫回到聯(lián)機重做日志文件內(nèi)。
【責(zé)任編輯:book TEL:(010)68476606】
點贊 0
總結(jié)
以上是生活随笔為你收集整理的简述oracle的日志缓冲区,2.4 重做日志缓冲区的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是缓冲区(buffer),什么是缓存
- 下一篇: 心理测评软件php mysql_心理测评