SYMPTOMS
Target Database : 12.2.0.1
RMAN Catalog : 12.1.0.2
Trying to “upgrade catalog” from 12.2.0.1 RMAN and 12.1.0.2 RMAN catalog, then got following errors:
connected to target database: RACTEST (DBID=2073981615) connected to recovery catalog database PL/SQL package RMAN.DBMS_RCVCAT version 12.01.00.02. in RCVCAT database is too old RMAN> upgrade catalog; recovery catalog owner is RMAN enter UPGRADE CATALOG command again to confirm catalog upgrade RMAN> upgrade catalog; error creating init_nrsp_pdb_key RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-06004: ORACLE error from recovery catalog database: ORA-01422: exact fetch returns more than requested number of rows
CAUSES
Bug 25852885 UPGRADE CATALOG WITH 12.2 RMAN ON 12.1 DATABASE FAILS W/ ORA-1422
SOLUTION
Backup then edit the recover.bsq file under target 12.2.0.1 ORACLE_HOME/rdbms/admin to change the following lines:
define init_nrsp_pdb_key <<< declare cursor nrsp_c is select distinct nrsp.rowid rid, dbinc.db_key db_key from nrsp, dbinc where nrsp.pdb_key is null and nrsp.dbinc_key = dbinc.dbinc_key order by dbinc.db_key; prev_db_key number := 0; local_pdb_key number; begin for r in nrsp_c loop if (r.db_key <> prev_db_key) then prev_db_key := r.db_key; select pdb_key into local_pdb_key from pdb where pdb.con_id in (1, 0); end if;
TO:
define init_nrsp_pdb_key <<< declare cursor nrsp_c is select distinct nrsp.rowid rid, dbinc.db_key db_key from nrsp, dbinc where nrsp.pdb_key is null and nrsp.dbinc_key = dbinc.dbinc_key order by dbinc.db_key; prev_db_key number := 0; local_pdb_key number; begin for r in nrsp_c loop if (r.db_key <> prev_db_key) then prev_db_key := r.db_key; select pdb_key into local_pdb_key from pdb where pdb.con_id in (1, 0) and pdb.db_key = r.db_key; end if;
AND CHANGE :
define init_grsp_pdb_key <<< declare cursor grsp_c is select distinct grsp.rowid rid, dbinc.db_key db_key from grsp, dbinc where grsp.pdb_key is null and grsp.dbinc_key = dbinc.dbinc_key order by dbinc.db_key; prev_db_key number := 0; local_pdb_key number; begin for r in grsp_c loop if (r.db_key <> prev_db_key) then prev_db_key := r.db_key; select pdb_key into local_pdb_key from pdb where pdb.con_id in (1, 0); end if;
TO:
define init_grsp_pdb_key <<< declare cursor grsp_c is select distinct grsp.rowid rid, dbinc.db_key db_key from grsp, dbinc where grsp.pdb_key is null and grsp.dbinc_key = dbinc.dbinc_key order by dbinc.db_key; prev_db_key number := 0; local_pdb_key number; begin for r in grsp_c loop if (r.db_key <> prev_db_key) then prev_db_key := r.db_key; select pdb_key into local_pdb_key from pdb where pdb.con_id in (1, 0) and pdb.db_key = r.db_key; end if;
Then re-run “upgrade catalog” twice:
RMAN> upgrade catalog;
recovery catalog owner is RMAN
enter UPGRADE CATALOG command again to confirm catalog upgrade
RMAN> upgrade catalog;
PL/SQL package RMAN.DBMS_BA version 12.02.00.01 in RCVCAT database is too old
recovery catalog upgraded to version 12.02.00.01
DBMS_RCVMAN package upgraded to version 12.02.00.01
DBMS_RCVCAT package upgraded to version 12.02.00.01.
RMAN> register database;
database registered in recovery catalog
starting full resync of recovery catalog
full resync complete
Please note: As of today ( 25/09/2017), Oracle support released patch 25852885.
- It works for 12.2.0.1.0 only, because updated “recover.bsq” is included in patch ( p25852885_122010_Linux-x86-64.zip) .
- It does NOT work for 12.2.0.1.170814, because updated “recover.bsq” is not included in patch ( p25852885_12201170718DBRU_Linux-x86-64.zip).