This post is also available in:
Você acabou de concluir o upgrade manual do Oracle RAC de 12.2 para 19c. O banco subiu, os processos estão rodando — e na hora de gerenciar com srvctl, isso aparece:
[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.O banco foi atualizado. O binário do srvctl é do 19c. E mesmo assim, o erro diz para usar o home do 12.2. O que está acontecendo?
Por que acontece
O Oracle Clusterware mantém um registro centralizado chamado OCR (Oracle Cluster Registry). Nele ficam armazenados os metadados de todos os recursos do cluster: bancos de dados, instâncias, serviços, listeners.
Entre esses metadados está a versão do ORACLE_HOME vinculada ao banco. Quando você faz um upgrade manual — sem usar o DBUA — o binário do banco é atualizado, os dicionários são migrados, mas o registro no OCR continua apontando para o home antigo (12.2).
O srvctl do 19c lê o OCR, encontra um recurso registrado como versão 12.2, e recusa operar sobre ele: a regra da Oracle é clara — a versão do srvctl deve ser igual à versão do objeto gerenciado.
Em resumo: o banco subiu para 19c, mas o OCR ainda acha que é 12.2. O
srvctl upgrade databaseé o comando que sincroniza esse registro.
Diagnóstico rápido
Confirme o que o OCR tem registrado para o banco:
$ORACLE_HOME/bin/srvctl config database -d orclSe o campo Oracle home ainda mostrar o path do 12.2, o problema está confirmado:
Database unique name: orcl
Database name: orcl
Oracle home: /u01/app/oracle/product/12.2.0/dbhome_1 ← versão antiga
Oracle user: oracle
...Você também pode verificar a versão do recurso diretamente no Clusterware:
crsctl stat res ora.orcl.db -p | grep -i versionSolução
⚠️ Execute como usuário oracle, não como root. Executar como root gera PRKH-1014 e o comando falha.
/u01/app/oracle/product/19.3.0/dbhome_1/bin/srvctl upgrade database \
-d orcl \
-oraclehome /u01/app/oracle/product/19.3.0/dbhome_1Resposta esperada em caso de sucesso:
PRCD-1180 : Configuration of database orcl has been upgraded to version 19.0.0.0.0Validação
srvctl config database -d orcl | grep -i homeO campo Oracle home agora deve mostrar o path do 19c.
srvctl status database -d orclInstance orcl1 is running on node rac1
Instance orcl2 is running on node rac2Checklist rápido
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>Cenário: home antigo já foi removido
Se você removeu o ORACLE_HOME do 12.2 antes de executar o srvctl upgrade database, o comando pode falhar porque o OCR tenta validar o home antigo durante a operação.
Nesse caso, use srvctl modify para atualizar o ORACLE_HOME apontado pelo recurso, sem depender da validação do home anterior:
$ORACLE_HOME/bin/srvctl modify database -d orcl -oraclehome $ORACLE_HOMEEm seguida, execute o upgrade normalmente:
$ORACLE_HOME/bin/srvctl upgrade database -d orcl -oraclehome $ORACLE_HOME💡 Lição aprendida: sempre execute o
srvctl upgrade databaseantes de remover o home antigo. Isso evita essa situação.
Nota sobre outras versões
O PRCD-1229 não é exclusivo do upgrade 12.2 → 19c. O mesmo erro ocorre em qualquer upgrade manual em ambiente RAC onde o srvctl upgrade database não foi executado — incluindo 11.2 → 12.2, 12.1 → 12.2 e 19c → 21c. A solução é sempre a mesma: sincronizar o OCR com o novo home usando o srvctl do novo ORACLE_HOME.
Referências
- 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
