理解redo(6)日誌卻的流程和直接路徑載入的REDO分析

來源:互聯網
上載者:User

當server process得到redo allocation latch進行redo log buffer分配之前,需要先嗅一下redo log file是否有足夠的空間。倘若空間不足,則sp會發送switch log file的請求,然後坐等log file switch completion事件的完成了。

日誌卻請求發出後,CKPT會進行一次增量檢查點事件,而LGWR開始進行日誌卻換工作。

具體流程如下:

1)LGWR進程會通過控制檔案中的雙向鏈表,尋找到一個可用的REDO LOG檔案,作為新的CURRENT REDO LOG。

演算法如下:

記錄檔是inactive,並且已經歸檔了

優先使用unused記錄檔組

2)將redo log buffer中還未寫入的redo entries flush到current online redo log file,並且將最後一條redo entries的SCN作為本記錄檔的high SCN記錄在redo log header裡面,然後關閉current online redo log file。

3)進行第二次控制檔案事務,將剛剛關閉的REDO LOG標識為ACTIVE(這是個增量檢查點事件,之所以標識為active,是因為它所保護的dirty buffer可能還未寫到資料檔案,如果已經全部寫到磁碟了,則可以標識為inactive)將新的當前REDO LOG標識為CURRENT,如果資料庫處于歸檔模式,還要將老的日誌組記錄到控制檔案歸檔列表記錄中,並且通知ARCn對該記錄檔進行歸檔。

4)LGWR開啟新的日誌組的所有成員,在記錄檔頭記錄當前日誌sequence#和第一個redo block 的SCN(LOW SCN)

5)LGWR修改SGA中的標誌位,允許產生新的REDO LOG資訊

綜上所述,日誌切換是一種較為昂貴的操作。因為在卻換期間,對資料庫所有的交易都將被阻塞。但是加大REDO LOG檔案大小和遺失資料的多少是無關的。理由:

1)redo entries是順序寫入的,寫入一個和寫入多個,對於恢複而言是一樣的

2)儲存故障,受影響的肯定是所有的REDO LOG檔案

ARCHIVE模式下,直接路徑載入會記錄REDO。在非ARCHIVE LOG 模式下,直接路徑載入這個動作不會記錄REDO,但是Oracle由於系統改動需要維護段、區、資料表空間等而會產生REDO的。

下面將redo log file給dump出來

  1. 09:29:36 sys@ORCL (^ω^) conn hr/hr  
  2. 已串連。  
  3. 09:34:57 hr@ORCL (^ω^) create table test as select * from dba_objects where 1=2;  
  4.   
  5. 表已建立。  
  6.   
  7. 09:35:41 hr@ORCL (^ω^) select dbms_flashback.get_system_change_number from dual;  
  8.   
  9. GET_SYSTEM_CHANGE_NUMBER  
  10. ------------------------   
  11.                  2804230  
  12.   
  13. 09:36:06 hr@ORCL (^ω^) select group#,status from v$log;  
  14.   
  15.     GROUP# STATUS  
  16. ---------- --------------------------------   
  17.          1 CURRENT  
  18.          2 INACTIVE  
  19.          3 INACTIVE  
  20.   
  21. 09:36:26 hr@ORCL (^ω^) col member for a72  
  22. 09:36:36 hr@ORCL (^ω^) select group#,member from v$logfile;  
  23.   
  24.     GROUP# MEMBER  
  25. ---------- ------------------------------------------------------------------------   
  26.          3 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_3_7TQZWZOY_.LOG  
  27.          3 D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\O1_MF_3_7TQZ  
  28.            X11D_.LOG  
  29.   
  30.          2 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_2_7TQZWXO2_.LOG  
  31.          2 D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\O1_MF_2_7TQZ  
  32.            WYPH_.LOG  
  33.   
  34.          1 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_1_7TQZWVDD_.LOG  
  35.          1 D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ONLINELOG\O1_MF_1_7TQZ  
  36.            WWJ8_.LOG  
  37.   
  38.   
  39. 已選擇6行。  
  40. 09:37:24 hr@ORCL (^ω^) select dbms_flashback.get_system_change_number from dual;  
  41.   
  42. GET_SYSTEM_CHANGE_NUMBER  
  43. ------------------------   
  44.                  2804353  
  45.   
  46. 09:37:59 hr@ORCL (^ω^) insert /*+append*/ into test select * from dba_objects;  
  47.   
  48. 已建立50453行。  
  49.   
  50. 09:39:15 hr@ORCL (^ω^) commit;  
  51.   
  52. 提交完成。  
  53.   
  54. 09:39:21 hr@ORCL (^ω^) select dbms_flashback.get_system_change_number from dual;  
  55.   
  56. GET_SYSTEM_CHANGE_NUMBER  
  57. ------------------------   
  58.                  2804521  
  59.   
  60. 09:39:29 hr@ORCL (^ω^) alter system dump logfile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_1_7TQZWVDD_.LOG'  
  61. 09:40:25   2  scn min 2804353 scn max 2804521;  
  62.   
  63. 系統已更改。  
  64.   
  65. 09:40:57 hr@ORCL (^ω^) conn / as sysdba  
  66. 已串連。  
  67. 09:41:09 sys@ORCL (^ω^) archive log list  
  68. 資料庫記錄模式            存檔模式  
  69. 自動封存             啟用  
  70. 存檔終點            USE_DB_RECOVERY_FILE_DEST  
  71. 最早的聯機日誌序列     3  
  72. 下一個存檔日誌序列   5  
  73. 當前日誌序列           5  
  74. 09:41:19 sys@ORCL (^ω^) alter system dump logfile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_1_7TQZWVDD_.LOG'  
  75. 09:43:23   2  scn min 2804230 scn max  2804521;  
  76.   
  77. 系統已更改。  
  78.   
  79. 09:44:03 sys@ORCL (^ω^) conn hr/hr  
  80. 已串連。  
  81. 09:45:58 hr@ORCL (^ω^) select dbms_flashback.get_system_change_number from dual;  
  82.   
  83. GET_SYSTEM_CHANGE_NUMBER  
  84. ------------------------   
  85.                  2804801  
  86.   
  87. 09:46:07 hr@ORCL (^ω^) insert  /*+ APPEND */ into text select * from dba_objects;  
  88. insert  /*+ APPEND */ into text select * from dba_objects  
  89.                            *  
  90. 第 1 行出現錯誤:  
  91. ORA-00942: 表或視圖不存在  
  92.   
  93.   
  94. 09:47:42 hr@ORCL (^ω^) insert  /*+ APPEND */ into test select * from dba_objects;  
  95.   
  96. 已建立50453行。  
  97.   
  98. 09:47:53 hr@ORCL (^ω^) commit;  
  99.   
  100. 提交完成。  
  101.   
  102. 09:47:58 hr@ORCL (^ω^) select dbms_flashback.get_system_change_number from dual;  
  103.   
  104. GET_SYSTEM_CHANGE_NUMBER  
  105. ------------------------   
  106.                  2805155  
  107.   
  108. 09:48:10 hr@ORCL (^ω^) select group#,status from v$log;  
  109.   
  110.     GROUP# STATUS  
  111. ---------- --------------------------------   
  112.          1 CURRENT  
  113.          2 INACTIVE  
  114.          3 INACTIVE  
  115.   
  116. 09:48:50 hr@ORCL (^ω^) alter system dump logfile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ONLINELOG\O1_MF_1_7TQZWVDD_.LOG'  
  117. 09:49:32   2  scn min 2804801 scn max 2805155;  
  • 1
  • 2
  • 下一頁

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.