Oracle的重做日志和歸檔日志

jopen 10年前發布 | 18K 次閱讀 Oracle 數據庫服務器

 一、

   重做日志文件把對數據文件的修改在寫入數據文件之前記錄下來。日志文件以一種循環的方式被寫入信息。當一個日志組被寫滿時,回自動向另一個日志組寫入。管理員可以手工切換當前日志組。alter system switch logfile 可以切換當前的日志組。當日志組發生切換時,oracle向新的重做日志組分配一個日志序列號。當存在大量的事務時必須調整重做日志文件的大小,以避免頻繁的日志切換發生。重做日志文件被順序的寫在磁盤上,如果磁盤沒有其他活動,I/O將會很快。應該把重做日志文件保存在 單獨的磁盤上,以獲取良好的性能。尤其不要把經常處于活動狀態的SYSTEM,UNDOTBS,SYSAUX的表空間或索引表空間文件保存到同一塊磁盤上。因為只有在事務的請求被寫到重做日志后,請求才能被完成。最大限度的提高重做日志的吞吐量是oracle性能優化首先考慮的因素。當發生重做日志切換而生成 一個新的檢查點時,DBWn就會寫臟緩沖器塊。這樣會影響oracle的性能。可以通過fast_start_mttr_target初始化參數來調整檢查點。

   每個數據庫都有自己的聯機重做日志組,一個聯機重做日志組有多個重做日志成員,每個日志成員有單獨的操作系統文件。在一個rac配置(這種配置中單個數據庫裝有多個實例),每個實例有一個聯機重做日志線程,每個實例的lgwr進程都寫到相同的聯機重做日志文件。因此oracle必須跟蹤數據庫實例修改來自那個實例。

   當多路復用重做日志文件時,應該把一個組的成員保存在不同的磁盤上。以避免單點故障的發生。如果重做日志文件組的所有成員都無法寫入數據,oracle將被掛起。Dba可以在創建數據庫時創建多個聯機重做日志文件的副本。

   對日志的操作如下:

  

   a. 創建新的重做日志組:

      Alter database add logfile

      Group 3 (/ora02/oradata/mydb01/redo0301.log,

      /ora03/oradata/mdb01/redo0302.log) size 10m;

      如果省略group子句oracle分配一個有效的編號如下

      Alter database add logfile

  

   b. 添加新的組成員

      alter database add logfile member

      /ora04/oradata/mydb01/redo0203.log to group 2;(向第二組中添加新的成員)

  

   c.重命名日志成員:

     在重命名日志組成員之前新的目標必須已經存在。Oraclesql命令只是把控制文件中的內部指針指向新的日志文件。Dba需要用操作系統命令來重命名此日志文件。步驟如下:

     1.關閉數據庫

     2.使用操作系統命令重命名或移動日志文件

     3. 啟動數據庫實例(start mount),重命名控制文件中的日志文        件成員。Alter database rename file         old_redo_file_name to new_redo_file_name;

     4.打開數據庫 alter database open

     5.備份控制文件

   D.刪除重做日志組:

      將要被刪除的重做日志組不能是活動的日志組。Alter database drop logfile group 3;。當重做日志文件被刪除后,相關的操作系統文件也被刪除,相關的數據庫控制文件也給更新。

   E.使用和刪除重做日志組相同的方式,dba可以只刪除一個非活動的重做日志組的成員。

      Alter database drop logfile member /ora04/oradata/mydb01/redo0203.log;

     

   f. 創建聯機重做日志文件:

      當重做日志組成員遭到破壞時,可以刪除并重新添加這個重做日志組或組成員。

   二、

     

檔案重做日志文件:

   它是聯機重做日志文件的一個副本。Lgwrarcn進程的故障都會引起數據庫的掛起。只有當arcn進程把聯機重做日志寫到歸檔地后,才可以向此重做日志組成員寫入數據。

   設置歸檔目的地:

   可以在參數初始化文件中的log_archive_dest_n來定義歸檔目的地。歸檔目的地可以在本地計算機上,也可在遠程的數據庫服務器上。定義語法如下:

    LOG_ARCHIVE_DEST_n= null_string |

    (service=tnsnames_name |

  LOCATION= directory_name)

  [MANDATORY | OPTIONAL]

  [REOPEN[=integer]]

  例1

  LOG_ARCHIVE_DEST_1=((LOCATION=/archive/MYDB01) MANDATORU REOPEN=60)定義歸檔日志的位置為/archive/MYDB01mandatory子句的定義向這個位置寫日志的操作必須的成功的。Reopen子句定義在日志寫入失敗時,下次嘗試寫入操作的時間間隔。缺省是300秒。

  例2

  LOG_ARCHIVE_DEST_@=(SERVICE=STDBY01) OPTIONAL REOPEN;語句中的stdby01的連接到遠程數據庫的oracle net連接串。由于寫操作是可選的,所以數據庫活動繼續,當arcn進程不能寫檔案日志文件時,進程將立即嘗試重新寫入(這個動作有reopen子句來定義)。

  Log_archive_min_succeed_dest:定義最少歸檔日志的副本數量。

  Log_archive_format:定義歸檔日志文件采用的名稱和使用的格式。可以使用預定義變量來構造每個歸檔日志文件的名稱。變量如下:

  %s      日志序列號

  %t      線程號

  %r      復位日志id

  %d      數據庫id

  定義歸檔日志名稱的變量至少包含%s%t,%r,當多個數據庫實例的歸檔日志采用相同的歸檔日志位置時,還必須定義%d。例如:%t_%s_%r.dbf

原文地址:http://blog.chinaunix.net/uid-20383874-id-1691918.html

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!