一、Oracle日志分類
分三大類: Alert log files--警報日志,Trace files--跟蹤日志(用戶和進程)和
redo log 重做日志(記錄數據庫的更改)。
本文主要關注Oracle的重做日志。
重做日志分為在線重做日志和歸檔重做日志。
online Redo log files--在線重做日志,又稱聯機重做日志,指Oracle以SQL腳本的形式實時記錄數據庫的數據更新,換句話說,實時保存已執行的SQL腳本到在線日志文件中(按特定的格式)。
Archive Redo log files--歸檔重做日志,簡稱歸檔日志,指當條件滿足時,Oracle將在線重做日志以文件形式保存到硬盤(持久化)。
重做日志的簡單原理:在數據更新操作commit前,將更改的SQL腳本寫入重做日志。主要用於數據庫的增量備份和增量恢復。
重做日志直接對應於硬盤的重做日志文件(有在線和歸檔二種),重做日志文件以組(Group)的形式組織,一個重做日志組包含一個或者多個日志文件。
二、關於在線重做日志(online redo log)
在線重做日志的原理:
對於在線重做日志,Oracle 11g默認對於每個數據庫實例,建立3個在線日志組,每組一個日志文件,文件名稱為REDO01.LOG,REDO02.LOG和REDO03.LOG。(用戶可以通過視圖操作添加/修改/刪除日志組和日志文件來自定義在線重做日志)
每組內的日志文件的內容完全相同,且保存在不同的位置,用於磁盤日志鏡像,以做多次備份提高安全性。默認情況這3組通常只有一組處於活動狀態,不斷地同步寫入已操作的腳本,當日志文件寫滿時(達到指定的空間配額),如果當前數據庫處於歸檔模式,則將在線日志歸檔到硬盤,成為歸檔日志;若當前數據庫處於非歸檔模式,則不進行歸檔操作,而當前在線日志的內容會被下一次重新寫入覆蓋而無法保存。因此,通常數據庫在運行時,是處於歸檔模式下的,以保存數據更新的日志。
當前歸檔日志組寫滿后,Oracle會切換到下一日志組,繼續寫入,就這樣循環切換;當處於歸檔模式下,切換至原已寫滿的日志組,若該日志組歸檔完畢則覆蓋寫入,若沒有則只能使用日志緩沖區,等待歸檔完畢之后才能覆蓋寫入。當然,處於非歸檔模式下是直接覆蓋寫入的。(關於數據庫歸檔模式的設置,我會在另外的博文中講到)。
Oracle提供了2個視圖用於維護在線重做日志:V$LOG 和 V$LOGFILE,我們可以通過這兩個視圖查看和修改在線日志。
關於V$LOG視圖的詳細屬性字段可Oracle 11g的官方文檔:http://download.oracle.com/docs/cd/B28359_01/server.111/b28320/dynviews_2029.htm
關於V$LOGFILE視圖的詳細屬性字段可Oracle 11g的官方文檔:
http://download.oracle.com/docs/cd/B28359_01/server.111/b28320/dynviews_2031.htm
官方文檔還是最給力的呀,不要忽視!!
通過v$logfile視圖查詢在線日志文件信息:
SQL> SELECT * FROM v$logfile ORDER BY group#;
GROUP# TATUS TYPE MEMBER IS_RECOVERY_DEST_FILE
1 ONLINE E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG NO
2 ONLINE E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO02.LOG NO
3 ONLINE E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO03.LOG NO
通過v$log視圖查詢在線日志的總體信息:
SQL> SELECT * FROM v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARCHIVED STATUS FIRST_CHANGE# FIRST_TIME
1 1 49 52428800 1 NO CURRENT 1466615 07-1月 -11
2 1 47 52428800 1 YES INACTIVE 1434125 06-1月 -11
3 1 48 52428800 1 YES INACTIVE 1460403 07-1月 -11
當然,還可以通過ALTER DATABASE ADD 、delete等命令增加/修改/刪除在線日志或日志組,具體操作可查看http://blog.csdn.net/robinson_0612/archive/2010/07/20/5749556.aspx
三、關於歸檔重做日志(Archive redo log)
其實,所謂的歸檔,就是指將在線日志進行歸檔、持久化到成固定的文件到硬盤,便於以后的恢復和查詢。
當然,前提條件是數據庫要處於歸檔模式。
Oracle 11g 默認是為歸檔日志設定2個歸檔位置,這2個歸檔位置的的歸檔日志的內容完全一致,但文件名不同。