Resolvendo o RMAN-05624 durante o duplicate for standby

Recentemente durante a criação de um standby físico através de um duplicate for standby, recebi o RMAN-05624, e neste post vou mostrar como resolvê-lo.

Cenário

A técnica que escolhi utilizar para criar o standby foi um duplicate a partir do backup, onde eu me conecto à instância auxiliar, que se tornará o standby físico, e ao catálogo que contém os metadados do backup que vou usar.

Fonte: Oracle

Decidi usar essa abordagem pois a base em questão era muito grande (mais de 40TB), e um duplicate from active database acarretaria em um impacto no ambiente produtivo durante um longo período de tempo.

Esta base já conta com um standby físico, que é utilizado para tirar os backups da base (ponto importante para entender o problema).

Para a realização do duplicate, foi realizada a conexão do RMAN com o catálogo e à instância auxiliar:

rman auxiliary sys@AUXILIARY_DGMGRL catalog rco@CATALOG

Em seguida, foi executado o bloco run abaixo, setando o DBID do banco que seria duplicado, e o SCN alvo da operação:

run {
allocate auxiliary channel ch1 type 'sbt_tape' PARMS="...";
allocate auxiliary channel ch2 type 'sbt_tape' PARMS="...";
 set dbid 123456789;
 set until scn 12345678912345;
 duplicate target database for standby
 dorecover
 nofilenamecheck;
}

Passados alguns segundos, o erro RMAN-05624 foi retornado:

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of Duplicate Db command at 10/07/2025 00:47:30
RMAN-05501: aborting duplication of target database
RMAN-05624: data file name not found in the repository for data file number=59

Causa

Conforme a mensagem do erro RMAN-05624 aponta, o RMAN não conseguiu encontrar o nome do data file número 59 no catálogo.

Isso ocorre porque quando um data file é adicionado ao banco primário, ocorre um resync dele com o catálogo, e é feita a associação do data file com o db_unique_name do primário. Para os standbys, esse file name tem o valor NULL até que seja feito um resync do standby com o catálogo.

A seguinte consulta pode ser feita diretamente no catálogo para verificar o problema:

SELECT S.DB_UNIQUE_NAME, D.NAME AS "DATA FILE NAME"
FROM RC_DATAFILE D
JOIN RC_SITE S ON D.DB_KEY = S.DB_KEY
WHERE D.FILE# = 59 AND D.DB_NAME = 'ORCL';

DB_UNIQUE_NAME                 DATA FILE NAME
------------------------------ -------------------------------------------------------------------------------------------
ORCLSTBY                       
ORCLPRIM                       +DATA/ORCLPRIM/A0D1562261378916I1978F2AB80A3233/DATAFILE/sysaux.341.1200911001

Solução

Para resolver o problema pode ser feito o resync do standby, que vai adicionar as informações sobre os data files ao catálogo, ou também pode ser contornado através de um SET NEWNAME FOR DATABASE, apontando para o diskgroup ASM de destino, no bloco run do RMAN:

run {
allocate auxiliary channel ch1 type 'sbt_tape' PARMS="...";
allocate auxiliary channel ch2 type 'sbt_tape' PARMS="...";
 set newname for database to '+DATA';
 set dbid 123456789;
 set until scn 12345678912345;
 duplicate target database for standby
 dorecover
 nofilenamecheck;
}

Conclusão

Caso você não tenha um catálogo, também é possível realizar o duplicate a partir de um backup utilizando apenas a instância auxiliar. O processo é descrito no post Duplicação baseada em backup usando RMAN.

Abaixo a referência usada:

Publicar comentário