天天看點

Oracle日志分類

一、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個歸檔位置的的歸檔日志的内容完全一緻,但檔案名不同。