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';