linux rman删除备份,无法删除RMAN过期备份

当尝试使用RMAN删除过期备份时,可能会遇到由于保留策略导致的错误。解决方法包括:1) 不推荐的重建控制文件,因代价大且可能影响生产;2) 使用RMAN的change命令将备份集状态改为unavailable,但过程缓慢;3) 利用dbms_backup_restore包的deleteBackupPiece过程直接删除,需要指定相关参数并从v$backup_piece获取信息。此方法更为直接有效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RMAN> report obsolete

直接delete会报这个错误:

RMAN> delete obsolete;

RMAN 保留策略将应用于该命令

将 RMAN 保留策略设置为冗余 1

分配的通道: ORA_DISK_1

通道 ORA_DISK_1: sid=136 devtype=DISK

释放的通道: ORA_DISK_1

crosscheck也不行

RMAN> crosscheck backup;

a分配的通道: ORA_DISK_1

通道 ORA_DISK_1: sid=136 devtype=DISK

释放的通道: ORA_DISK_1

解决方式:

1、重建控制文件。

绝对好使,但是代价较大,不仅之前备份统统无效,而且还需要停数据库服务,由于要操作的是一台较重要的生产服务器,因此这种方法不可行。

2、通过rman命令手工将备份集状态置为unavailable。

RMAN提供了一个change命令,可以修改备份集状态为AVAILABLE/UNAVAILABLE/UNCATALOG等等。手工使用该命令将所有不可访问的备份集置为unavailable,修改完状态后等待控制文件自动更新覆盖失效记录即可。这种方式最大的问题是见效太慢。

注意,nocatalog模式才能使用这种方式。

3、借助dbms_backup_restore包直接删除备份片段。通过dbms_backup_restore.deleteBackupPiece过程删除无法访问的备份集。

dbms_backup_restore.deleteBackupPiece的定义如下:

前6项参数都需要我们指定,这些参数的参数值可以从v$backup_piece中获得。

SQL> select recid,stamp,set_stamp,set_count,handle,piece# from v$backup_piece;

RECID      STAMP SET_STAMP SET_COUNT HANDLE                             PIECE#

---------- ---------- ---------- ---------- ------------------------------ ----------

11301 674167385 674167385      11411 c-1984618042-20081222-00                1

11304 674168006 674168005      11414 c-1984618042-20081222-01                1

11306 674168089 674168089      11416 c-1984618042-20081222-02                1

11312 674253707 674253707      11422 c-1984618042-20081223-00                1

11315 674254316 674254315      11425 c-1984618042-20081223-01                1

11317 674254397 674254397      11427 c-1984618042-20081223-02                1

执行删除RMAN过期备份

SQL> DECLARE

devtype varchar2(256);

BEGIN

devtype:=dbms_backup_restore.deviceAllocate (type=>'',ident=>'t1');

dbms_backup_restore.deleteBackupPiece(recid => 11301,stamp => 674167385,handle => 'c-1984618042-20081222-00',set_stamp => 674167385 ,set_count => 11411 ,pieceno => 1);

dbms_backup_restore.deviceDeallocate;

END;

/

SQL> select 'dbms_backup_restore.deleteBackupPiece(recid =>' || recid || ',stamp =>' || stamp || ',handle =>''' || HANDLE || ''',set_stamp =>' || SET_STAMP || ',set_count =>' || SET_COUNT || ',pieceno =>' || PIECE# || ');' sqlt

     from v$backup_piece0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值