感谢您关注“数据库运维之道”公众号,分享数据库运维技术!
本期将为大家分享“自动清理过期备份文件报RMAN-06207和RMAN-06214错误”的案例。
关键词:RMAN-06207、RMAN-06208、RMAN-06214

今天给客户的Oracle 10g 生产环境做一次健康检查,从备份日志中看到一个RMAN告警信息。数据库版本为10.2.0.4.0。错误信息如下所示:
--备份日志中记录的告警信息RMAN-06207: WARNING: 227 objects could not be deleted for DISK channel(s) dueRMAN-06208: to mismatched status. Use CROSSCHECK command to fix statusRMAN-06210: List of Mismatched objectsRMAN-06211: ==========================RMAN-06212: Object Type Filename/HandleRMAN-06213: --------------- ---------------------------------------------------RMAN-06214: Datafile Copy home/oracle/stand.bakRMAN-06214: Datafile Copy backup/orclstandby.ctlRMAN-06214: Backup Piece backup/contrl_ORCL_20230720_24696_1RMAN-06214: Backup Piece backup/dbfull_ORCL_20230721_24699_1_2.bakRMAN-06214: Backup Piece /backup/dbfull_ORCL_20230721_24700_1_2.bak

1、运用以下脚本检查数据库备份情况,可以从v$rman_backup_job_details视图查看到备份状态为“COMPLETED WITH WARNINGS”。接着对备份日志进一步核实,看到的错误信息如上述所示。
cat check_backup.sh#!/bin/bashsource /home/oracle/.bash_profileps -ef|grep ora_|grep pmon|awk '{print$8}'for inst_id in `ps -ef|grep ora_|grep pmon|awk '{print$8}'|sed -e 's/ora_pmon_//'|grep -v "sed"`doecho "export ORACLE_SID=$inst_id"export ORACLE_SID=$inst_idsqlplus -s / as sysdba <<-EOFset pagesize 999set linesize 1000col input_type for a10col status for a25col time_taken_display for a10col input_bytes_display for a10col output_bytes_display for a10col start_time for a20col end_time for a20select input_type,status,to_char(start_time,'yyyy-mm-dd hh24:mi:ss') start_time,to_char(end_time,'yyyy-mm-dd hh24:mi:ss') end_time,input_bytes_display,output_bytes_display,time_taken_display,compression_ratiofrom v\$rman_backup_job_detailsorder by 3 desc;EOFdone

2、尝试手工执行delete obsolete命令来清理,依旧会出现RMAN错误,备份文件类型为Datafile Copy和Backup Piece。通过ls命令查看备份文件确实已不存在。
RMAN-06214: Datafile Copy /backup/orclstandby.ctlRMAN-06214: Backup Piece /backup/contrl_ORCL_20230720_24696_1

手工做一次crosscheck交叉检查,然后再执行delete obsolete命令完成清理。
--Backup PieceRMAN> crosscheck copy;--Backup PieceRMAN> crosscheck backuppiece '/backup/contrl_ORCL_20230720_24696_1';using channel ORA_DISK_1crosschecked backup piece: found to be 'EXPIRED'backup piece handle=/backup/contrl_ORCL_20230720_24696_1 recid=21806 stamp=1142986726Crosschecked 1 objects
检查备份日志,未发现RMAN告警信息,问题得到解决。初步判断是工程师手动做了一次全备用于部署DataGuard后未及时清理导致。

推荐阅读一:crosscheck常用命令
使用crosscheck命令交叉校验备份文件,以确保rman元数据与备份文件保持同步。当执行该命令时,如果rman元数据记录的状态与实际备份文件不匹配,则会更新元数据里的状态使其与实际备份文件状态一致;若备份文件处于expired状态,那么说明该备份文件已失效,可以删除。
1.crosscheck backup;--核对所有备份(包括有效和无效的)--用于核对数据库,表空间,数据文件,控制文件,归档日志,spfile备份集CROSSCHECK BACKUP of database;CROSSCHECK BACKUP of tablespace system;CROSSCHECK BACKUP of datafile 1;CROSSCHECK BACKUP of controlfile;CROSSCHECK BACKUP of archivelog all;CROSSCHECK BACKUP of spfile;2.CROSSCHECK BACKUPPIECE--用于核对特定备份片,该命令需要制定备份片的BP值或备份片名称;CROSSCHECK BACKUPPIECE 24;CROSSCHECK BACKUPPIECE '/backup/contrl_ORCL_20230720_24696_1';3.CROSSCHECK BACKUPSET--用于核对特定的备份集,该命令需要制定备份集的BP值;CROSSCHECK BACKUPSET 24;4.CROSSCHECK COPY--用于核对数据库、表空间、数据文件、控制文件、归档文件的映像副本(即备份是用COPY DATAFILE ...... 或BACKUP AS COPY ......DATAFILE......命令备份数据文件的映像)CROSSCHECK COPY;CROSSCHECK COPY of database;
推荐阅读二:delete常用命令
使用delete命令用于删除RMAN备份记录以及相应的物理备份文件。
--删除EXPIRED文件CROSSCHECK BACKUPSET OF TABLESPACE usersDEVICE TYPE sbt COMPLETED BEFORE 'SYSDATE-31';DELETE NOPROMPT EXPIRED BACKUPSET OF TABLESPACE usersDEVICE TYPE sbt COMPLETED BEFORE 'SYSDATE-31';--删除到期文件DELETE NOPROMPT OBSOLETE RECOVERY WINDOW OF 7 DAYS;--删除已经备份过的归文件CONFIGURE DEFAULT DEVICE TYPE TO sbt;CONFIGURE ARCHIVELOG DELETION POLICY TOBACKED UP 2 TIMESTO DEVICE TYPE sbt;--删除所有归档文件或几天前DELETE ARCHIVELOG ALL;delete archivelog all completed before 'sysdate-1';--删除备份片DELETE NOPROMPT BACKUPSET TAG weekly_bkup;DELETE FORCE NOPROMPT BACKUPSET TAG weekly_bkup;

RMAN-06207 and RMAN-06208 deleting RMAN backups (Doc ID 290559.1)
https://docs.oracle.com/cd/E11882_01/backup.112/e10643/rcmsynta015.htm#RCMRF119
https://docs.oracle.com/cd/E11882_01/backup.112/e10643/rcmsynta016.htm#i81315
以上就是本期关于“自动清理过期备份文件报RMAN-06207和RMAN-06214错误”的处置案例。希望能给大家带来帮助。
欢迎关注“数据库运维之道”公众号,一起学习数据库技术!






