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