天天看點

檢視oracle歸檔日志路徑2

在oracle中,資料一般是存放在資料檔案中,不過資料庫與oracle最大的差別之一就是資料庫可以在資料出錯的時候進行恢複。 這個也就是我們常見的oracle中的重做日志(redo file)的功能了。在重做日志分成2部分,一個是線上重做日志檔案,另外一個就是歸檔日志檔案。 

    這裡不詳細說明線上重做日志,而是說一下歸檔日志(archive log)。線上重做日志大小畢竟是有限的,當都寫滿了的時候,就面臨着2個選擇,第一個就是把以前線上重做日志從頭擦除開始繼續寫,第二種就是把以前的線上重做日志先進行備份,然後對被備份的日志擦除開始寫新的線上redo file。這種備份的線上重做日志就是歸檔日志。而資料庫如果采用這種生成歸檔日志的模式的話,就是歸檔日志模式(archivelog模式),反之如果不生成歸檔日志,就是非歸檔日志模式(noarchivelog模式)。 

    有了歸檔日志有什麼好處了。比如在這個月1号的時候備份了一次資料,然後過了10天,這10天生成了成百上千個線上重做日志,突然發現其中有一個資料磁盤出問題了,不能用了,那我該如何是好呢。 

    如果沒有采用歸檔日志,那麼實際上磁盤中隻會有幾個最新的線上重做日志。那麼我隻能要不然把出問題的資料磁盤上所占據的表空間都删除掉。但是如果是system表空間所涉及的磁盤出錯,就沒辦法這麼做了,隻能用第二種方法。那第二種方法就是把1号備份的資料拿出來恢複。那麼1号到10号之間的10天的資料都丢了,如果是關鍵系統,比如證券金融什麼的系統,就要讓你賠錢賠死掉。 

    但是如果有了歸檔日志,那麼你這10天的重做日志都會存放起來,那麼dba首先把1号的備份資料恢複,然後再拿這10天的redo日志來進行一次資料操作重放,那麼就可以完全恢複最新的資料庫,不會有什麼後果了。 

    在軟體開發的時候,由于測試伺服器的配置有限,特别是磁盤空間有限,是以有可能要限制redo檔案的大小,有可能就把系統設定為noarchivelog模式了。但是在實際的生産運作環境下,基本上一定要使用archivelog模式,否則萬一出了問題,真是哭都來不及了。 

    有人可能會怕歸檔日志造成性能損失。其實這個完全是杞人憂天的,歸檔日志隻是做一個備份,其實也就是多耗一些磁盤空間而已。在目前的軟體系統中,硬碟的存儲容量成本已經屬于低到可以忽略的地步,而最重要的是資料庫的安全。dba的任務本來就是確定資料的安全,如果連安全都保證不了,那點微乎其微的性能提高又有什麼用呢。 

歸檔日志(archive log)是非活動的重做日志備份.通過使用歸檔日志,可以保留所有重做曆史記錄,當資料庫處于archivelog模式并進行日志切換式,背景程序arch會将重做日志的内容儲存到歸檔日志中.當資料庫出現媒體失敗時,使用資料檔案備份,歸檔日志和重做日志可以完全恢複資料庫. 

日志操作模式:archivelog noarchivelog 

1,改變日志操作模式: 

檢查目前日志操作模式 

select log_mode from v$database; 

關閉資料庫,然後裝載資料庫 

shutdown immediate 

startup mount 

改變日志操作模式,然後打開資料庫 

alter database archivelog; 

archive log start; 

alter database open; 

2,執行手工歸檔 

從oracle database 10g開始,當将日志操作模式轉變未archivelog模式時,oracle會自動啟動arch程序.如果要使用手工歸檔.那麼在改變日志操作模式時必須使用指令alter database archivelog manual. 

需要注意,使用手工歸檔方式,資料庫管理者必須手工執行歸檔指令.如果沒有執行手工歸檔指令,日志組的原有内容将不能被覆寫.alter database archivelog manual 指令是為了與先前的版本相容而保留的,.将來的oracle版本會淘汰該指令,使用手工歸檔方式是,資料庫管理者可以執行以下指令歸檔重做日志: 

slter system archivelog all; 

3,配置歸檔程序 

初始化參數log_archive_max_processes用于指定例程初始啟動的最大歸檔程序個數,當将資料庫轉變為archivelog模式時,預設情況下oracle會自動啟動兩個歸檔程序.通過改變初始化參數log_archive_max_process的值,可以動态地增加或降低歸檔程序的個數: 

alter system set log_archive_max_processes=3; 

配置歸檔位置和檔案格式 

當資料庫處于archivelog模式時,如果進行日志切換,背景程序将自動生成歸檔日志,歸檔日志的預設位置為%oracle_home%rdbms,在oracle database 10g中,歸檔日志的預設檔案格式為arc%s_%r.%t.為了改變歸檔日志的位置和名稱格式,必須改變相應的初始化參數, 

1,初始化參數log_archive_format用于指定歸檔日志的檔案名格式,設定該初始化參數時,可以指定以下比對符: 

%s: 日志序列号: 

%s: 日志序列号(帶有前導0) 

%t: 重做線程編号. 

%t: 重做線程編号(帶有前導0) 

%a: 活動id号 

%d: 資料庫id号 

%r resetlogs的id值. 

從10g開始,配置歸檔日志檔案格式時,必須帶有%s,%t和%r比對符,配置了歸檔檔案格式後,必須重新開機資料庫. 

2,使用log_archive_dest配置歸檔位置 

如果不使用備用資料庫,隻需要将歸檔日志存放到本地目錄.配置本地歸檔位置可以使用初始化參數log_archive_dest和log_archive_duplex_dest,其中,第一個參數用于設定第一個歸檔位置,第二個參數用于指定第二個歸檔位置. 

alter system set log_archive_dest=’d:demoarchive1’; 

alter system set log_archive_duplex_dest=’d:demoarchive2’; 

3,使用log_archive_dest_n配置多個歸檔位置. 

初始化參數log_archive_dest_n用于指定多個歸檔位置,該參數最多可以指定10個歸檔位置.通過使用初始化參數log_archive_dest_n,不僅可以配置本地歸檔位置,還可以配置遠端歸檔位置. 

如果既要在主節點上生成歸檔日志,又要将歸檔日志傳遞到備用節點,那麼必須使用參數log_archive_dest_n.該參數與log_archive_dest具有如下差別; 

初始化參數log_archive_dest_n可以配置本地歸檔位置和遠端歸檔位置,而初始化參數log_archive_dest和log_archive_duplex_dest隻能配置本地歸檔位置. 

初始化參數log_archive_dest_n可以配置多達10個歸檔位置,而初始化參數log_archive_dest和log_archive_duplex_dest最多隻能配置兩個歸檔位置. 

初始化參數log_archive_dest_n 不能與初始化參數log_archive_dest和log_archive_duplex_dest同時使用. 

因為初始化參數log_archive_dest_n不能與初始化參數log_archive_dest和log_archive_duplex_dest同時使用,是以必須禁用初始化參數log_archve_dest和log_archive_duplex_dest.當使用初始化參數log_archive_dest_n配置本地歸檔位置時,需要指定localtion選項.當配置遠端歸檔位置時,需要指定service選項. 

示例如下: 

alter system set log_archive_duplex_dest=’’; 

alter system set log_archive_dest=’’; 

alter system set log_archive_dest_1=’location=d:demoarchive1’; 

alter system set log_archive_dest_2=’location=d:demoarchive2’; 

alter system set log_archive_dest_3=’location=d:demoarchive3’; 

alter system set log_archive_dest_4=’service=standby’; 

配置遠端歸檔位置時,service選項需要指定遠端資料庫的網絡服務名(在tnsnames.ora檔案中配置) 

4,使用log_archive_dest_n選項 

使用初始化參數log_archive_dest_n配置歸檔位置時,可以在歸檔位置上指定optional或mandatory選項.指定mandatory選項時,可以設定reopen屬性. 

optional:該選項是預設選項.使用該選項時,無論歸檔是否成功,都可以覆寫重做日志. 

mandatory:強制歸檔.使用該選項時,隻有在歸檔成功之後,重做日志才能被覆寫. 

reopen:該屬性用于指定重新歸檔的時間間隔,預設值為300秒,必須跟在mandatory後. 

例: 

alter system set log_archive_dest_1=’location=d:demoarchive1 mandatory’; 

alter system set log_archive_dest_2=’location=d:demoarchive2 mandatory reopen=500’; 

alter system set log_archive_dest_3=’location=d:demoarchive3 optional’; 

5,控制本地歸檔成功的最小個數. 

使用初始化參數log_archive_min_succeed_dest控制本地歸檔的最小成功個數 

alter system set log_archive_min_succeed_dest=2; 

6,使用初始化參數log_archive_dest_state_n控制歸檔位置的可用性.設定該參數為enable(預設值),表示會激活相應的歸檔位置;設定該參數為defer,表示禁用相應歸檔位置.當歸檔日志所在磁盤損壞或填滿時,dba需要暫時禁用該歸檔位置. 

alter system set log_archive_dest_state_3=defer;(禁用) 

alter system set log_archive_dest_state_3=enable;(啟用) 

顯示歸檔日志資訊 

1,使用archive log list指令可以顯示日志操作模式,歸檔位置,自動歸檔機器要歸檔的日志序列号等資訊. 

2顯示日志操作模式 

select name,log_mode from v$database; 

3,顯示歸檔日志資訊. 

col name format a40 

select name, swquence#, first_change# from v$archived_log; 

name用于表示歸檔日志檔案名,sequence#用于表示歸檔日志對應的日志序列号,firs_change#用于辨別歸檔日志的起始scn值. 

4執行媒體恢複時,需要使用歸檔日志檔案,此四必須準确定位歸檔日志的存放位置.通過查詢動态性能視圖v$archive_dest可以取得歸檔日志所在目錄. 

select destination from v$archive dest; 

5,顯示日志曆史資訊 

select * from v$loghist; 

thread#用于辨別重做線程号,sequnce#用于辨別日志序列号,first_change#用于辨別日志序列号對應的起始scn值,first_time用于辨別起始scn的發生時間.swicth_change#用于辨別日志切換的scn值. 

6.顯示歸檔程序資訊. 

進行日志切換時,arch程序會自動将重做日志内容複制到歸檔日志中,為了加快歸檔速度,應該啟用多個arch程序.通過查詢動态性能視圖v$archive_processes可以顯示所有歸檔程序的資訊! 

select * from v$archive_processes; 

porcess用于辨別arch程序的編号,status用于辨別arch程序的狀态(active:活動,stopped:未啟動),log_sequence用于辨別正在進行歸檔的日志序列号,state用于辨別arch程序的工作狀态.