A execução de um DUPLICATE via RMAN falhou com o seguinte erro:
RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of Duplicate Db command at 05/12/2021 16:32:01 RMAN-05501: aborting duplication of target database RMAN-03015: error occurred in stored script Memory Script RMAN-03009: failure of backup command on C1 channel at 05/12/2021 16:32:01 ORA-00604: error occurred at recursive SQL level 1 ORA-06502: PL/SQL: numeric or value error ORA-17628: Oracle error 19505 returned by remote Oracle server
Então consultando o alert log da instância auxiliar, havia essa essas mensagens de erro:
Wed May 12 16:32:00 2021 Errors in file /u02/app/oracle/diag/rdbms/hml4mv_gru1mr/HML4MV2/trace/HML4MV2_ora_326508.trc: ORA-19505: failed to identify file "+DATAC1/hml4mv_gru1mr/controlfile/control01.ctl" ORA-17502: ksfdcre:3 Failed to create file +DATAC1/hml4mv_gru1mr/controlfile/control01.ctl ORA-15001: diskgroup "DATAC1" does not exist or is not mounted ORA-15204: database version 11.2.0.0.0 is incompatible with diskgroup DATAC1
Na prática, a ordem de precedência desses erros para identificar o problema é de baixo para cima:
- Ocorreu o erro ORA-12204 porque a versão da instância RDBMS (parâmetro compatible) era inferior a versão mínima suportada pelo diskgroup DATAC1;
- O erro ORA-15001 é um falso positivo, o diskgroup existe e estava montado. O erro ocorre porque a instância RDBMS não estabeleceu conexão com o diskgroup devido ao erro ORA-12204;
- Sem estabelecer conexão com diskgroup, o controlfile não pode ser criado durante o RESTORE CONTROLFILE executado pelo RMAN (erro ORA-17502);
- O controlfile não foi criado, a tentativa de montar o banco de dados com ALTER DATABASE MOUNT falha por não achar o controlfile;
Verificando a nível de compatibilidade mínima para o RDBMS no diskgroup DATAC1:
ASMCMD> lsattr -G DATAC1 -lm
Group_Name Name Value RO Sys
DATAC1 access_control.enabled FALSE N Y
DATAC1 access_control.umask 066 N Y
DATAC1 appliance._partnering_type EXADATA FIXED Y Y
DATAC1 appliance.mode TRUE N Y
DATAC1 ate_conversion_done true Y Y
DATAC1 au_size 4194304 Y Y
DATAC1 cell.smart_scan_capable TRUE N N
DATAC1 cell.sparse_dg allnonsparse N N
DATAC1 compatible.advm 19.0.0.0 N Y
DATAC1 compatible.asm 19.0.0.0.0 N Y
DATAC1 compatible.rdbms 11.2.0.4 N Y
DATAC1 content.check TRUE N Y
DATAC1 content.type data N Y
DATAC1 content_hardcheck.enabled FALSE N Y
DATAC1 disk_repair_time 12.0h N Y
DATAC1 failgroup_repair_time 24.0h N Y
DATAC1 idp.boundary auto N Y
DATAC1 idp.type dynamic N Y
DATAC1 logical_sector_size 512 N Y
DATAC1 phys_meta_replicated true Y Y
DATAC1 preferred_read.enabled FALSE N Y
DATAC1 scrub_async_limit 1 N Y
DATAC1 scrub_metadata.enabled TRUE N Y
DATAC1 sector_size 512 N Y
DATAC1 thin_provisioned FALSE N Y
DATAC1 vam_migration_done true Y Y
O atributo compatible.rdbms foi definido para 11.2.0.4 no diskgroup, então o parâmetro compatible deve ser configurado para essa versão ou superior no arquivo de parâmetros da instância RDBMS.
Se subirmos uma instância sem especificar esse parâmetro de forma explícita, mesmo que os binários estejam na versão 11.2.0.4, o parâmetro compatible pega o valor padrão de 11.2.0.0.0 durante o startup da instância.
Solução:
1) Incluir esse parâmetro no pfile da instância:
*.compatible='11.2.0.4'
2) Reiniciar a instância:
SQL> shutdown immediate;
ORA-01507: database not mounted
ORACLE instance shut down.
SQL> startup nomount;
ORACLE instance started.
3) Checando o valor do parâmetro:
SQL> show parameter compatible;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
compatible string 11.2.0.4