Oracle Data Guard 主庫歸檔檔案刪除策略

fengpinDBA發表於2014-01-20

對於Oracle Data Guard Maximum Availability Maximum Performance 兩種模式下的主庫歸檔檔案的刪除,必須是在歸檔檔案在備庫應用以後才可以刪除。

  對於Maximum Protection 模式,這種模式的日誌是同時寫到主庫和備庫的,所以這種模式下的主庫刪除歸檔,沒有限制。 可以直接刪除。

  那麼在Maximum Availability Maximum Performance下,RMAN 備份歸檔檔案的時候,如果我們加上delete input,那麼如何確定歸檔問及愛你該不該刪除。

10g之前的版本,只能通過作業系統指令碼的方式,在刪除歸檔檔案之前,首先對Standby端資料庫的歸檔檔案應用狀態作判斷,應用之後才能在Primary端執行正常刪除。

如下為在9i中執行刪除歸檔的指令碼:

#!/bin/sh
#########################################################################
#         This shell is for primary and standby database                #
#         to rm applied archivelog that before some day ago.            #
#                                                                       #
#       You can define "some day" in variables ${day_before}            #
#            This shell can be put in crontab for auto run              #
#                                                                       #
#########################################################################
 
## load profile file
. /oracle/.bash_profile
 
## Path Define
main_path=/oracle/del_appl_arc      <
----------------部署的主路徑
bin_path=${main_path}/bin     
log_path=${main_path}/log     
arc_path=/oracle/arch     
 
cd ${bin_path}
 
## Initial script
touch app_arc_name.sh
chmod +x app_arc_name.sh
 
## rm applied archivelog that before ${day_before} day ago
day_before=1      1天前已經規定的日誌,這個變數設定為1,你可以設定成其他。  
 
## Db
 info
dbuser=test
dbpwd=test
dbsid=primary
 
########## Main shell start here ##########
## load exisit archlog list to db      sqlldr將arch檔案列表load到資料庫中。
sqlplus ${dbuser}/${dbpwd}@${dbsid}</dev/null
drop table ${dbuser}.arc_log_list;
CREATE TABLE ${dbuser}.arc_log_list (arc_name VARCHAR2(2000));
exit;
EOF
 
ls -l ${arc_path}|awk '{print $9}' |grep arc >arc_log_list.tmp
 
echo "load data">>arc_log.ctl
echo "infile 'arc_log_list.tmp'">>arc_log.ctl
echo "replace into table arc_log_list">>arc_log.ctl
echo "fields terminated by X'09'">>arc_log.ctl
echo "(arc_name)">>arc_log.ctl
 
sqlldr ${dbuser}/${dbpwd}@${dbsid} control=arc_log.ctl log=sqlldr_run.log bad=sqlldr_badfile.bad
 
### Create shell for rm applied archive that before some day ago
sqlplus -s ${dbuser}/${dbpwd}@${dbsid}</dev/null      load資料庫中的arch列表和
set feedback off         v$archived_log,找出符合條件可以刪除的arch,同時生成刪除指令碼。
set pages 0
set head off
set timing off
set echo off
spool app_arc_name.tmp
select 'rm -f '||'${arc_path}/'||arc_name from test.arc_log_list 
intersect
select 'rm -f '||name from v\$archived_log 
where DEST_ID=1 and name like '%.arc' 
and SEQUENCE# and COMPLETION_TIME<=sysdate-${day_before};
spool
exit
EOF
 
## Exec the shell in background mode
cat app_arc_name.tmp |grep -v spooling>app_arc_name.sh
./app_arc_name.sh
mv app_arc_name.sh rm_appl_arc_`date +"%Y%m%d%H%M"`.log
 
mv rm_appl_arc*.log ${log_path}
rm app_arc_name.tmp arc_log.ctl sqlldr_run.log arc_log_list.tmp

Oracle 10g 後,RMAN提供了配置歸檔檔案刪除策略:    configure archivelog deletion policy

該策略對應兩個值:

APPLIED ON STANDBY 設定為該值時,當通過附加的 DELETE INPUT 子句刪除Standby資料庫仍需要的日誌時,會提示RMAN-08137錯誤。不過仍然可以手動地通過 DELETE ARCHIVELOG 方式刪除。

NONE 設定為該值時,則不啟用歸檔檔案的刪除策略。預設情況下就是NONE

  

我們配置一下:

RMAN> configure archivelog deletion policy to applied on standby;

   

old RMAN configuration parameters:

CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;

new RMAN configuration parameters:

CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;

new RMAN configuration parameters are successfully stored

RMAN-08591: WARNING: invalid archivelog deletion policy

 

這裡有個警告, 解決方法,執行如下命令:

SQL>alter system set "_log_deletion_policy"=ALL scope=spfile sid='*';

 

設定該引數以後,DB 需要重啟。

 

修改之後,我們在設定:

RMAN> configure archivelog deletion policy to applied on standby;

 

using target database control file instead of recovery catalog

old RMAN configuration parameters:

CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;

new RMAN configuration parameters:

CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;

new RMAN configuration parameters are successfully stored

 

RMAN> configure archivelog deletion policy to none;

 

old RMAN configuration parameters:

CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;

new RMAN configuration parameters:

CONFIGURE ARCHIVELOG DELETION POLICY TO NONE;

new RMAN configuration parameters are successfully stored

 

修改之後成功修改RMAN 的歸檔檔案刪除策略。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29339097/viewspace-1073327/,如需轉載,請註明出處,否則將追究法律責任。

相關文章