This post is also available in:
You just finished a manual upgrade of your Oracle RAC from 12.2 to 19c. The database is up, processes are running — and the moment you try to manage it with srvctl, you get this:
[oracle@rac1 ~]$ srvctl status database -d orcl
PRCD-1027 : Failed to retrieve database orcl
PRCD-1229 : An attempt to access configuration of database orcl was rejected
because its version 12.2.0.1.0 differs from the program version 19.0.0.0.0.
Instead run the program from /u01/app/oracle/product/12.2.0/dbhome_1.The database is on 19c. The srvctl binary is from 19c. And yet the error tells you to run from the 12.2 home. Here’s what’s actually happening.
Root Cause
Oracle Clusterware stores metadata for all cluster resources in the OCR (Oracle Cluster Registry) — databases, instances, services, listeners. That metadata includes the ORACLE_HOME version associated with each database resource.
When you perform a manual upgrade — without DBUA — the database binaries and dictionary are updated, but the OCR entry still points to the old home (12.2). When the 19c srvctl reads the OCR, it finds a resource registered as version 12.2 and refuses to operate on it. Oracle’s rule is explicit: the srvctl version must match the version of the object being managed.
Bottom line: the database is on 19c, but the OCR still thinks it’s 12.2. The
srvctl upgrade databasecommand is what syncs that registry entry.
Quick Diagnosis
Check what the OCR currently has registered for your database:
$ORACLE_HOME/bin/srvctl config database -d orclIf the Oracle home field still points to the 12.2 path, the issue is confirmed:
Database unique name: orcl
Database name: orcl
Oracle home: /u01/app/oracle/product/12.2.0/dbhome_1 ← old version
Oracle user: oracle
...You can also check the resource version directly in Clusterware:
crsctl stat res ora.orcl.db -p | grep -i versionFix
⚠️ Run as the oracle user, not root. Running as root returns PRKH-1014 and the command fails.
/u01/app/oracle/product/19.3.0/dbhome_1/bin/srvctl upgrade database \
-d orcl \
-oraclehome /u01/app/oracle/product/19.3.0/dbhome_1Expected output on success:
PRCD-1180 : Configuration of database orcl has been upgraded to version 19.0.0.0.0Validation
srvctl config database -d orcl | grep -i homeThe Oracle home field should now show the 19c path.
srvctl status database -d orclInstance orcl1 is running on node rac1
Instance orcl2 is running on node rac2Quick Checklist
whoami
echo $ORACLE_HOME
$ORACLE_HOME/bin/srvctl upgrade database -d <db_unique_name> -oraclehome $ORACLE_HOME
srvctl config database -d <db_unique_name> | grep -i home
srvctl status database -d <db_unique_name>Edge Case: Old Home Already Removed
If you removed the 12.2 ORACLE_HOME before running srvctl upgrade database, the command may fail because the OCR attempts to validate the old home during the operation.
In this case, use srvctl modify first to update the ORACLE_HOME reference without relying on the old home:
$ORACLE_HOME/bin/srvctl modify database -d orcl -oraclehome $ORACLE_HOMEThen run the upgrade:
$ORACLE_HOME/bin/srvctl upgrade database -d orcl -oraclehome $ORACLE_HOME💡 Lesson learned: always run
srvctl upgrade databasebefore decommissioning the old Oracle Home. Skipping this step is what creates the need for the workaround above.
Note on Other Versions
PRCD-1229 is not specific to the 12.2 → 19c upgrade path. The same error appears in any manual RAC upgrade where srvctl upgrade database was not executed — including 11.2 → 12.2, 12.1 → 12.2, and 19c → 21c. The fix is always the same: sync the OCR using srvctl from the new ORACLE_HOME.
References
- Oracle Docs 19c — Tasks to Complete Only After Manually Upgrading Oracle Database
- Oracle Docs 12.2 — srvctl upgrade database
- MOS Note 1281852.1 — After manual database upgrade, srvctl commands fail with PRCD-1027, PRCD-1229
- MOS Note 2087769.1 — Not Able To Delete Or Upgrade A Cluster Resource PRCD-1231 PRKH-1013 or PRCD-1027 PRCD-1229
