Início/ Trilha 5/ Conteúdo/ Tópico 3
3

Oracle Data Guard

Standby físico/lógico, switchover, failover e proteção de dados

📖

Definição

O que é Data Guard?

Oracle Data Guard é a solução de disaster recovery e alta disponibilidade que mantém uma ou mais cópias standby sincronizadas do banco de dados primário. Protege contra perda de dados, corrupção, desastres naturais e permite manutenção com zero data loss.

Componentes Principais:

  • Primary Database: Banco de dados de produção ativo
  • Standby Database: Cópia sincronizada (física ou lógica)
  • Redo Transport: Transferência de redo logs para standby
  • Redo Apply: Aplicação de changes no standby
  • Data Guard Broker (DGMGRL): Ferramenta de gerenciamento
  • Fast-Start Failover: Failover automático em caso de falha

Tipos de Standby Database

Physical Standby (Mais Comum)

Réplica block-by-block idêntica ao primário. Usa Redo Apply (Media Recovery) para manter sincronização.

  • Proteção máxima contra corrupção de dados
  • Active Data Guard: permite queries enquanto aplica redo
  • Pode ser usado para backups e offload de relatórios
  • Sincronização total: estruturas, dados, índices, tudo

Logical Standby

Converte redo em SQL statements e aplica via SQL Apply. Mantém estrutura lógica, não física.

  • Permite manter tabelas/esquemas adicionais no standby
  • Pode ter índices diferentes do primário
  • Útil para rolling upgrades e migrations
  • Mais complexo e com limitações (algumas operações não suportadas)

Snapshot Standby

Standby físico convertido temporariamente em modo read-write para testes. Pode reverter para standby após testes.

  • Perfeito para testes de upgrade ou patches
  • Usa flashback database para reverter mudanças
  • Continua recebendo redo mas não aplica até reverter

Modos de Proteção

Maximum Protection

Zero data loss. Primary para se standby não confirmar recebimento. Requer SYNC transport.

Maximum Availability

Zero data loss normalmente, mas primary continua se standby cair. SYNC com fallback para ASYNC.

Maximum Performance

Melhor performance. ASYNC transport. Pode perder dados em falha catastrófica. Mais comum.

🛠️

Aplicação Prática

Criando Physical Standby Database

-- No PRIMARY: Habilitar force logging
ALTER DATABASE FORCE LOGGING;

-- Criar standby redo logs (um a mais que online redo logs)
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 10 SIZE 512M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 11 SIZE 512M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 12 SIZE 512M;

-- Configurar parâmetros no PRIMARY
ALTER SYSTEM SET log_archive_config='DG_CONFIG=(PRODDB,STANDBYDB)';
ALTER SYSTEM SET log_archive_dest_1='LOCATION=/arch/proddb VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=PRODDB';
ALTER SYSTEM SET log_archive_dest_2='SERVICE=standbydb SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=STANDBYDB';
ALTER SYSTEM SET log_archive_dest_state_2=ENABLE;
ALTER SYSTEM SET fal_server=STANDBYDB;
ALTER SYSTEM SET standby_file_management=AUTO;

-- Criar backup para duplicate
RMAN TARGET /
BACKUP DATABASE PLUS ARCHIVELOG;

-- No STANDBY: Restaurar e configurar
-- (Assumindo backup foi copiado para standby server)
RMAN TARGET /
DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE
  DORECOVER
  SPFILE
    SET db_unique_name='STANDBYDB'
    SET log_archive_dest_2='SERVICE=proddb ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=PRODDB'
    SET fal_server='PRODDB'
  NOFILENAMECHECK;

-- Iniciar MRP (Managed Recovery Process) no STANDBY
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

Gerenciando com Data Guard Broker

-- Iniciar DGMGRL
$ dgmgrl /

-- Criar configuração Data Guard
CREATE CONFIGURATION dg_config AS PRIMARY DATABASE IS proddb CONNECT IDENTIFIER IS proddb;

-- Adicionar standby database
ADD DATABASE standbydb AS CONNECT IDENTIFIER IS standbydb MAINTAINED AS PHYSICAL;

-- Habilitar configuração
ENABLE CONFIGURATION;

-- Verificar status
SHOW CONFIGURATION;
SHOW DATABASE proddb;
SHOW DATABASE standbydb;

-- Verificar lag de aplicação
SHOW DATABASE standbydb 'ApplyLag';
SHOW DATABASE standbydb 'TransportLag';

-- Configurar Fast-Start Failover
ENABLE FAST_START FAILOVER;
SHOW FAST_START FAILOVER;

Switchover e Failover

-- SWITCHOVER (planejado, sem data loss)
-- Via DGMGRL:
SWITCHOVER TO standbydb;

-- Manual (no PRIMARY):
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

-- Manual (no STANDBY - agora será PRIMARY):
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
SHUTDOWN IMMEDIATE;
STARTUP;

-- FAILOVER (não planejado, possível data loss)
-- Via DGMGRL:
FAILOVER TO standbydb;

-- Manual (no STANDBY):
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;
ALTER DATABASE ACTIVATE STANDBY DATABASE;
SHUTDOWN IMMEDIATE;
STARTUP;

-- Registrar antigo primary como standby após recuperá-lo
FLASHBACK DATABASE TO SCN ;
ALTER DATABASE CONVERT TO PHYSICAL STANDBY;
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;

Monitoramento Data Guard

-- Verificar status de aplicação de redo (no STANDBY)
SELECT process, status, thread#, sequence#, block#, blocks
FROM v$managed_standby
WHERE process IN ('MRP0', 'RFS');

-- Ver lag de aplicação
SELECT name, value, unit, time_computed
FROM v$dataguard_stats
WHERE name IN ('transport lag', 'apply lag');

-- Verificar gaps de archive logs
SELECT thread#, low_sequence#, high_sequence#
FROM v$archive_gap;

-- Histórico de switchover/failover
SELECT database_role, switchover_status, 
       protection_mode, protection_level
FROM v$database;

-- Performance de redo transport
SELECT dest_id, status, type, srl, 
       log_sequence, archived, applied
FROM v$archive_dest_status
WHERE dest_id = 2;

Resultado Esperado

O que você deve dominar:

Implementar Data Guard

Criar physical/logical standby databases

Configurar proteção

Escolher modo apropriado (SYNC/ASYNC)

Executar switchover

Realizar manutenção planejada sem downtime

Realizar failover

Recuperar de falhas catastróficas

Monitorar replicação

Identificar e resolver lags e gaps

Usar Data Guard Broker

Automatizar operações com DGMGRL

Anterior: ASM Próximo: Arquitetura MAA