NID to fix RMAN-20035: invalid high recid

For errors like:

RMAN-03014: implicit resync of recovery catalog failed
RMAN-06004: ORACLE error from recovery catalog database: RMAN-20035: invalid high recid

You can switch the catalog over to a previous incarnation (before an open resetlogs):

RMAN> list incarnation of database <database name>;
RMAN> reset database to incarnation <incarnation number>;

But that is only valid where you want to go back in time to have the catalog work with an old incarnation. If you have mutiple copies of the same database, and want them all registered in the same rman catalog, you have to give the copies different DBIDs, usng the Nid utility:

SQL> shutdown immediate
SQL> startup mount
$ nid target=sys/password@testdb

(you don’t need to use a connect string here, but if you do, a remote login passwordfile is required)

SQL> shutdown immediate

(at least for 9i, is handled automatically with 10g according to documentation)

SQL> startup mount
SQL> alter database open resetlogs;
$ rman target / catalog=rman/password@catdb
RMAN> register database;

Nid comes with release 9iR2 and above, but can be run against older databases (at least with 8174 64 bit on Solaris), provided you use the connect string syntax with a remote login password file. It is

$ORACLE_HOME/bin/nid

. You have to set your full environment to the new (9iR2 or later) ORACLE_HOME before running nid that way – can use . oraenv naming a dummy (non existant) database and then typing in the new ORACLE_HOME when prompted.

Reference: Metalink Note:224266.1 or Utilities doc

January 16, 2007

  • I have the RMAN-03014, 06004, and 20035 errors. Do you think the above solution would work on an Oracle 10 database? I know that Oracle 10 will not let you do an alter database open resetlogs on a perfectly good database. Unless the nid takes care of that. I will try this in a test environment.

  • Leave a Reply

    Your email address will not be published. Required fields are marked *