常常混淆RMAN中EXPIRED和OBSOLETE两个状态,其实如果理解了两者是如何产生的,区别也就出来了。
对于EXPIRED状态的产生,与crosscheck命令是密切相关的,RMAN通过crosscheck命令检查备份是否存在于备份介质上,如果不存在,则状态由AVAILABLE改为EXPIRED。
例如这里将控制文件的备份删除,再使用crosscheck进行检查,该备份的状态由AVAILABLE改为EXPIRED:
RMAN> list backup of controlfile;
备份集列表
===================
BS 关键字 类型 LV 大小 设备类型 经过时间 完成时间
------- ---- -- ---------- ----------- ------------ ----------
246 Full 6.77M DISK 00:00:01 17-8月 -09
BP 关键字: 248 状态: AVAILABLE 已压缩: NO 标记: CONTROLFILE_BACKUP
段名:D:\RMAN_BACKUP\CF_ORCL_20090817_5_1
包括的控制文件: Ckp SCN: 1321122 Ckp 时间: 17-8月 -09
RMAN> host "del D:\RMAN_BACKUP\CF_ORCL_20090817_5_1";
主机命令完成
RMAN> list backup of controlfile;
备份集列表
===================
BS 关键字 类型 LV 大小 设备类型 经过时间 完成时间
------- ---- -- ---------- ----------- ------------ ----------
246 Full 6.77M DISK 00:00:01 17-8月 -09
BP 关键字: 248 状态: AVAILABLE 已压缩: NO 标记: CONTROLFILE_BACKUP
段名:D:\RMAN_BACKUP\CF_ORCL_20090817_5_1
包括的控制文件: Ckp SCN: 1321122 Ckp 时间: 17-8月 -09
RMAN> crosscheck backup of controlfile;
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=154 devtype=DISK
交叉校验备份段: 找到为 'EXPIRED'
备份段 handle=D:\RMAN_BACKUP\CF_ORCL_20090817_5_1 recid=5 stamp=695159773
已交叉检验的 1 对象
RMAN> list backup of controlfile;
备份集列表
===================
BS 关键字 类型 LV 大小 设备类型 经过时间 完成时间
------- ---- -- ---------- ----------- ------------ ----------
246 Full 6.77M DISK 00:00:01 17-8月 -09
BP 关键字: 248 状态: EXPIRED 已压缩: NO 标记: CONTROLFILE_BACKUP
段名:D:\RMAN_BACKUP\CF_ORCL_20090817_5_1
包括的控制文件: Ckp SCN: 1321122 Ckp 时间: 17-8月 -09 |
可以用delete (noprompt) expired backup of controlfile来删除catalog中expired的备份信息:
RMAN> delete expired backup of controlfile;
使用通道 ORA_DISK_1
备份段列表
BP 关键字 BS 关键字 Pc# Cp# 状态 设备类型段名称
------- ------- --- --- ----------- ----------- ----------
248 246 1 1 EXPIRED DISK D:\RMAN_BACKUP\CF_ORCL_20090817_5_1
是否确定要删除以上对象 (输入 YES 或 NO)? NO
RMAN> delete noprompt expired backup of controlfile;
使用通道 ORA_DISK_1
备份段列表
BP 关键字 BS 关键字 Pc# Cp# 状态 设备类型段名称
------- ------- --- --- ----------- ----------- ----------
248 246 1 1 EXPIRED DISK D:\RMAN_BACKUP\CF_ORCL_20090817_5_1
已删除备份段
备份段 handle=D:\RMAN_BACKUP\CF_ORCL_20090817_5_1 recid=5 stamp=695159773
1 EXPIRED 对象已删除 |
crosscheck还常使用于:在手工删除归档日志后,使用crosscheck进行检查,再删除expired状态的归档信息。
对于obsolete状态,是针对MAN备份保留策略来说的,超过了这个保留策略的备份,会被标记为obsolete,但其状态依旧为AVAILABLE,我们可以使用report obsolete来查看已废弃的备份。
例如这里,冗余数为1,有两个控制文件的备份,较早的一个备份,就会被标记为obsolete:
RMAN> show RETENTION POLICY;
RMAN 配置参数为:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
RMAN> list backup;
备份集列表
===================
BS 关键字 类型 LV 大小 设备类型 经过时间 完成时间
------- ---- -- ---------- ----------- ------------ ----------
85 Full 6.77M DISK 00:00:02 17-8月 -09
BP 关键字: 87 状态: AVAILABLE 已压缩: NO 标记: CONTROLFILE_BACKUP
段名:D:\RMAN_BACKUP\CF_ORCL_20090817_3_1
包括的控制文件: Ckp SCN: 1314053 Ckp 时间: 17-8月 -09
BS 关键字 类型 LV 大小 设备类型 经过时间 完成时间
------- ---- -- ---------- ----------- ------------ ----------
112 Full 6.77M DISK 00:00:01 17-8月 -09
BP 关键字: 114 状态: AVAILABLE 已压缩: NO 标记: CONTROLFILE_BACKUP
段名:D:\RMAN_BACKUP\CF_ORCL_20090817_4_1
包括的控制文件: Ckp SCN: 1314118 Ckp 时间: 17-8月 -09
RMAN> report obsolete;
RMAN 保留策略将应用于该命令
将 RMAN 保留策略设置为冗余 1
已废弃的备份和副本报表
类型 关键字 完成时间 文件名/句柄
-------------------- ------ ------------------ --------------------
备份集 85 17-8月 -09
备份段 87 17-8月 -09 D:\RMAN_BACKUP\CF_ORCL_20090817_3_1 |
要真正地删除废弃的备份,可以使用delete noprompt obsolete命令(noprompt是指无需确认):
RMAN> delete noprompt obsolete;
RMAN 保留策略将应用于该命令
将 RMAN 保留策略设置为冗余 1
使用通道 ORA_DISK_1
删除以下已废弃的备份和副本:
类型 关键字 完成时间 文件名/句柄
-------------------- ------ ------------------ --------------------
备份集 85 17-8月 -09
备份段 87 17-8月 -09 D:\RMAN_BACKUP\CF_ORCL_20090817_3_1
已删除备份段
备份段 handle=D:\RMAN_BACKUP\CF_ORCL_20090817_3_1 recid=3 stamp=695147926
1 对象已删除
RMAN> report obsolete;
RMAN 保留策略将应用于该命令
将 RMAN 保留策略设置为冗余 1
未找到已废弃的备份
RMAN> list backup;
备份集列表
===================
BS 关键字 类型 LV 大小 设备类型 经过时间 完成时间
------- ---- -- ---------- ----------- ------------ ----------
112 Full 6.77M DISK 00:00:01 17-8月 -09
BP 关键字: 114 状态: AVAILABLE 已压缩: NO 标记: CONTROLFILE_BACKUP
段名:D:\RMAN_BACKUP\CF_ORCL_20090817_4_1
包括的控制文件: Ckp SCN: 1314118 Ckp 时间: 17-8月 -09 |