1. 程式人生 > >9. Oracle 歸檔日誌

9. Oracle 歸檔日誌

不同 查看數據庫 rst recover led location 最大 defer 功能

轉載自:http://blog.csdn.net/leshami/article/details/5784713

Oracle可以將聯機日誌文件保存到多個不同的位置,將聯機日誌轉換為歸檔日誌的過程稱之為歸檔。相應的日誌被稱為歸檔日誌。

一、歸檔日誌

是聯機重做日誌組文件的一個副本
包含redo記錄以及一個唯一的log sequence number
對日誌組中的一個日誌文件進行歸檔,如果該組其中一個損壞,則另一個可用的日誌將會被歸檔
對於歸檔模式的日誌切換,當日誌歸檔完成後,下一個日誌才能被覆蓋或重新使用
自動歸檔功能如開啟,則後臺進程arcn在日誌切換時自動完成歸檔,否則需要手動歸檔
歸檔日誌用途
    恢復數據庫
    更新standby數據庫
    使用LogMiner 提取歷史日誌的相關信息

二、日誌的兩種模式

--1.非歸檔模式
不適用與生產數據庫
創建數據庫時,缺省的日誌管理模式為非歸檔模式
當日誌切換,檢查點產生後,聯機重做日誌文件即可被重新使用
聯機日誌被覆蓋後,介質恢復僅僅支持到最近的完整備份
不支持聯機備份表空間,一個表空間損壞將導致整個數據庫不可用,需要刪除掉損壞的表空間或從備份恢復
對於操作系統級別的數據庫備份需要將數據庫一致性關閉
應當備份所有的數據文件、控制文件(單個)、參數文件、密碼文件、聯機日誌文件(可選)

--2.歸檔模式
能夠對聯機日誌文件進行歸檔,生產數據庫強烈建議歸檔
在日誌切換時,下一個即將被寫入日誌組必須歸檔完成之後,日誌組才可以使用
歸檔日誌的Log sequence number信息會記錄到控制文件之中
必須有足夠的磁盤空間用於存放歸檔日誌
Oracle 9i 需要設置參數log_archive_start=true 才能夠進行自動歸檔
備份與恢復
    支持熱備份,且當某個非系統表空間損壞,數據庫仍然處於可用狀態,且支持在線恢復
    使用歸檔日誌能夠實現聯機或脫機時點恢復(即可以恢復到指定的時間點、指定的歸檔日誌或指定的SCN)

三、兩種模式的切換設置及手動歸檔

--1.非歸檔到歸檔模式
a.一致性關閉數據庫(shutdown [immediate | transactional |normal])
b.啟動到mount階段(startup mount)
c.切換到歸檔模式(alter database archivelog  [manual])
d.切換到open階段(alter database open)
e.對數據做一個完整備份(full backup)
--演示非歸檔到歸檔模式
SQL> ARCHIVE LOG LIST    --查看數據庫是否處於歸檔模式
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     14
Current log sequence           16

SQL> SELECT log_mode FROM v$database;  --查看數據庫是否處於歸檔模式
LOG_MODE
------------
NOARCHIVELOG        

SQL> SHUTDOWN IMMEDIATE;     --一致性關閉數據庫
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> STARTUP MOUNT;         --啟動到mount狀態
ORACLE instance started.

Total System Global Area  251658240 bytes
Fixed Size                  1218796 bytes
Variable Size              75499284 bytes
Database Buffers          171966464 bytes
Redo Buffers                2973696 bytes
Database mounted.

SQL> ALTER DATABASE ARCHIVELOG;  --切換到自動歸檔模式
Database altered.
SQL> ALTER DATABASE OPEN;        --切換到open狀態
Database altered.

SQL> ARCHIVE LOG LIST;           --查看數據庫的歸檔狀態
Database log mode              Archive Mode    --已置為歸檔模式
Automatic archival             Enabled         --對日誌進行自動歸檔
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     14
Next log sequence to archive   16
Current log sequence           16
--備份數據庫步驟省略

--2.歸檔模式切換到非歸檔模式(步驟同非歸檔到歸檔模式僅僅是c步驟使用alter database noarchivelog,演示省略)
a.一致性關閉數據庫(shutdown [immediate | transactional |normal])
b.啟動到mount階段(startup mount)
c.切換到歸檔模式(alter database noarchivelog  )
d.切換到open階段(alter database open)
e.對數據做一個完整備份(full backup)
        
--3.手動歸檔
手動歸檔時需要將日誌模式切換為alter database archivelog manual
再使用alter system archive log current | all 實現歸檔 
更多手動歸檔命令:ALTER SYSTEM archive_log_clause

註意:
手動歸檔模式下不支持stanby數據庫
在alter database archivelog模式下也可以實現對日誌的歸檔

SQL> ALTER DATABASE ARCHIVELOG MANUAL;     --將日誌模式切換為手工歸檔模式
Database altered.

SQL> ALTER DATABASE OPEN;                  --打開數據庫
Database altered.

SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;     --對當前的日誌進行歸檔(建議在mount階段完成)
System altered.

SQL> ALTER SYSTEM ARCHIVE LOG ALL;         --對所有的日誌進行歸檔
alter system archive log all
*
ERROR at line 1:
ORA-00271: there are no logs that need archiving  --沒有需要歸檔的日誌
 
--4.歸檔進程的調整
通過設置LOG_ARCHIVE_MAX_PROCESSES 參數,可以指定數據庫規定所需初始化的進程數,缺省的歸檔進程數為2
一般情況下不需要修改該參數,Oracle會根據歸檔情況自動啟動額外的歸檔進程
也可以動態的增加或減少歸檔進程數,比如有些業務在月底需要進行大量歸檔,平時則歸檔較少,對此可以動態修改
修改方法:ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=3;

--5.配置歸檔(兩種歸檔位置配置方法)
a.歸檔到本機且少於等於兩個歸檔位置
設置LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST參數
alter system set log_archive_dest = ‘/u01/app/oracle/archivelog1‘ scope = spfile;
alter system set log_archive_duplex_dest = ‘/u01/app/oracle/archivelog2‘ scope = spfile;
    
b.歸檔到本機或遠程主機
設置LOG_ARCHIVE_DEST_n 參數,n最大值為10
alter system set log_archive_dest_1 = ‘LOCATION=/u01/app/oracle/archivelog3‘;
alter system set log_archive_dest_2 = ‘SERVICE=standby1‘;
對於遠程歸檔位置,SERVICE選項需要指定遠程數據庫的網絡服務名(在tnsnames.ora文件中配置)
LOG_ARCHIVE_DEST_n的兩個常用選項
    MANADATORY | OPTIONAL:
        MANADATORY表示歸檔必須成功復制到目的路徑之後,聯機重做日誌才能被復用,OPTIONAL正好相反
    REOPEN:
        指定歸檔失敗後指定間隔多少時間重試歸案,缺省的為300秒
    示例:
    log_archive_dest_1 = ‘LOCATION=/u01/app/oracle/archivelog3 manadatory reopen = 600‘
    log_archive_dest_2 = ‘SERVICE=standby1 manadatory reopen‘
    
c.兩種歸檔方法異同(前者log_archive_dest、log_archive_duplex_dest ,後者log_archive_dest_n)
兩者都可以歸檔到本機,後者可以歸檔到遠程主機,前者不支持該功能
前者最多配置兩個歸檔位置,後者可以配置10個歸檔位置
兩者互不兼容,要麽使用前者,要麽使用後者
使用後者歸檔到本地時需要增加LOCATION選項,備份到遠程主機需要使用SERVICE選項
但上述兩種方式未指定路徑時,歸檔日誌位於db_recovery_file_dest 缺省為$ORACLE_BASE/flash_recovey_area
    
d.歸檔日誌命名格式
設置LOG_ARCHIVE_FORMAT參數,Unix下的缺省設置為LOG_ARCHIVE_FORMAT=%t_%s_%r.dbf
    %s: 日誌序列號:
    %S: 日誌序列號(帶有前導)
    %t: 重做線程編號.
    %T: 重做線程編號(帶有前導)
    %a: 活動ID號
    %d: 數據庫ID號
    %r RESETLOGS的ID值.
alter system set log_archive_format = ‘arch_%t_%s_%r.arc‘;

e.歸檔位置狀態
Valid/Invalid      --磁盤位置及服務名等是否有效
Enabled/Disabled   --磁盤位置的可用狀態及數據庫能否使用該歸檔位置
Active/Inactive    --訪問歸檔目的地是否有異常
    
f.歸檔成功的最小個數(使用參數log_archive_min_succeed_dest = n)
alter system set log_archive_min_succeed_dest = 2;   --缺省為1
聯機重做日誌組能夠被覆蓋的前提
    所有強制路徑歸檔位置成功實現歸檔
    歸檔目的地的成功歸檔的個數大於或等於上述參數設定的值
    當強制個數大於該參數設定的個數,則以強制個數為準
    當強制個數小於該參數設定的個數,則可選的成功歸檔路徑加上強制的歸檔路徑個數至少等於該參數設定值

g.控制歸檔的可用性(使用參數log_archive_dest_state_n)
alter system set log_archive_dest_state_1 = enable | defer
enable  -->缺省狀態,可以在該歸檔位置進行歸檔
defer   -->禁用該歸檔位置

h.演示歸檔路徑配置及查看歸檔進程,歸檔位置狀態
SQL> ARCHIVE LOG LIST;         --查看日誌是否處於歸檔狀態
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     24
Next log sequence to archive   26
Current log sequence           26

SQL> ho ps -ef | grep ora_arc    --查看歸檔進程是否已啟動
oracle    4062     1  0 11:43 ?        00:00:00 ora_arc0_orcl
oracle    4064     1  0 11:43 ?        00:00:00 ora_arc1_orcl

SQL> SHOW PARAMETER ARCHIVE  --查看歸檔路徑是否已設置,為空值表示未設置

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
archive_lag_target                   integer     0
log_archive_config                   string
log_archive_dest                     string
log_archive_dest_1                   string
log_archive_dest_10                  string
log_archive_dest_2                   string
log_archive_dest_3                   string
log_archive_dest_4                   string
log_archive_dest_5                   string
log_archive_dest_6                   string
log_archive_dest_7                   string
log_archive_dest_8                   string
log_archive_dest_9                   string
log_archive_dest_state_1             string      enable
log_archive_dest_state_10            string      enable
log_archive_dest_state_2             string      enable
log_archive_dest_state_3             string      enable
log_archive_dest_state_4             string      enable
log_archive_dest_state_5             string      enable
log_archive_dest_state_6             string      enable
log_archive_dest_state_7             string      enable
log_archive_dest_state_8             string      enable
log_archive_dest_state_9             string      enable
log_archive_duplex_dest              string
log_archive_format                   string      %t_%s_%r.dbf
log_archive_local_first              boolean     TRUE
log_archive_max_processes            integer     2
log_archive_min_succeed_dest         integer     1
log_archive_start                    boolean     FALSE --該參數在9i中使用
log_archive_trace                    integer     0
remote_archive_enable                string      true
standby_archive_dest                 string      ?/dbs/arch


SQL> alter system set log_archive_dest = ‘/u01/app/oracle/archivelog1‘ scope = spfile;
System altered.

SQL> alter system set log_archive_duplex_dest= ‘/u01/app/oracle/archivelog2‘ scope=spfile;
System altered.

SQL> alter system set log_archive_format = ‘arch_%t_%s_%r.arc‘ scope = spfile;
--設定完畢後需要重新啟動實例,在此省略關閉啟動信息

SQL> ho ls /u01/app/oracle/archivelog1  --查看歸檔路徑下是否存在文件或文件夾
SQL> ho ls /u01/app/oracle/archivelog2  --查看歸檔路徑下是否存在文件或文件夾
SQL> alter system archive log current;  --手動進行歸檔
System altered.

SQL> ho ls -l /u01/app/oracle/archivelog1   --在指定的文件夾archivelog1已產生歸檔日誌
total 18224
-rw------- 1 oracle oinstall 18636800 Jul 28 20:39 arch_1_26_724852763.arc

SQL> ho ls -l /u01/app/oracle/archivelog2   --在指定的文件夾archivelog2已產生歸檔日誌
total 18224
-rw------- 1 oracle oinstall 18636800 Jul 28 20:39 arch_1_26_724852763.arc

SQL> ho mkdir /u01/app/oracle/archivelog3   --創建新的歸檔路徑
SQL> ho mkdir /u01/app/oracle/archivelog4   --創建新的歸檔路徑

SQL> alter system set log_archive_dest_1 = ‘location=/u01/app/oracle/archivelog3‘ cope = spfile;
System altered.

SQL> alter system set log_archive_dest_2 = ‘location=/u01/app/oracle/archivelog4‘ scope= spfile;
System altered.

SQL> shutdown immediate;       --關閉實例
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup                   --啟動實例後,收到錯誤提示表明兩種歸檔方式不兼容
ORA-16019: cannot use LOG_ARCHIVE_DEST_1 with LOG_ARCHIVE_DEST or LOG_ARCHIVE_DUPLEX_DEST

--關於上述設置導致的錯誤處理請參照:又一例SPFILE設置錯誤導致數據庫無法啟動
                                    SPFILE錯誤導致數據庫無法啟動 

--下面是正確的處理辦法,應當先將一種歸檔方式路徑置空,此處是將log_archive_dest置空
SQL> alter system set log_archive_dest = ‘‘ scope = spfile;
System altered.

--此處是將log_archive_duplex_dest置空
SQL> alter system set log_archive_duplex_dest = ‘‘ scope = spfile;
System altered.

--接下來再設定log_archive_dest_1,log_archive_dest_2
SQL> alter system set log_archive_dest_1 = ‘location=/u01/app/oracle/archivelog3‘ scope = spfile;
System altered.

SQL> alter system set log_archive_dest_2 = ‘location=/u01/app/oracle/archivelog4‘ scope = spfile;
System altered.

--由於沒有配置standby服務器,所以省略配置到遠程主機
--設定完畢後需要重新啟動實例,此時系統能正常啟動,在此省略關閉啟動信息

SQL> alter system archive log current;  --進行手動歸檔
System altered.

SQL> ho ls -l /u01/app/oracle/archivelog3/   --查看歸檔日誌
total 27752
-rw------- 1 oracle oinstall 28382208 Aug  2 13:46 arc_1_38_724852763.arc

SQL> ho ls -l /u01/app/oracle/archivelog4/   --查看歸檔日誌
total 27752
-rw------- 1 oracle oinstall 28382208 Aug  2 13:45 arc_1_38_724852763.arc   
 
SQL> col dest_name format a20;  
SQL> col destination format a30;
SQL> select dest_name,status,archiver,destination,
  2  log_sequence,reopen_secs,transmit_mode,process
  3  from v$archive_dest;    --查看歸檔目的地的相關狀態信息

DEST_NAME            STATUS    ARCHIVER   DESTINATION                    LOG_SEQUENCE REOPEN_SECS TRANSMIT_MOD PROCESS
-------------------- --------- ---------- ------------------------------ ------------ ----------- ------------ -------
LOG_ARCHIVE_DEST_1   VALID     ARCH       /u01/app/oracle/archivelog3/             38         300 SYNCHRONOUS  ARCH
LOG_ARCHIVE_DEST_2   VALID     ARCH       /u01/app/oracle/archivelog4/             38         300 SYNCHRONOUS  ARCH
LOG_ARCHIVE_DEST_3   INACTIVE  ARCH                                                 0           0 SYNCHRONOUS  ARCH
-----------------------------------------------------------------------------------------------------------------------
              
SQL> alter system set log_archive_dest_state_2 = defer;   --停用log_archive_dest_state_2
System altered.

SQL> show parameter log_archive_dest_state 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ---------------
log_archive_dest_state_1             string      enable
log_archive_dest_state_10            string      enable
log_archive_dest_state_2             string      DEFER     --該路徑顯示為defer
log_archive_dest_state_3             string      enable
log_archive_dest_state_4             string      enable
log_archive_dest_state_5             string      enable
log_archive_dest_state_6             string      enable
log_archive_dest_state_7             string      enable
log_archive_dest_state_8             string      enable
log_archive_dest_state_9             string      enable         

SQL> alter system archive log current;   --手動歸檔
System altered.

SQL> ho ls -l /u01/app/oracle/archivelog3; --可以看出archivelog3比archivelog4多出幾個歸檔文件
total 124772                               --建議將多出文件件的使用系統命令復制到archivelog4
-rw------- 1 oracle oinstall 28382208 Aug  2 13:46 arc_1_38_724852763.arc
-rw------- 1 oracle oinstall  1788416 Aug  2 20:41 arc_1_39_724852763.arc
-rw------- 1 oracle oinstall 30257664 Aug  2 22:21 arc_1_40_724852763.arc
-rw------- 1 oracle oinstall 30257664 Aug  2 22:22 arc_1_41_724852763.arc
-rw------- 1 oracle oinstall 30257664 Aug  2 22:22 arc_1_42_724852763.arc
-rw------- 1 oracle oinstall  6647296 Aug  2 22:23 arc_1_43_724852763.arc

SQL> ho ls -l /u01/app/oracle/archivelog4;
total 29504
-rw------- 1 oracle oinstall 28382208 Aug  2 13:45 arc_1_38_724852763.arc
-rw------- 1 oracle oinstall  1788416 Aug  2 20:41 arc_1_39_724852763.arc

SQL> alter system set log_archive_dest_state_2 = enable; --啟用log_archive_dest_state_2 
System altered.

SQL> alter system archive log current;   --手動歸檔
System altered.

SQL> ho ls -l /u01/app/oracle/archivelog3; --啟用後出現了相同的arc_1_44_724852763.arc文件
total 124856
-rw------- 1 oracle oinstall 28382208 Aug  2 13:46 arc_1_38_724852763.arc
-rw------- 1 oracle oinstall  1788416 Aug  2 20:41 arc_1_39_724852763.arc
-rw------- 1 oracle oinstall 30257664 Aug  2 22:21 arc_1_40_724852763.arc
-rw------- 1 oracle oinstall 30257664 Aug  2 22:22 arc_1_41_724852763.arc
-rw------- 1 oracle oinstall 30257664 Aug  2 22:22 arc_1_42_724852763.arc
-rw------- 1 oracle oinstall  6647296 Aug  2 22:23 arc_1_43_724852763.arc
-rw------- 1 oracle oinstall    81408 Aug  2 22:25 arc_1_44_724852763.arc

SQL> ho ls -l /u01/app/oracle/archivelog4;
total 29588
-rw------- 1 oracle oinstall 28382208 Aug  2 13:45 arc_1_38_724852763.arc
-rw------- 1 oracle oinstall  1788416 Aug  2 20:41 arc_1_39_724852763.arc
-rw------- 1 oracle oinstall    81408 Aug  2 22:25 arc_1_44_724852763.arc

四、歸檔日誌相關視圖

v$archived_log         -->從控制文件中獲得歸檔的相關信息
v$archive_dest         -->歸檔路徑及狀態
v$log_history          -->控制文件中日誌的歷史信息
v$database             -->查看數據庫是否處於歸檔狀態
v$archive_processes    -->歸檔相關的後臺進程信息
命令:archive log list

SQL> select  name,sequence#,registrar,standby_dest,archived,status from v$archived_log;   
  NAME                                                     SEQUENCE# REGISTR STA ARC S
------------------------------------------------------- ---------- ------- --- --- -
/u01/app/oracle/archivelog4/arc_1_38_724852763.arc              38 FGRD    NO  YES A
/u01/app/oracle/archivelog3/arc_1_39_724852763.arc              39 ARCH    NO  YES A
/u01/app/oracle/archivelog4/arc_1_39_724852763.arc              39 ARCH    NO  YES A
/u01/app/oracle/archivelog3/arc_1_40_724852763.arc              40 ARCH    NO  YES A
/u01/app/oracle/archivelog3/arc_1_41_724852763.arc              41 ARCH    NO  YES A
/u01/app/oracle/archivelog3/arc_1_42_724852763.arc              42 ARCH    NO  YES A
/u01/app/oracle/archivelog3/arc_1_43_724852763.arc              43 ARCH    NO  YES A
/u01/app/oracle/archivelog3/arc_1_44_724852763.arc              44 FGRD    NO  YES A
/u01/app/oracle/archivelog4/arc_1_44_724852763.arc              44 FGRD    NO  YES A

  

9. Oracle 歸檔日誌