DBAtlas · Atlas de operaciones de bases de datos

Configuración de Oracle Data Guard (physical standby)

Síntoma

Objetivo: configurar recuperación ante desastres y alta disponibilidad para Oracle con un physical standby (Data Guard); poder cambiar al standby si el primario falla.

1. Ponga el primario en modo FORCE LOGGING y ARCHIVELOG

Para que el standby se mantenga consistente con el primario, todos los cambios deben escribirse en redo. FORCE LOGGING registra incluso las operaciones NOLOGGING. Para el modo ARCHIVELOG, la base de datos se levanta en estado MOUNT.

Oracle

ALTER DATABASE FORCE LOGGING;
-- For ARCHIVELOG:
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;

2. Agregue archivos de standby redo log

Los standby redo logs (SRL) deben tener un grupo más que los online redo logs y el mismo tamaño. Se crean tanto en el primario como en el standby; son necesarios para real-time apply. En el ejemplo, si el online redo es de 200M, los SRL también son de 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. Configure log_archive_dest y los parámetros relacionados

En el primario, defina dest_2 para enviar redo al standby. Configure DB_UNIQUE_NAME, LOG_ARCHIVE_CONFIG (el db_unique_name de ambos lados), FAL_SERVER y STANDBY_FILE_MANAGEMENT=AUTO. Así los archivos se crean automáticamente en el 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. Cree el standby con RMAN DUPLICATE FOR STANDBY

Una vez configurados el password file y el listener estático/tnsnames en el servidor standby, RMAN se conecta al primario y al standby (AUXILIARY). FROM ACTIVE DATABASE copia por la red sin backup; DORECOVER aplica el 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 redo apply (MRP) y verifique

Inicie la recuperación gestionada con el standby en estado MOUNT; use USING CURRENT LOGFILE para real-time apply. Verifique con v$managed_standby que el proceso de aplicación (MRP0) se está ejecutando.

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. Habilite Data Guard Broker

El broker centraliza la configuración y reduce failover/switchover a un solo comando. Configure DG_BROKER_START=TRUE en ambas instancias y luego cree y habilite la configuración con dgmgrl. En 12c+ el broker gestiona el transporte de redo: si LOG_ARCHIVE_DEST_2 se configuró manualmente, ADD DATABASE falla con ORA-16698; límpielo primero con 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. Monitoree el desfase de sincronización y complete las pruebas

La diferencia de secuencia entre primario y standby debe monitorearse continuamente; un desfase creciente indica un cuello de botella de red/aplicación. dgmgrl SHOW CONFIGURATION debe mostrar 'SUCCESS'. Opcionalmente, pruebe un cambio de rol con un 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 en DBAtlas →