Redo active狀態解析
當我們手動執行日誌切換的時候:
SQL> alter system switch logfile;
系統已更改。
SQL> select group#,sequence#,status,archived from v$Log;
GROUP# SEQUENCE# STATUS ARC
---------- ---------- ---------------- ---
1 23 CURRENT NO
2 21 INACTIVE YES
3 22 ACTIVE YES
我們看日誌檔案組3已經歸檔,但是狀態為ACTIVE的。
某個日誌檔案為ACTIVE狀態,其實是表示這個檔案的檢查點還沒有作完。而檢查點沒有做完的根本原因是dbwr執行的dirty buffer寫出還沒有執行完成,也就是說ckpt程式會等待dbwr寫出資料完成,等待的過程就是表示等待將current日誌中修改過的資料塊資訊寫入到資料檔案的過程。因為這些資訊其實是例項恢復的時候要用到的資訊,如shutdown abort時,oracle會利用redo日誌中的資訊對資料庫進行例項恢復。
同時有一點需要補充的是:
當檢查點發生的時候,不僅僅dbwr程式會觸發(記住有的檢查點不是一定要觸發dbwr的),lgwr也會跟著觸發,他會把檢查點發生時的SCN之前的儲存在redo log buffer中的redo,寫入到我們的redo log file中。那麼all in all,檢查點的發生,就是lgwr和dbwr寫buffer到磁碟檔案的過程。但是效率卻截然不同。
回到正題,log switch的時候會觸發檢查點,因此lgwr程式會把log buffer中的redo log寫入redo log file中,如果我們這個時候設定了log_checkpoints_to_alert=TRUE,則我們可以在alert_icmnlsdb.log日誌中,看到如下資訊:
-------------------------------------------------------------
Sat Dec 29 12:59:43 2007
Beginning log switch checkpoint up to RBA [0x18.2.10], SCN: 0x0000.0003b0f6
Thread 1 advanced to log sequence 24
Current log# 2 seq# 24 mem# 0: D:\ORACLE\ORADATA\ICMNLSDB\REDO02.DBF
Sat Dec 29 12:59:43 2007
ARC0: Evaluating archive log 1 thread 1 sequence 23
ARC0: Beginning to archive log 1 thread 1 sequence 23
Creating archive destination LOG_ARCHIVE_DEST_1: 'D:\ORACLE\ARCHIVED_DEST\ARC00023.001'
ARC0: Completed archiving log 1 thread 1 sequence 23
---------------------------------------------------------------
注意資訊中的SCN,這就是我們通過log switch觸發checkpoint時的SCN,那麼當checkpoint做完後,ckpt程式會把這個SCN更新到資料檔案頭上。但是這個checkpoint在這個時候確實是要等待dbwr將dirty buffer寫完到資料檔案後才算結束(dbwr要寫到RBA(Beginning log switch checkpoint up to RBA [0x18.2.10]).因此如果日誌切換到這個active的日誌的時候,由於checkpoint要等待dbwr將RBA之前的所有dirty buffer寫出,因此整個過程會等待。當然我們還要注意dbwr可能是執行多次寫才能到RBA。這個和dbwr的寫機制是有密切的關係。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12361284/viewspace-52651/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle redo各種狀態(inactive、active、current)損壞的處理方式Oracle Redo
- [擴充套件] hieu-le active 判斷導航元素的 active 狀態套件
- 如何阻止:hover、:active等滑鼠行為狀態的觸發?
- ijkplayer 播放器狀態解析播放器
- React hooks 狀態管理方案解析ReactHook
- java狀態模式例項解析Java模式
- Oracle redo解析之-1、oracle redo log結構計算Oracle Redo
- MySQL redo與undo日誌解析MySql
- 隨筆MySQL:Searching rows for update狀態解析MySql
- 26_Oracle redo物理結構解析Oracle Redo
- Oracle redo解析之-2、BBED & DUMP工具使用Oracle Redo
- Oracle redo解析之-4、rowid的計算Oracle Redo
- Oracle redo解析之-3、常見change分析Oracle Redo
- 深度解析 Go 語言中「切片」的三種特殊狀態Go
- 前端狀態管理與有限狀態機前端
- MySQL Galera Cluster全解析 Part 3 狀態快照傳輸(SST)MySql
- dns解析狀態異常怎麼處理 dns解析異常怎麼修復DNS
- React 狀態管理:狀態與生命週期React
- 【REDO】Oracle redo advice-sqlOracle RedoSQL
- 【REDO】Oracle redo undo 學習Oracle Redo
- [Active Learning] Multi-Criteria-based Active Learning
- 狀態管理
- 狀態碼
- 狀態機
- 狀態列
- 【REDO】Oracle redo內部結構Oracle Redo
- Linux系統R、S、D、T、Z集中程式狀態的解析Linux
- Vuex 單狀態庫 與 多模組狀態庫Vue
- 狀態壓縮
- USB LPM狀態
- Flink狀態(一)
- UML狀態圖
- Flink狀態妙用
- MongoDB狀態值MongoDB
- Hibernate物件狀態物件
- http 狀態碼HTTP
- Flutter | 狀態管理Flutter
- HTTP狀態 404~~~~HTTP
- 有限狀態機