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.重命名日志成員:
在重命名日志組成員之前新的目標必須已經存在。Oracle的sql命令只是把控制文件中的內部指針指向新的日志文件。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. 創建聯機重做日志文件:
當重做日志組成員遭到破壞時,可以刪除并重新添加這個重做日志組或組成員。
二、
檔案重做日志文件:
它是聯機重做日志文件的一個副本。Lgwr和arcn進程的故障都會引起數據庫的掛起。只有當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/MYDB01,mandatory子句的定義向這個位置寫日志的操作必須的成功的。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