1. 程式人生 > 實用技巧 >oracle11G歸檔日誌管理

oracle11G歸檔日誌管理

oracle11G歸檔日誌管理

歸檔日誌檔案是用於長期儲存的,它是線上日誌的離線拷貝版本,當線上日誌切換的時候,ARCH程序就會將這個剛剛關閉的線上日誌檔案的內容複製到磁碟上,長期儲存。歸檔日誌的主要用途是用於資料庫的恢復操作。進行資料庫完全恢復或者不完全恢復的時候,需要將備份的資料檔案恢復到硬碟上,然後通過歸檔日誌將其前滾到所需要的時間點。

在設定了邏輯複製的環境中,歸檔日誌也有可能用來進行挖掘,從而生成LCR(邏輯變化記錄),因此在配置了STREAMS、GOLDENGATE等邏輯複製的環境中,歸檔日誌需要在磁碟上儲存更長的時間,以便於邏輯複製使用。在這種環境中,保留5日以上的歸檔日誌是十分必要的,如果你的儲存空間足夠大,請給予歸檔日誌更大的儲存空間,並且這些歸檔日誌的刪除策略也要做適當的調整,不能由備份軟體自動刪除,而是要通過一個定時任務,刪除幾天前的資料。

此前一直對orale的歸檔日誌管理的細節存在疑惑,今天抽空總結一下

一、常用日誌查詢語句

  1. select * from v$flash_recovery_area_usage; --檢視空間佔用率,如果 ARCHIVED LOG 超過90%,Oracle隨時有宕機的危險
  2. select * from v$recovery_file_dest; --檢視歸檔日誌大小及使用情況
  3. select group#, bytes, status from v$log; --檢視現有日誌
  4. select sequence#,first_time from v$loghist;--列出所有歸檔redo日誌檔案的順序和產生的時間
  5. select * from v$archived_log; --檢視v$archive_log
  6. select count(*) from v$archived_log where archived='YES' and deleted='NO'; --檢視所有歸檔,未刪除的歸檔日誌

二、歸檔日誌管理

2.1 Oracle日誌分類


分三大類: Alert log files--警報日誌,Trace files--跟蹤日誌(使用者和程序)和redo log 重做日誌(記錄資料庫的更改)。

重做日誌分為線上重做日誌和歸檔重做日誌。
online Redo log files--線上重做日誌,又稱聯機重做日誌,指Oracle以SQL指令碼的形式實時記錄資料庫的資料更新,換句話說,實時儲存已執行的SQL指令碼到線上日誌檔案中(按特定的格式)。
Archive Redo log files--歸檔重做日誌,簡稱歸檔日誌,指當條件滿足時,Oracle將線上重做日誌以檔案形式儲存到硬碟(持久化)。

重做日誌的簡單原理:在資料更新操作commit前,將更改的SQL指令碼寫入重做日誌。主要用於資料庫的增量備份和增量恢復。

重做日誌直接對應於硬碟的重做日誌檔案(有線上和歸檔二種),重做日誌檔案以組(Group)的形式組織,一個重做日誌組包含一個或者多個日誌檔案。

2.2 關於線上重做日誌(online redo log)

線上重做日誌的原理:

對於線上重做日誌,Oracle 11g預設對於每個資料庫例項,建立3個線上日誌組,每組一個日誌檔案,檔名稱為REDO01.LOG,REDO02.LOG和REDO03.LOG。(使用者可以通過檢視操作新增/修改/刪除日誌組和日誌檔案來自定義線上重做日誌)
每組內的日誌檔案的內容完全相同,且儲存在不同的位置,用於磁碟日誌映象,以做多次備份提高安全性。預設情況這3組通常只有一組處於活動狀態,不斷地同步寫入已操作的指令碼,當日志文件寫滿時(達到指定的空間配額),如果當前資料庫處於歸檔模式,則將線上日誌歸檔到硬碟,成為歸檔日誌;若當前資料庫處於非歸檔模式,則不進行歸檔操作,而當前線上日誌的內容會被下一次重新寫入覆蓋而無法儲存。因此,通常資料庫在執行時,是處於歸檔模式下的,以儲存資料更新的日誌。
當前歸檔日誌組寫滿後,Oracle會切換到下一日誌組,繼續寫入,就這樣迴圈切換;當處於歸檔模式下,切換至原已寫滿的日誌組,若該日誌組歸檔完畢則覆蓋寫入,若沒有則只能使用日誌緩衝區,等待歸檔完畢之後才能覆蓋寫入。當然,處於非歸檔模式下是直接覆蓋寫入的。(關於資料庫歸檔模式的設定,我會在另外的博文中講到)。

Oracle提供了2個檢視用於維護線上重做日誌:V$LOG 和 V$LOGFILE,我們可以通過這兩個檢視檢視和修改線上日誌。

關於V$LOG檢視的詳細屬性欄位可Oracle 11g的官方文件:http://download.oracle.com/docs/cd/B28359_01/server.111/b28320/dynviews_2029.htm
關於V$LOGFILE檢視的詳細屬性欄位可Oracle 11g的官方文件:
http://download.oracle.com/docs/cd/B28359_01/server.111/b28320/dynviews_2031.htm

還可以通過ALTER DATABASE ADD 、delete等命令增加/修改/刪除線上日誌或日誌組,具體操作可檢視http://blog.csdn.net/robinson_0612/archive/2010/07/20/5749556.aspx

2.3 關於歸檔重做日誌(Archive redo log)

其實,所謂的歸檔,就是指將線上日誌進行歸檔、持久化到成固定的檔案到硬碟,便於以後的恢復和查詢。當然,前提條件是資料庫要處於歸檔模式。

Oracle 11g 預設是為歸檔日誌設定2個歸檔位置,這2個歸檔位置的的歸檔日誌的內容完全一致,但檔名不同。

Oracle資料庫開歸檔之後,oracle 系統預設的歸檔空間為2G,由於日誌過多,空間寫滿,資料庫的redo檔案不能歸檔,而出現oracle資料庫掛起的問題。oem開啟oracle 10g 資料庫操作介面,會顯示如下錯誤資訊: 由於輸出裝置已滿或不可用, 歸檔程式無法歸檔重做日誌。 資料庫無法使用

2.4 增大歸檔日誌空間

方法一:修改閃回區大小

檢視db_recovery

  1. SQL> show parameter db_recovery
  2. NAME TYPE VALUE
  3. ------------------------------------ ----------- ------------------------------
  4. db_recovery_file_dest string G:\Oracle\product\10.2.0\flash _recovery_area
  5. db_recovery_file_dest_size big integer 2G
  6. 通過以下方法調整系統的回閃恢復區大小:
  7. 首先是關閉資料庫:以SYS身份連結到oracle,執行shutdown immediate;
  8. 啟動資料庫到mount狀態:startup mount
  9. 查看回閃恢復區的大小和存放目標:show parameter db_recovery_file_dest
  10. 修改回閃恢復區的大小alter system set db_recovery_file_dest_size = 4G(預設是2G,可以根據實際情況調整大小)
  11. 最後開啟資料庫: alter database open;

方法二:重定向歸檔日誌的位置

生產環境建議將歸檔目錄和oracle產品的安裝目錄分開,修改log_archive_dest_1引數指向定義的歸檔位置(該引數可以不關閉例項進行修改)

SQL> alter system set log_archive_dest_1='location=/oralog/NC65/archivelog' scope=spfile;

2.5 歸檔日誌CRUD操作管理

2.5.1檢視歸檔日誌

  1. [oracle@dbserver archivelog]$ rman target /
  2. RMAN> list archivelog all; --查詢全部的歸檔日誌,包括(線上和過期歸檔)
  3. RMAN> list expired archivelog all; --查詢全部的過期歸檔,(在rman的歸檔過期設定時間到期時歸檔會變為過期狀態,或者物理rm刪除歸檔日誌,交叉檢測 crosscheck archivelog all後,rm 掉的那部分歸檔也變為過期狀態)

2.5.2 刪除歸檔日誌

  1. 方式一:
  2. --檢查控制檔案和實際物理檔案的差別
  3. RMAN> crosscheck archivelog all;
  4. --刪除當前時間之間的所有歸檔日誌 慎用!!!
  5. RMAN>delete archivelog all completed before 'sysdate';
  6. --刪除從7天前到現在的全部日誌,慎用!!!
  7. RMAN> delete archivelog from time 'sysdate-7';
  8. --以上操作仍然會在RMAN裡留下未管理的歸檔檔案,可使用以下命令刪除
  9. delete expired archivelog all;
  10. 方式二:
  11. 如果誤刪了歸檔的物理檔案(也就是控制檔案中有,但是實際物理上不存在的歸檔)
  12. --檢查控制檔案和實際物理檔案的差別
  13. RMAN> crosscheck archivelog all;
  14. RMAN> delete expired archivelog all;

2.5.3 其它操作

  1. 4、退出RMAN
  2. RMAN> exit
  3. 其他RMAN操作
  4. show all --檢視所有的rman策略.
  5. 如何確認歸檔日誌是否過期,rman有一個保留策略,可以定義多少天之前的日誌算為過期;
  6. CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 14 DAYS;
  7. --以下步驟可不做
  8. 5、清空v$archived_log,刪除的歸檔日誌,在該檢視中仍然儲存著對應的部分資料資訊
  9. SQL> execute sys.dbms_backup_restore.resetCfileSection(11);
  10. 6、檢視v$archive_log
  11. SQL>select * from v$archived_log;
  12. 7、生成新的日誌檔案
  13. SQL>alter system switch logfile;

總結:在生產環境中可以根據客戶需求,制定對應的歸檔日誌保留策略,很多 時候在使用rman全備之後,會備份歸檔,可以在全備指令碼後面新增刪除歸檔日誌的命令,因為在全備後,歸檔也會一併備份到對應的備份片中,可以通過備份還原之。總之是否刪除或者怎麼刪除這個都要根據實際情況來。

====================================================================================================================

當ORACLE歸檔日誌滿後如何正確刪除歸檔日誌

2010-01-29 14:23:00107781收藏8 分類專欄:DB文章標籤:oracle資料庫archivedeleteaix網路 版權

當ORACLE 歸檔日誌滿了後,將無法正常登入ORACLE,需要刪除一部分歸檔日誌才能正常登入ORACLE。

一、首先刪除歸檔日誌物理檔案,歸檔日誌一般都是位於archive目錄下,AIX系統下檔案格式為“1_17884_667758186.dbf”,建議操作前先對資料庫進行備份,刪除時至少保留最近幾天的日誌用於資料庫恢復。

二、把歸檔日誌的物理檔案刪除後,我們就可以正常登入ORACLE了,但是還沒完全把歸檔日誌刪除乾淨,ORACLE的controlfile中仍然記錄著這些archivelog的資訊,在oracle的OEM管理器中有視覺化的日誌展現出,當我們手工清除archive目錄下的檔案後,這些記錄並沒有被我們從controlfile中清除掉,接下去我們要做的就是這個工作。

我們利用RMAN進行刪除操作,操作步驟如下:(window客戶端系統為例)

1.指定資料庫例項

C:/DocumentsandSettings/Administrator>SETORACLE_SID =orcl

2.連線資料庫

C:/DocumentsandSettings/Administrator>RMANTARGETSYS/sysadmin@orcl

3.檢視歸檔日誌的狀態

RMAN> list archivelog all;

4.手工刪除歸檔日誌檔案

RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';

說明:
SYSDATA-7,表明當前的系統時間7天前,before關鍵字表示在7天前的歸檔日誌,如果使用了閃回功能,也會刪除閃回的資料。
同樣道理,也可以刪除從7天前到現在的全部日誌,不過這個命令要考慮清楚,做完這個刪除,最好馬上進行全備份資料庫
DELETE ARCHIVELOG from TIME 'SYSDATE-7'; 刪除從7天前到現在的全部日誌,慎用
UNIX/LINUX下也可以通過FIND找到7天前的歸檔資料,使用EXEC子操作刪除
find /oraarchive -xdev -mtime +7 -name "*.dbf" -exec rm -f {} ;
這樣做仍然會在RMAN裡留下未管理的歸檔檔案
仍需要在RMAN裡執行下面2條命令
crosscheck archivelog all;
delete expired archivelog all;
所以還不如上面的方法好用,不過用FIND的好處就是,可以在條件上,和EXEC子項上做很多操作,實現更復雜的功能

5.退出rman

RMAN> exit

附帶說明:RMAN 是Oracle資料庫軟體自帶的備份恢復工具,一種是類似於DOS,通過鍵盤操作的 命令列方式。

通過RMAN連線本地資料庫非常簡單,以 W indows 平臺為例,進入到命令提示符介面:

  • C:/DocumentsandSettings/junsansi> SETORACLE_SID =jssbook

    C:/DocumentsandSettings/junsansi> RMANTARGET/

    RecoveryManager:Release10.2.0.1.0-ProductiononTueMar1721:12:172009

    Copyright(c)1982,2005,Oracle.Allrightsreserved.

    connectedtotargetdatabase:JSSBOOK(DBID=1415261003)

    RMAN>

  如上所示,使用RMAN連線本地資料庫之前必須首先設定作業系統環境變數:ORACLE_SID,並指定該值等於目標資料庫的例項名。如果本地庫只有一個例項並已經設定了ORACLE_SID環境變數,則不需要再指定ORACLE_SID。RMAN會自動連線到預設例項。

  當然,你也可以先啟動RMAN,然後再通過CONNECT命令來連線目標資料庫,如下所示:

  • C:/DocumentsandSettings/junsansi> RMAN

    RecoveryManager:Release10.2.0.1.0-ProductiononTueMar1721:12:362009

    Copyright(c)1982,2005,Oracle.Allrightsreserved.

    RMAN>connecttarget/

    connectedtotargetdatabase:JSSBOOK(DBID=1415261003)

  本地連線允許使用作業系統驗證,因此上述示例都不需要輸入使用者名稱和密碼,不過如果本地沒有啟用作業系統身份驗證的話,就必須指定具有相應許可權的使用者名稱和密碼。

  需要注意,Linux/UNIX 環境下設定作業系統環境變數應使用 export 命令,另外ORACLE_SID必須為大寫。例如:

  • [oracle@yans1 ~ ]$ export ORACLE_SID=test08

    [oracle@yans1 ~ ]$ rmantarget/

    RecoveryManager:Release10.2.0.3.0-ProductiononTueMar1716:08:322009

    Copyright(c)1982,2005,Oracle.Allrightsreserved.

    connectedtotargetdatabase:TEST08(DBID=3812548755)

    RMAN>

連線遠端資料庫

  如果要連線的目標資料庫是一個遠端資料庫,那麼必須在建立連線時指定一個有效的網路服務名(NetServiceName),本地的tnsname.ora檔案中必須已經建立了該網路服務名的正確配置。連線示例如下:

  • C:/DocumentsandSettings/junsansi> RMANTARGETSYS/CHANGE_ON_INSTALL@TESTDB

    RecoveryManager:Release10.2.0.1.0-ProductiononTueMar1716:12:322009

    Copyright(c)1982,2005,Oracle.Allrightsreserved.

    connectedtotargetdatabase:TESTDB(DBID=2220262593)

    RMAN>