A administração de ambientes críticos exige processos bem documentados e confiáveis. Com a evolução do Oracle 19c, novas funcionalidades foram incorporadas ao Data Guard, tornando a recuperação de ambientes standby mais eficiente — desde que executada corretamente.

Neste artigo, você aprenderá como realizar a recuperação do Data Guard em Oracle 19, com um passo a passo detalhado, otimizado para administradores de banco de dados (DBAs) que buscam segurança, performance e alta disponibilidade.


🚀 Passo a Passo para Recuperação do Data Guard

1. Parar a Recuperação de Archivelogs

Antes de iniciar qualquer procedimento, é necessário interromper a aplicação dos archivelogs no standby:

sqlplus / as sysdba

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

2. Parar a Instância Secundária (somente se sua database for Oracle RAC)

Desative uma das intâncias do banco standby:

srvctl stop instance -i <INSTNAME> -d <DBNAME> 

3. Executar a Recuperação Automática via RMAN

Utilize o RMAN para realizar a recuperação diretamente do serviço Data Guard:

RECOVER STANDBY DATABASE FROM SERVICE <TNS_SERVICE_PRIMARY_DATABASE>;

💡 Dica: esse método reduz a necessidade de cópias manuais de archivelogs e acelera o processo de sincronização.


4. Reiniciar a Aplicação de Archivelogs

Após a recuperação, reative o recover de archiveslogs:

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

5. Corrigir Problemas com Redo Logs (Se Necessário)

Caso erros sejam identificados no alert log, pode ser necessário corrigir os caminhos dos redo logs:

ALTER DATABASE RENAME FILE '+DG_REDO/<PRIM_DBNAME>/ONLINELOG/group_13...' TO +DG_REDO1/<STDBY_DBNAME>/ONLINELOG/group_13...';
-- (demais comandos seguem o mesmo padrão)

⚠️ Importante: Execute esse passo apenas se houver inconsistência identificada.

6. Reiniciar a Database via Cluster (somente caso sua database seja Oracle RAC)

Após concluir a recuperação:

srvctl stop database -d <DBNAME>
srvctl start database -d <DBNAME>

7. Validar Status das Instâncias

Confirme se ambas as instâncias estão ativas:

srvctl status database -d <DBNAME>

Saída esperada:
Instance <INSTNAME1> is running on node <NODE1>
Instance <INSTNAME2> is running on node <NODE2>

8. Verificar Sincronismo do Data Guard

Execute a query abaixo para validar o gap de archivelogs:

select a.inst, a.seq max_seq, b.seq applied_seq, a.seq-b.seq seq_to_go
from (select THREAD# inst, max(SEQUENCE# ) seq from v$archived_log WHERE RESETLOGS_ID = (SELECT MAX(RESETLOGS_ID) FROM v$archived_log) group by THREAD#) a,
(select THREAD# inst, max(SEQUENCE# ) seq from v$archived_log where applied='YES' AND RESETLOGS_ID = (SELECT MAX(RESETLOGS_ID) FROM v$archived_log) group by THREAD#) b
where a.inst=b.inst;

Resultado ideal:

  • SEQ_TO_GO = 0 ou próximo de 0 → Banco totalmente sincronizado

9. Validar Configuração no Data Guard Broker (caso esteja utilizando)

dgmgrl /

show configuration

Exemplo de saída:
Configuration Status:
SUCCESS

🔍 Boas Práticas para Data Guard no Oracle 19c

Para garantir estabilidade e desempenho:

  • ✔️ Monitore frequentemente o lag de sincronização
  • ✔️ Utilize o Data Guard Broker para gerenciamento centralizado
  • ✔️ Revise regularmente os alert logs
  • ✔️ Automatize verificações com scripts SQL ou SHELL

📈 Conclusão

A recuperação do Data Guard no Oracle 19c se tornou mais prática com o recurso de recuperação automática. No entanto, a execução correta dos passos continua sendo essencial para evitar inconsistências e garantir alta disponibilidade.