oracle11G歸檔日志管理


oracle11G歸檔日志管理

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

一、常用日志查詢語句

  1.  
    select * from v$flash_recovery_area_usage; --查看空間占用率,如果 ARCHIVED LOG 超過90%,Oracle隨時有宕機的危險
  2.  
     
  3.  
    select * from v$recovery_file_dest; --查看歸檔日志大小及使用情況
  4.  
     
  5.  
    select group#, bytes, status from v$log; --查看現有日志
  6.  
     
  7.  
    select sequence#,first_time from v$loghist;--列出所有歸檔redo日志文件的順序和產生的時間
  8.  
     
  9.  
    select * from v$archived_log;  --查看v$archive_log
  10.  
     
  11.  
    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.  
    通過以下方法調整系統的回閃恢復區大小:
  8.  
     
  9.  
    首先是關閉數據庫:以SYS身份鏈接到oracle,執行shutdown immediate;
  10.  
    啟動數據庫到mount狀態:startup mount
  11.  
    查看回閃恢復區的大小和存放目標:show parameter db_recovery_file_dest
  12.  
    修改回閃恢復區的大小alter system set db_recovery_file_dest_size = 4G(缺省是2G,可以根據實際情況調整大小)
  13.  
    最后打開數據庫: 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.  
     
  2.  
    [oracle@dbserver archivelog]$ rman target /
  3.  
     
  4.  
    RMAN> list archivelog all; --查詢全部的歸檔日志,包括(在線和過期歸檔)
  5.  
     
  6.  
    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天前到現在的全部日志,慎用!!!
  8.  
    RMAN> delete archivelog from time 'sysdate-7';
  9.  
     
  10.  
    --以上操作仍然會在RMAN里留下未管理的歸檔文件,可使用以下命令刪除
  11.  
    delete expired archivelog all;
  12.  
     
  13.  
    方式二:
  14.  
    如果誤刪了歸檔的物理文件(也就是控制文件中有,但是實際物理上不存在的歸檔)
  15.  
    --檢查控制文件和實際物理文件的差別
  16.  
    RMAN> crosscheck archivelog all;
  17.  
     
  18.  
    RMAN> delete expired archivelog all;

2.5.3 其它操作

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

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

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

當ORACLE歸檔日志滿后如何正確刪除歸檔日志

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

 

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

 

二、把歸檔日志的物理文件刪除后,我們就可以正常登入ORACLE了,但是還沒完全把歸檔日志刪除干凈,ORACLE的controlfile中仍然記錄着這些archivelog的信息,在oracle的OEM管理器中有可視化的日志展現出,當我們手工清除archive目錄下的文件后,這些記錄並沒有被我們從controlfile中清除掉,接下去我們要做的就是這個工作。

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

1.指定數據庫實例

C:/Documents and Settings/Administrator>SET ORACLE_SID =orcl

2.連接數據庫

C:/Documents and Settings/Administrator>RMAN TARGET SYS/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:/Documents and Settings/junsansi> SET ORACLE_SID =jssbook

    C:/Documents and Settings/junsansi> RMAN TARGET /

    Recovery Manager: Release 10.2.0.1.0 - Production on Tue Mar 17 21:12:17 2009

    Copyright (c) 1982, 2005, Oracle.  All rights reserved.

    connected to target database: JSSBOOK (DBID=1415261003)

    RMAN>

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

  當然,你也可以先啟動RMAN,然后再通過CONNECT命令來連接目標數據庫,如下所示:

  • C:/Documents and Settings/junsansi> RMAN

    Recovery Manager: Release 10.2.0.1.0 - Production on Tue Mar 17 21:12:36 2009

    Copyright (c) 1982, 2005, Oracle.  All rights reserved.

    RMAN> connect target /

    connected to target database: JSSBOOK (DBID=1415261003)

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

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

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

    [oracle@yans1  ~ ]$  rman target /

    Recovery Manager: Release 10.2.0.3.0 - Production on Tue Mar 17 16:08:32 2009

    Copyright (c) 1982, 2005, Oracle.  All rights reserved.

    connected to target database: TEST08 (DBID=3812548755)

    RMAN> 

 

連接遠程數據庫

  如果要連接的目標數據庫是一個遠程數據庫,那么必須在建立連接時指定一個有效的網絡服務名(Net Service Name),本地的tnsname.ora文件中必須已經建立了該網絡服務名的正確配置。連接示例如下:

  • C:/Documents and Settings/junsansi> RMAN TARGET SYS/CHANGE_ON_INSTALL@TESTDB

    Recovery Manager: Release 10.2.0.1.0 - Production on Tue Mar 17 16:12:32 2009

    Copyright (c) 1982, 2005, Oracle.  All rights reserved.

    connected to target database: TESTDB (DBID=2220262593)

    RMAN>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM