Oracle Redo log 狀態及工作原理解析


Oracle重做日志(redo log)是用來記錄操作條目,用於數據庫數據恢復。為了提高效率,oracle通常建議設置三組redo log。本文將對重做日志組的狀態以及多種狀態之間切換做解析,力求掌握該知識點。

 概述

oracle重做日志組通常有四種狀態,即unused,inactive,active,current。

unused:通常指從未被使用的日志組,即新添加的日志組。

current:狀態為LGWR進程正把redo log buffer的日志寫進日志組中。

active:為剛剛完成日志切換后的狀態,此時該日志組中提交的事務引起的數據改變還沒有完全從DB buffer cache寫入到數據文件中,因此該日志組還不能被覆蓋,並且待完全寫入后變為inactive狀態。如果數據庫為歸檔模式,那么是在該狀態下完成歸檔的。

inactive:狀態的日志可以被覆蓋,可以允許寫入日志。如果是在歸檔模式下,那么此階段證明歸檔已經完成。

 實驗

本次實驗為開啟歸檔模式為例:

查看當前日志組:

SQL> select GROUP#,BYTES,MEMBERS,ARCHIVED,STATUS from v$log;

日志組為4組,分別為inactive、current、current、inactive

我們進行手動歸檔,再看狀態

SQL> alter system switch logfile;

發現組一已經從不活躍(inactive)變為運行中(current),組二已經從當前(current)變為了active,組三、四狀態不變。說明命令使得日志的寫入切換至第一組,第二組正在進行歸檔和進行必要的數據寫入至datafile。待這兩項工作完成后再看下圖

組二由active變為inactive說明組二已經完成了歸檔,可以允許下一次寫入了。在非歸檔下組二的狀態也可以變為inactive說明完成了數據從DB BUFFER CACHE寫入至DB files。

總結

上述實驗很好的說明了oracle日志組在整個生命周期所具有的狀態。當然沒有看到unused狀態,這種狀態是當日志組剛新添到數據庫后的狀態,這種操作在生產環境中很少,所以本次實驗沒有看到這種狀態。

另外有人會認為在手動日志切換時為什么使用命令alter system archive log current。這里也做一個說明。

兩組命令最后的效果一樣。alter system switch logfile是不等歸檔完成就進行switch logfile操作,速度快,尤其在非歸檔模式下適用,對當前實例生效。而alter system archive log current要等待歸檔完成才操作,對所有實例生效

 

其他相關知識點:

Oracle調整聯機重做日志大小(change redo log size) http://www.linuxidc.com/Linux/2013-03/81453.htm

Oracle 聯機重做日志文件(ONLINE LOG FILE) http://www.linuxidc.com/Linux/2011-03/33068.htm

Oracle聯機重做日志丟失的恢復 http://www.linuxidc.com/Linux/2014-04/100893.htm

Oracle 聯機重做日志文件(online redo log file) 詳述 http://www.linuxidc.com/Linux/2013-06/86290.htm

Oracle重做日志文件版本不一致問題處理 http://www.linuxidc.com/Linux/2012-08/69026.htm

【備份與恢復】恢復受損的復用聯機重做日志文件 http://www.linuxidc.com/Linux/2012-06/63497.htm

 

本文按https://www.linuxidc.com/Linux/2014-05/101631.htm做實驗


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM