oracle數據庫的歸檔日誌的簡要學習記錄

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

(1)非歸檔模式和歸檔模式的切換方法:

1.非歸檔到歸檔模式
a.一致性關閉數據庫(shutdown [immediate | transactional |normal])
b.啓動到mount階段(startup mount)
c.切換到歸檔模式(alter database archivelog  [manual])
d.切換到open階段(alter database open)
e.對數據做一個完整備份(full backup)


2.歸檔模式切換到非歸檔模式
a.一致性關閉數據庫(shutdown [immediate | transactional |normal])
b.啓動到mount階段(startup mount)
c.切換到歸檔模式(alter database noarchivelog  )
d.切換到open階段(alter database open)
e.對數據做一個完整備份(full backup)

(2)歸檔進程的調整

 通過設置LOG_ARCHIVE_MAX_PROCESSES 參數,可以指定數據庫規定所需初始化的進程數,缺省的歸檔進程數爲2,一般情況下不需要修改該參數,Oracle會根據歸檔情況自動啓動額外的歸檔進程。也可以動態的增加或減少歸檔進程數,比如有些業務在月底需要進行大量歸檔,平時則歸檔較少,對此可以動態修改,修改方法如下:

ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=3;

(3)歸檔位置的配置方法

在ORACLE10g和11g版本,ORACLE默認的日誌歸檔路徑爲閃回恢復區($ORACLE_BASE/flash_recovery_area)。對於這個路徑,ORACLE有一個限制,就是默認只有2G的空間,而且不只是歸檔日誌的默認路徑,也是備份文件和閃回日誌的默認地址,這樣的話歸檔日誌所使用的空間就達不到2G,在沒有設置好這個路徑大小的情況下,很多系統都遇到過歸檔日誌滿而無法歸檔導致數據庫夯住的問題,可以使用下面的SQL語句去查看歸檔信息。

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

查看歸檔路徑是否已經設置

查看歸檔路徑是否已設置,爲空值表示未設置。
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

設置歸檔路徑位置的配置方法

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 參數
    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'

c.兩種歸檔方法異同(前者log_archive_dest、log_archive_duplex_dest ,後者log_archive_dest_n)
    前者最多配置兩個歸檔位置,後者可以配置多個歸檔位置;
    兩者互不兼容,要麼使用前者,要麼使用後者;
    使用後者歸檔到本地時需要增加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.控制歸檔的可用性(使用參數log_archive_dest_state_n)
     alter system set log_archive_dest_state_1 = enable | defer
     enable  -->缺省狀態,可以在該歸檔位置進行歸檔
     defer   -->禁用該歸檔位置

歸檔路徑配置及查看歸檔進程,歸檔位置狀態案例如下:

查看日誌是否處於歸檔狀態
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


設置歸檔路徑(2個)
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;

靜態參數,需要重新啓動數據庫才生效,設定完畢後需要重新啓動實例。


啓動實例後,手動切換一個日誌,查看歸檔日誌的信息
alter system switch logfile;

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


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

重新配置歸檔路徑的位置
SQL> alter system set log_archive_dest_1 = 'location=/u01/app/oracle/archivelog3' scope = spfile;

關閉實例
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

正確的處理辦法,應當先將一種歸檔方式路徑置空,此處是將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
SQL> alter system set log_archive_dest_1 = 'location=/u01/app/oracle/archivelog3' scope = spfile;

System altered.

設定完畢後需要重新啓動實例,此時系統能正常啓動。


查看歸檔目的地的相關狀態信息
set line 300
col dest_name format a20
col destination format a30
select dest_name,status,archiver,destination,log_sequence,reopen_secs,transmit_mode,process from v$archive_dest where status='VALID';


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


set line 500
col name format a80
Select  name,sequence#,registrar,standby_dest,archived,status from v$archived_log; 

 (4)查看每天歸檔日誌的大小和個數等情況

set line 200 pagesize 9999 long 5000
column thread# format 999999 heading 'Thread#'
column day   format a10     heading 'Day/Time'
column H00   format 999     heading '00'
column H01   format 999     heading '01'
column H02   format 999     heading '02'
column H03   format 999     heading '03'
column H04   format 999     heading '04'
column H05   format 999     heading '05'
column H06   format 999     heading '06'
column H07   format 999     heading '07'
column H08   format 999     heading '08'
column H09   format 999     heading '09'
column H10   format 999     heading '10'
column H11   format 999     heading '11'
column H12   format 999     heading '12'
column H13   format 999     heading '13'
column H14   format 999     heading '14'
column H15   format 999     heading '15'
column H16   format 999     heading '16'
column H17   format 999     heading '17'
column H18   format 999     heading '18'
column H19   format 999     heading '19'
column H20   format 999     heading '20'
column H21   format 999     heading '21'
column H22   format 999     heading '22'
column H23   format 999     heading '23'
column total format 999,999 heading 'Total'
select thread#,to_char (first_time, 'YYYY-MM-DD') day,
         sum (decode (to_char (first_time, 'HH24'), '00', 1, 0)) H00,
         sum (decode (to_char (first_time, 'HH24'), '01', 1, 0)) H01,
         sum (decode (to_char (first_time, 'HH24'), '02', 1, 0)) H02,
         sum (decode (to_char (first_time, 'HH24'), '03', 1, 0)) H03,
         sum (decode (to_char (first_time, 'HH24'), '04', 1, 0)) H04,
         sum (decode (to_char (first_time, 'HH24'), '05', 1, 0)) H05,
         sum (decode (to_char (first_time, 'HH24'), '06', 1, 0)) H06,
         sum (decode (to_char (first_time, 'HH24'), '07', 1, 0)) H07,
         sum (decode (to_char (first_time, 'HH24'), '08', 1, 0)) H08,
         sum (decode (to_char (first_time, 'HH24'), '09', 1, 0)) H09,
         sum (decode (to_char (first_time, 'HH24'), '10', 1, 0)) H10,
         sum (decode (to_char (first_time, 'HH24'), '11', 1, 0)) H11,
         sum (decode (to_char (first_time, 'HH24'), '12', 1, 0)) H12,
         sum (decode (to_char (first_time, 'HH24'), '13', 1, 0)) H13,
         sum (decode (to_char (first_time, 'HH24'), '14', 1, 0)) H14,
         sum (decode (to_char (first_time, 'HH24'), '15', 1, 0)) H15,
         sum (decode (to_char (first_time, 'HH24'), '16', 1, 0)) H16,
         sum (decode (to_char (first_time, 'HH24'), '17', 1, 0)) H17,
         sum (decode (to_char (first_time, 'HH24'), '18', 1, 0)) H18,
         sum (decode (to_char (first_time, 'HH24'), '19', 1, 0)) H19,
         sum (decode (to_char (first_time, 'HH24'), '20', 1, 0)) H20,
         sum (decode (to_char (first_time, 'HH24'), '21', 1, 0)) H21,
         sum (decode (to_char (first_time, 'HH24'), '22', 1, 0)) H22,
         sum (decode (to_char (first_time, 'HH24'), '23', 1, 0)) H23,
         count (*) total
    from v$log_history a
   where first_time >= sysdate - 30
group by thread#,to_char (first_time, 'YYYY-MM-DD')
order by thread#,to_char (first_time, 'YYYY-MM-DD');

(5)查看備份集中的日誌文件信息

select bs.recid bs_key,
         decode (backup_type,'L', 'Archived Redo Logs','D', 'Datafile Full Backup','I', 'Incremental Backup') backup_type,
         device_type,
         decode (bs.controlfile_included, 'NO', '-', bs.controlfile_included) controlfile_included,
         nvl (sp.spfile_included, '-') spfile_included,
         bs.incremental_level,
         bs.pieces,
         to_char (bs.start_time, 'YYYY-MM-DD HH24:MI:SS') start_time,
         to_char (bs.completion_time, 'YYYY-MM-DD HH24:MI:SS') completion_time,
         bs.elapsed_seconds,
         bp.tag,
         bs.block_size,
         bs.keep,
         to_char (bs.keep_until, 'YYYY-MM-DD HH24:MI:SS') keep_until,
         bs.keep_options
    from v$backup_set bs,
         (select distinct set_stamp,
                          set_count,
                          tag,
                          device_type
            from v$backup_piece
           where status in ('A', 'X')) bp,
         (select distinct set_stamp, set_count, 'YES' spfile_included
            from v$backup_spfile) sp
   where     bs.set_stamp = bp.set_stamp
         and bs.set_count = bp.set_count
         and bs.set_stamp = sp.set_stamp(+)
         and bs.set_count = sp.set_count(+)
         and sysdate - bs.start_time <= 30
order by bs.recid;

(6)歸檔日誌的刪除

查看歸檔日誌列表
list archivelog all; 
列出所有失效的歸檔日誌
list expired archivelog all;
校驗日誌的可用性
crosscheck archivelog all;
刪除log sequence20480之前的所有歸檔日誌
delete noprompt archivelog until sequence 20480;
刪除一天前的所有歸檔日誌文件
delete noprompt archivelog all completed before 'sysdate-2';
刪除系統時間7天以前的歸檔日誌
delete noprompt archivelog all completed before 'sysdate-7';    
刪除所有的歸檔日誌
delete noprompt archivelog all;

(7)data guard環境下歸檔日誌刪除可能出現的問題和解決方法

如果是dg 主備,在主庫上定期刪除歸檔會報如下錯誤:
RMAN-08120: WARNING: archived log not deleted, not yet applied by standby

第一,查看主庫和備庫現在應用日誌的情況,得到應用的日誌序列號

查看主庫應用日誌信息:
SYS@testdb> select GROUP# ,THREAD# , SEQUENCE#  from v$log;
    GROUP#    THREAD#  SEQUENCE#
---------- ---------- ----------
         1	    1	   20507
         2	    1	   20508
         3	    1	   20509
         5	    1	   20510
         6	    1	   20511


查看備庫的應用情況:
select THREAD# , SEQUENCE#,APPLIED  from v$archived_log;

第二,修改主庫的rman配置參數:
默認的參數如下:
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;

修改爲:
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE;

第三:執行刪除歸檔文件命令:
校驗日誌的可用性
crosscheck archivelog all;

刪除log sequence33535之前的所有歸檔日誌;
序列號可以由上面查詢到的數據減去8到10個左右
delete noprompt archivelog until sequence 33535;
如果加上force參數,不需要前面的第一二步驟的設置即可執行刪除歸檔的操作。
delete force noprompt archivelog until sequence 33535;     
或者指定線程號進行歸檔日誌的刪除
delete force noprompt archivelog until sequence 33535thread 1;  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章