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