官方文档

The term obsolete does not mean the same as expired. A backup is obsolete when REPORT OBSOLETE or DELETE OBSOLETE determines, based on the userdefined retention policy, that it is not needed for recovery.A backup is considered expired only when RMAN performs a crosscheck and cannot find the file. In short, obsolete means "not needed," whereas expired means "not found."
提一句:crosscheck操作别忘记
Rman备份中obsolete和expired的区别
obsolete:与retention policy相关,当备份或者副本根据保存策略而被丢弃的时候,就会被标记为该状态。比如你设置恢复窗口为7天,今天10号,那2号之前(包括2号)的都被认为是“过期的”。
expired:使用crosscheck对备份进行校验,当备份或者副本被存储在rman目录中,但是并没有物理存在于备份介质上时,就会被标记为该状 态;在操作系统层删除备份集后,用crosscheck 检测后就标志为X(expired)。通常指丢失(被删除)的备份。
#delete obsolete and expired backup and archivelog
run {
delete noprompt obsolete;
crosscheck archivelog all;
delete noprompt expired archivelog all;
crosscheck backup;
delete noprompt expired backup;
}
总结如下:
obsolete 指的就是超过备份策略的备份集
expired 指的是rman里面有,但是磁盘上没有的备份集,需要crosscheck一下

delete exipired

If you run CROSSCHECK, and if RMAN cannot locate the files, then it updates their records in the RMAN repository to EXPIRED status. You can then use the DELETE EXPIRED command to remove records of expired backups and copies from the RMAN repository.

delete obsolete

The RMAN DELETE command supports an OBSOLETE option, which deletes backups that are no longer needed to satisfy specified recoverability requirements. You can delete files obsolete according to the configured default retention policy, or another retention policy that you specify as an option to the DELETE OBSOLETE command. As with other forms of the DELETE command, the files deleted are removed from backup media, deleted from the recovery catalog, and marked as DELETED in the control file.

delete expired删除的是那些本来RMAN以为存在但是实际上在磁盘或者磁带上已经被删除了的信息,删除的只是RMAN资料库中的记录;delete obsolete则删除旧于备份保留策略定义的备份数据同时也更新RMAN资料库以及控制文件。
rman关于expired和obsolete的一点感触
RMAN> crosscheck backupset;

using channel ORA_DISK_1
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/home/oracle/bak/db_02nafjlu recid=1 stamp=782749376
crosschecked backup piece: found to be 'AVAILABLE'
RMAN> list backupset summary;
List of Backups
===============
Key     TY LV S Device Type Completion Time #Pieces #Copies Compressed Tag
------- -- -- - ----------- --------------- ------- ------- ---------- ---
1       B  F  X DISK        08-MAY-12       1       1       NO         TAG20120508T142252 ---X表示 expired
2       B  F  A DISK        08-MAY-12       1       1       NO         TAG20120508T142720 ---A表示available
3       B  F  A DISK        08-MAY-12       1       1       NO         TAG20120508T142720
4       B  A  A DISK        08-MAY-12       1       1       NO         TAG20120508T143323
5       B  F  A DISK        08-MAY-12       1       1       NO         TAG20120508T143341
6       B  F  A DISK        08-MAY-12       1       1       NO         TAG20120508T143343
7       B  F  A DISK        08-MAY-12       1       1       NO         TAG20120508T143543
8       B  F  A DISK        08-MAY-12       1       1       NO         TAG20120508T143543
9       B  A  A DISK        08-MAY-12       1       1       NO         TAG20120508T144127
10      B  F  A DISK        08-MAY-12       1       1       NO         TAG20120508T144130
11      B  F  A DISK        08-MAY-12       1       1       NO         TAG20120508T144132
12      B  F  A DISK        08-MAY-12       1       1       NO         TAG20120508T144215
13      B  F  A DISK        08-MAY-12       1       1       NO         TAG20120508T144215
14      B  A  A DISK        08-MAY-12       1       1       NO         TAG20120508T144701
15      B  F  A DISK        08-MAY-12       1       1       NO         TAG20120508T144704
16      B  F  A DISK        08-MAY-12       1       1       NO         TAG20120508T144706

RMAN> delete obsolete;

RMAN retention policy will be applied to the command
RMAN retention policy is set to redundancy 2
using channel ORA_DISK_1
Deleting the following obsolete backups and copies:
Type                 Key    Completion Time    Filename/Handle
-------------------- ------ ------------------ --------------------
Backup Set           1      08-MAY-12         
  Backup Piece       1      08-MAY-12          /home/oracle/bak/db_02nafjlu
Backup Set           2      08-MAY-12         
  Backup Piece       2      08-MAY-12          /home/oracle/bak/db_03nafju9
Backup Set           3      08-MAY-12         
  Backup Piece       3      08-MAY-12          /home/oracle/bak/db_04nafk96
Backup Set           4      08-MAY-12         
  Backup Piece       4      08-MAY-12          /home/oracle/bak/arch_05nafk9l_1_1
Backup Set           5      08-MAY-12         
  Backup Piece       5      08-MAY-12          /home/oracle/bak/spfile_06nafka6_1_1
Backup Set           6      08-MAY-12         
  Backup Piece       6      08-MAY-12          /home/oracle/bak/ctrl_07nafka8_1_1
Backup Set           8      08-MAY-12         
  Backup Piece       8      08-MAY-12          /home/oracle/bak/db_09nafkog
Backup Set           10     08-MAY-12         
  Backup Piece       10     08-MAY-12          /home/oracle/bak/spfile_0bnafkor_1_1
Backup Set           11     08-MAY-12         
  Backup Piece       11     08-MAY-12          /home/oracle/bak/ctrl_0cnafkos_1_1

说明:obsolete的方式 只有在进行 delete obsolete的时候 才去看看那个备份集 是否是obsolete,而不是像expired的那样,只要进行crosscheck的时候就进行检查。
错误,进行crosscheck的时候会检验备份集是否是expired,也会检验备份集是否是 obsolete,
但是expired的备份集 在list 命令中就可以显示,比如:
RMAN> list backupset;
RMAN> list expired backupset;
RMAN> list backupset summary;

List of Backups
===============
Key     TY LV S Device Type Completion Time #Pieces #Copies Compressed Tag
------- -- -- - ----------- --------------- ------- ------- ---------- ---
1       B  F  X DISK        08-MAY-12       1       1       NO         TAG20120508T142252

obsolete的备份集在list中 都是available 的状态 。
即:crosscheck会把备份集分为3个状态(EXPIRED,AVAILABLE,UNAVAILABLE),obsolete不是一个状态
若查看obsolete 的备份集,使用:
RMAN> report obsolete

但delete命令 可针对 expired 和 obsolete 的备份集。
删除expired的备份集:
RMAN> delete expired backupset;
RMAN> delete noprompt expired backupset;(不会跟用户交互,让用户确认,而是直接删除)
删除obsolete的备份集(命令中没有backupset)
RMAN> delete obsolete;
RMAN> delete noprompt obsolete; (不会跟用户交互,让用户确认,而是直接删除)