Configuração do Oracle Data Guard (physical standby)
Sintoma
Objetivo: configurar recuperação de desastres e alta disponibilidade para o Oracle com um physical standby (Data Guard); poder mudar para o standby se o primário falhar.
1. Coloque o primário em modo FORCE LOGGING e ARCHIVELOG
Para o standby permanecer consistente com o primário, todas as alterações precisam ser gravadas no redo. O FORCE LOGGING registra até as operações NOLOGGING. Para o modo ARCHIVELOG, o banco é levantado no estado MOUNT.
Oracle
ALTER DATABASE FORCE LOGGING;
-- For ARCHIVELOG:
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;2. Adicione os standby redo log files
Os standby redo logs (SRL) devem ter um grupo a mais que os online redo logs e o mesmo tamanho. São criados tanto no primário quanto no standby; são necessários para o real-time apply. No exemplo, se o online redo tem 200M, os SRLs também têm 200M.
Oracle
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/oradata/srl01.log') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/oradata/srl02.log') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/oradata/srl03.log') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/oradata/srl04.log') SIZE 200M;3. Defina log_archive_dest e os parâmetros relacionados
No primário, defina dest_2 para enviar o redo ao standby. Configure DB_UNIQUE_NAME, LOG_ARCHIVE_CONFIG (o db_unique_name dos dois lados), FAL_SERVER e STANDBY_FILE_MANAGEMENT=AUTO. Assim os arquivos são criados automaticamente no standby.
Oracle
ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl_prim,orcl_stby)';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=orcl_stby ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl_stby';
ALTER SYSTEM SET FAL_SERVER='orcl_stby'; -- for role changes; on the standby FAL_SERVER='orcl_prim'
ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;4. Crie o standby com RMAN DUPLICATE FOR STANDBY
Depois que o password file e o listener estático/tnsnames estiverem configurados no servidor standby, o RMAN se conecta ao primário e ao standby (AUXILIARY). FROM ACTIVE DATABASE copia pela rede sem backup; DORECOVER aplica o redo.
Oracle
rman TARGET sys/password@orcl_prim AUXILIARY sys/password@orcl_stby
RUN {
DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE
DORECOVER
NOFILENAMECHECK;
}5. Inicie o redo apply (MRP) e verifique
Inicie o managed recovery com o standby no estado MOUNT; use USING CURRENT LOGFILE para o real-time apply. Verifique com v$managed_standby que o processo de aplicação (MRP0) está rodando.
Oracle
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
SELECT process, status, sequence# FROM v$managed_standby WHERE process LIKE 'MRP%';6. Ative o Data Guard Broker
O broker centraliza a configuração e reduz failover/switchover a um único comando. Defina DG_BROKER_START=TRUE nas duas instâncias e depois crie e ative a configuração com o dgmgrl. No 12c+, o broker gerencia o transporte de redo: se LOG_ARCHIVE_DEST_2 foi definido manualmente, ADD DATABASE falha com ORA-16698; limpe-o antes com ALTER SYSTEM SET LOG_ARCHIVE_DEST_2=''.
Oracle
ALTER SYSTEM SET DG_BROKER_START=TRUE;
-- In dgmgrl:
CREATE CONFIGURATION dgconf AS PRIMARY DATABASE IS orcl_prim CONNECT IDENTIFIER IS orcl_prim;
ADD DATABASE orcl_stby AS CONNECT IDENTIFIER IS orcl_stby;
ENABLE CONFIGURATION;7. Monitore a defasagem de sincronização e conclua os testes
A diferença de sequence entre primário e standby deve ser monitorada continuamente; uma defasagem crescente indica gargalo de rede/aplicação. O dgmgrl SHOW CONFIGURATION deve mostrar 'SUCCESS'. Opcionalmente, teste uma troca de papéis com um switchover.
Oracle
-- dgmgrl (SHOW DATABASE shows the Transport Lag / Apply Lag values):
SHOW CONFIGURATION;
SHOW DATABASE orcl_stby;
-- SQL (standby): SELECT name, value FROM v$dataguard_stats WHERE name LIKE '%lag';