ORA-19571: archived-log recid

数据库每日Rman备份,隔几日后,Rman备份会出现备份不成功的情况,手工删除一些归档日志后,方可正常Rman备份,错误信息如下
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of backup plus archivelog command at 06/12/2012 20:29:07

RMAN-03009: failure of backup command on c2 channel at 06/12/2012 19:45:54
ORA-19571: archived-log recid 270876 stamp 783295265 not found in control file

如何避免这种每隔几天就出现的Rman备份不成功且不用手工删除归档日志的问题,解决如下

(1) 一般这种问题可以通过增加控制文件信息的保留天数来规避,例如
SQL> alter system set control_file_record_keep_time=14;

(2) 如果问题仍然存在,在不手动删除归档的情况下执行
登录RMAN后,对归档路径执行 (假设归档日志路径在 /disk1/archive)

RMAN> catalog start with '/disk1/archive';

结合当前我维护的数据库服务器,处理如下:

(1) 登录数据库执行 并提供命令输出
SQL> show parameter control_file_record_keep_time

NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
control_file_record_keep_time integer 14

(2)RMAN> show all;

RMAN configuration parameters are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 3;
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/home/oraprod/product/10.2.0/dbs/snapcf_GELCPRO.f'; # default

从执行的信息来看,应该是属于归档信息与控制文件中信息有冲突,该问题可以通过在每次备份之前执行
添加以下语句到备份脚本中,位置应该在RUN之前,对归档路径执行

catalog start with '/disk1/archive';
run {
.....

修改后的 rman backup script. 参看如下:

#!/bin/bash

cd `dirname $0`/..
. conf/define

RMAN=${ORACLE_HOME}/bin/rman
SQLPLUS=${ORACLE_HOME}/bin/sqlplus
DATE_TAG=`date +%Y%m%d`
BACKUP_LOG=${BACKUP_DB_TARGET}/db_${ORACLE_SID}_${DATE_TAG}.log
IDFILE=/tmp/full_db_backup_${ORACLE_SID}.id

/bin/touch ${IDFILE}
FLAG=`/bin/cat ${IDFILE}`

if [ -z ${FLAG} ] || [ ${FLAG} -eq 0 ] ; then
   /bin/echo "1" > ${IDFILE}
else
   if [ $# -eq 1 ] && [ $1 = "force" ] ; then
      /bin/echo "This script. is running now, but it'll start another process forced. pls check!"
   else
      /bin/echo "This script. is running, exit now. pls check!"|/usr/local/bin/email -f ${MAILFR} -s "`hostname` ${ORACLE_SID} \
                 full db backup fail" ${MAILTO}
      exit 1
   fi
fi

${RMAN} target / nocatalog msglog ${BACKUP_LOG} <crosscheck backup;
crosscheck copy;

report obsolete;
delete noprompt obsolete;

crosscheck archivelog all;
delete expired archivelog all;

# resolve ORA-19571: archived-log recid modified by liguoyin 20120613

catalog start with '/u01/oradata/gelcprod10g';

run {
  allocate channel c1 type disk;
  allocate channel c2 type disk;
  set limit channel c1 kbytes 1800000;
  set limit channel c2 kbytes 1800000;
  backup as compressed backupset format "${BACKUP_DB_TARGET}/db_${ORACLE_SID}_${DATE_TAG}_%s_%p_%t"
  database plus archivelog
  format "${BACKUP_DB_TARGET}/arch_${ORACLE_SID}_${DATE_TAG}_%s_%p_%t";
  release channel c1;
  release channel c2;
  }

sql "alter database backup controlfile to ''${BACKUP_DB_TARGET}/controlfile_${ORACLE_SID}_${DATE_TAG}.bak'' reuse";

exit

EOF

RSTAT=$?

if [ ${RSTAT} -eq 0 ] ; then
   BKSTAT=successfully
else
  BKSTAT=error
fi

/bin/echo "0" > ${IDFILE}


${SQLPLUS} /nolog <conn /as sysdba
whenever sqlerror exit failure
alter database backup controlfile to trace;
set linesize 200
set termout off
spool ${BASEDIR}/spool/tmp.sql
select '!cp -f '||c.value||'/'||upper(d.instance_name)||'_ora_'||a.spid||'.trc '||'${BACKUP_DB_TARGET}/controlfile_${ORACLE_SID}_${DATE_TAG}.sql' from v\$process a, v\$session b, v\$parameter c,v\$instance d,(select sid from v\$mystat where rownum=1) e where a.addr = b.paddr and b.sid= e.sid and c.name = 'user_dump_dest'
union all
select '!cp -f '||c.value||'/'||lower(d.instance_name)||'_ora_'||a.spid||'.trc '||'${BACKUP_DB_TARGET}/controlfile_${ORACLE_SID}_${DATE_TAG}.sql' from v\$process a, v\$session b, v\$parameter c,v\$instance d,(select sid from v\$mystat where rownum=1) e where a.addr = b.paddr and b.sid= e.sid and c.name = 'user_dump_dest';
spool off
@${BASEDIR}/spool/tmp.sql
exit
EOF


/bin/cat ${BACKUP_LOG}|/usr/local/bin/email -f ${MAILFR} -s "`hostname` ${ORACLE_SID} full db backup ${BKSTAT}" ${MAILTO}

## added to housekeep datapump rman back file.
find /u01/backup -type f -name "*.tar.gz" -mtime +31 -exec rm {} \;
 




 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24558279/viewspace-732691/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24558279/viewspace-732691/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值