rman 备份失败 【RMAN-03002、RMAN-06059】之后优化备份
环境:
centos 6.5 X64
Oracle 11g Enterprise Edition Release 11.2.0.2.0
故障现象:
rman自动备份脚本失败,报错现象:
Starting backup at 30-JUL-15
current log archived
released channel: disk1
released channel: disk2
released channel: disk3
released channel: disk4
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of backup command at 07/30/2015 23:00:27
RMAN-06059: expected archived log not found, loss of archived log compromises recoverability
ORA-19625: error identifying file /data0/oracle/database/archive/1_985092_843387931.arc
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
Recovery Manager complete
从报错现象上看,是因为归档日志 985092 文件被删除了。
分析主要原因是因为此数据库为dataguard 架构,同事做了v$archived max(SEQUENCE#)-500保留归档而且是每小时执行一次删除归档日志。因为晚上11点整点开始备份,也就说当整点rman开始执行run{}并分配通道后已经是23:04以后了,但是删除脚本已经在整点23:00已经执行。 这个时候rman archive backup 脚本执行 input archived log thread=1 sequence=985092 文件时发现文件不存在。导致rman 归档备份失败。
查看时间:
SQL> SELECT APPLIED,to_char(FIRST_TIME, 'yyyy-mm-dd hh34:mi:ss') as FIRST_TIME,
2 to_char(NEXT_TIME, 'yyyy-mm-dd hh34:mi:ss') as NEXT_TIME
3 from V$ARCHIVED_LOG
4 where SEQUENCE#= 985092;
APPLIED FIRST_TIME NEXT_TIME
--------- ------------------- -------------------
YES 2015-07-30 16:03:06 2015-07-30 16:03:12
NO 2015-07-30 16:03:06 2015-07-30 16:03:12
处理俩种方法:
1、综合考虑服务器硬盘存储空间【言外之意就是数据库要保留一天的归档日志】,取消自动删除归档日志脚本。让rman 做归档备份完成之后自动删除归档日志。
2、修改rman 归档备份时间和备份脚本,如:23:10开始备份。
如:
RUN {
allocate channel disk1 type disk maxpiecesize 4000M;
allocate channel disk2 type disk maxpiecesize 4000M;
sql 'alter system archive log current';
backup archivelog all delete input format '/opt/oracle/backup/arch_backup/archbackup/%d_arch_%s_%p_%h.arh' filesperset = 50;
# Control file backup
backup as compressed backupset format '/opt/oracle/backup/arch_backup/archbackup/CF_%t_%s_%p_D%T.ctl' current controlfile;
}
如果空间够用,就推荐使用第二种,这样数据可用范围大。