DBAtlas · Atlas de operações de banco de dados

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';
Abrir no DBAtlas →