1. 程式人生 > >檢視oracle歸檔日誌路徑2

檢視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程序的工作狀態.