今天搭建ADG环境时,在restore数据文件环节,给数据库文件的重命名错误,导致产生了两个相同的数据文件名,因此在恢复时产生生了报错,下面是我的处理思路:
查看恢复报错日志,定位是哪个数据文件出现了异常:
channel c3: restoring datafile 00039 to +DATA/crmdb/system02.dbf
channel c3: restoring datafile 00043 to +DATA/crmdb/hswealth_data01.dbf
channel c3: reading from backup piece /home/oracle/rmanbak/db_CRMDB_20221111_0b1ciqqk_1_1
channel c4: starting datafile backup set restore
channel c4: specifying datafile(s) to restore from backup set
channel c4: restoring datafile 00018 to +DATA/crmdb/message_hindex01.dbf
channel c4: restoring datafile 00025 to +DATA/crmdb/crm_table02.dbf
channel c4: restoring datafile 00034 to +DATA/crmdb/fund_table06.dbf
channel c4: restoring datafile 00038 to +DATA/crmdb/fund_index04.dbf
channel c4: reading from backup piece /home/oracle/rmanbak/db_CRMDB_20221111_0c1ciqqk_1_1
channel c2: ORA-19870: error while restoring backup piece /backup/rmanbak/db_CRMDB_20221111_0e1ciqtt_1_1
ORA-19504: failed to create file "+DATA/crmdb/fund_table04.dbf"
ORA-17502: ksfdcre:4 Failed to create file +DATA/crmdb/fund_table04.dbf
ORA-15005: name "crmdb/fund_table04.dbf" is already used by an existing alias
....
failover to previous backup
released channel: c1
released channel: c2
released channel: c3
released channel: c4
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 11/11/2022 18:17:48
RMAN-06026: some targets not found - aborting restore
RMAN-06100: no channel to restore a backup or copy of datafile 42
RMAN-06100: no channel to restore a backup or copy of datafile 37
RMAN-06100: no channel to restore a backup or copy of datafile 33
RMAN-06100: no channel to restore a backup or copy of datafile 16
已经数据文件‘+DATA/crmdb/fund_table04.dbf’ 无法再继续创建,可知有两个重复的数据文件名,并且得知该四个数据文件都没有恢复成功。
先通过查看restore脚本cat restore.sh | grep 04 发现确实有两句相同的sql。
已经恢复失败的数据文件的名字,现在去定位该数据文件在哪个备份片当中:
RMAN> list backupset;
BS Key Type LV Size
------- ---- -- ----------
13277 Full 813.16M
List of Datafiles in backup set 13277
File LV Type Ckp SCN Ckp Time Name
---- -- ---- ---------- --------- ----
16 Full 14961414035 11-NOV-22 +DATADG/crmdb/datafile/fund_index.308.1039080835
33 Full 14961414035 11-NOV-22 +DATADG/crmdb/datafile/fund_table.332.1039093283
37 Full 14961414035 11-NOV-22 +DATADG/crmdb/datafile/fund_index.336.1039093313
42 Full 14961414035 11-NOV-22 +DATADG/crmdb/datafile/undotbs2.347.1039094345
Backup Set Copy #1 of backup set 13277
Device Type Elapsed Time Completion Time Compressed Tag
----------- ------------ --------------- ---------- ---
DISK 00:01:27 11-NOV-22 YES TAG20221111T170107
List of Backup Pieces for backup set 13277 Copy #1
BP Key Pc# Status Piece Name
------- --- ----------- ----------
13277 1 AVAILABLE /home/oracle/rmanbak/db_CRMDB_20221111_0e1ciqtt_1_1
Backup Set Copy #2 of backup set 13277
Device Type Elapsed Time Completion Time Compressed Tag
----------- ------------ --------------- ---------- ---
DISK 00:01:27 11-NOV-22 YES TAG20221111T170107
List of Backup Pieces for backup set 13277 Copy #2
BP Key Pc# Status Piece Name
------- --- ----------- ----------
13295 1 AVAILABLE /backup/rmanbak/db_CRMDB_20221111_0e1ciqtt_1_1
此时定位完毕,从恢复脚本中找到这四个数据文件相关的语句,进行重新恢复:
RMAN >
run {
2> set newname for datafile 33 to '+DATA/crmdb/fund_table05.dbf';
3> set newname for datafile 16 to '+DATA/crmdb/fund_index01.dbf';
4> set newname for datafile 37 to '+DATA/crmdb/fund_index03.dbf';
5> set newname for datafile 42 to '+DATA/crmdb/undotbs2_02.dbf';
6> restore datafile 33;
7> restore datafile 16;
8> restore datafile 37;
9> restore datafile 42;
10> switch datafile all;
11> }
恢复完成后
查看alert日志发现,数据文件的路径并没有修改,因为在第一次恢复restore脚本执行的恢复失败后,并没有进行switch datafile all 的操作,因此手动执行一遍,此时控制文件中数据文件的路径都已经更新了。