🔄 Oracle Data Guard: Subida y Sincronización en 11g, 12c, 19c, 21c y 23ai


En esta entrega, exploraremos cómo realizar la subida y sincronización de Oracle Data Guard /Data Guard Broker (DGMGRL) desde la perspectiva práctica, abarcando desde la veterana versión 11g hasta la más reciente 23ai. Verás los comandos clave, scripts útiles y un bonus: un script bash para validar la sincronización desde la primaria. ¡Todo probado en campo y curado en la botica!
☑️ Fundamentos de Sincronización en Oracle Data Guard
Data Guard asegura alta disponibilidad mediante una base de datos standby que refleja en tiempo real (o casi) los cambios de la primaria. En ambientes Oracle RAC, Exadata o entornos cloud (OCI), esta sincronización puede ser afectada por errores de red, transporte de redo logs o configuración.
Antes de continuar, recuerda verificar los siguientes puntos:
Que la configuración entre
db_unique_name
esté correcta.Que los servicios de Red estén definidos (
tnsnames.ora
,listener.ora
).Que los destinos (
LOG_ARCHIVE_DEST_2
, etc.) estén habilitados y sin errores.
🧪 Comandos Clave por Versión
🔹 Oracle 11g
-- Abrir en modo solo lectura (útil para validaciones)
ALTER DATABASE OPEN READ ONLY;
-- Cancelar recuperación gestionada
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
-- Reanudar recuperación aplicando logs actuales
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
🔹 Oracle 12c
-- Iniciar instancia (modo MOUNT normalmente)
STARTUP;
-- Recuperación gestionada modo asincrónico
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
🔹 Oracle 19c, 21c y 23ai
A partir de 19c, la configuración puede incluir real-time apply
por defecto.
-- Real-Time Apply (modo recomendado)
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
-- O también en modo normal
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
🔍 Validaciones con SQL
📌 Script estado_dataguard.sql
Consulta el estado y errores del transporte de logs:
SET LINES 200
COL dest_name FOR A20
COL destination FOR A50
COL error FOR A15
COL db_unique_name FOR A15
COL name FOR A100
SELECT dest_id, dest_name, target, name_space, destination, status, error, db_unique_name
FROM v$archive_dest
WHERE destination IS NOT NULL;
SELECT dest_id, dest_name, status, type, srl, recovery_mode
FROM v$archive_dest_status
WHERE dest_id = 2;
EXIT;
📌 Script dg_sync.sql
Compara la última secuencia recibida vs. aplicada en standby:
SET LINE 180
SET PAGES 30
COLUMN LOGON_TIME FORMAT A20
COLUMN USERNAME FORMAT A15
COLUMN OSUSER FORMAT A20
SELECT /*+ RULE */
ARCH.THREAD# "Thread",
ARCH.SEQUENCE# "Last Sequence Received",
APPL.SEQUENCE# "Last Sequence Applied",
(ARCH.SEQUENCE# - APPL.SEQUENCE#) "Difference"
FROM
(SELECT THREAD#, SEQUENCE#
FROM V$ARCHIVED_LOG
WHERE (THREAD#, FIRST_TIME) IN
(SELECT THREAD#, MAX(FIRST_TIME)
FROM V$ARCHIVED_LOG
GROUP BY THREAD#)) ARCH,
(SELECT THREAD#, SEQUENCE#
FROM V$LOG_HISTORY
WHERE (THREAD#, FIRST_TIME) IN
(SELECT THREAD#, MAX(FIRST_TIME)
FROM V$LOG_HISTORY
GROUP BY THREAD#)) APPL
WHERE
ARCH.THREAD# = APPL.THREAD#
ORDER BY 1;
EXIT;
🧰 Script Bash para Validar desde la Primaria
El siguiente script puede ejecutarse desde la base primaria para verificar la sincronización:
🎯 sync_dg_botica.sh
#!/bin/bash
. /home/oracle/BOTICADB.env
sqlplus -s / as sysdba <<EOF
SET PAGESIZE 50
SET LINESIZE 180
PROMPT === Estado de sincronización Data Guard ===
@/home/oracle/scripts/dg_sync.sql
EOF
📁 También puedes agendarlo vía cron para alertas automatizadas o integrarlo con alguna de tus herramientas de monitorización como Zabbix/Nagios.
🧠 Recomendaciones
En 23ai, aprovecha Data Guard Broker para simplificar el monitoreo (
DGMGRL
).Usa
REAL TIME APPLY
si tienes suficiente capacidad de red y CPU.Asegúrate de que las secuencias no tengan diferencias mayores a 1 (ideal = 0).
Evita usar
CANCEL
sin razón clara, podrías romper la sincronía.Si usas
Fast-Start Failover
, valida elObserver
.
:::::::: Data Guard Broker (DGMGRL) ::::::::
⚙️ Administración Avanzada con Data Guard Broker (DGMGRL)
Desde Oracle 11g en adelante, Oracle recomienda usar Data Guard Broker para gestionar de forma centralizada los entornos Data Guard. Permite operaciones como switchover, failover, validaciones y monitoreo en tiempo real usando dgmgrl
.
🔧 Paso 1: Habilitar el Broker en ambas instancias
En cada instancia:
ALTER SYSTEM SET DG_BROKER_START=true SCOPE=BOTH;
🔗 Paso 2: Crear configuración desde la primaria
dgmgrl sys/password@primaria
CREATE CONFIGURATION 'DGCFG_BOTICA' AS
PRIMARY DATABASE IS PRIMARIA_DB
CONNECT IDENTIFIER IS primaria;
ADD DATABASE STANDBY_DB AS
CONNECT IDENTIFIER IS standby
MAINTAINED AS PHYSICAL;
ENABLE CONFIGURATION;
🔍 Verifica el estado:
SHOW CONFIGURATION;
SHOW DATABASE VERBOSE PRIMARIA_DB;
SHOW DATABASE VERBOSE STANDBY_DB;
🔁 Switchover (para mantenimiento)
Desde la base primaria:
dgmgrl
CONNECT /
SWITCHOVER TO 'STANDBY_DB';
Después de unos segundos, STANDBY_DB
será la nueva primaria.
🛠️ Failover (en caso de desastre)
dgmgrl
CONNECT /
FAILOVER TO 'STANDBY_DB' IMMEDIATE;
⚠️ Usa esto solo cuando estés seguro de que la primaria está perdida.
🔄 Reinicio Automático con systemd
Crea un servicio que verifique la sincronización y la reinicie si falla.
📁 /etc/systemd/system/syncdg-botica.service
[Unit]
Description=Revisión automática de sincronización Oracle Data Guard
[Service]
User=oracle
ExecStart=/home/oracle/scripts/sync_dg_botica.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
Habilita el servicio:
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl enable syncdg-botica.service
sudo systemctl start syncdg-botica.service
🧙🏻 Tips de la Botica
Usa
VALIDATE DATABASE VERBOSE <db_name>;
endgmgrl
para detectar errores comunes.Documenta tus
switchover
para no confundir producción y standby.Nunca dejes
observer
sin monitorear (fsfo_status
endgmgrl
).Si usas Data Guard en OCI, aprovecha FastConnect o Private Endpoints para evitar lag por latencia.
¿Tienes un caso específico o un entorno complejo que quieres revisar? Escríbeme en los comentarios o comunicate directo la casilla de correos Admin@LaBoticaDelDBA.com ¡En la botica siempre hay un elixir de soluciones para cada casuística, problema de rendimiento o alta disponibilidad!
Subscribe to my newsletter
Read articles from Mauricio Muñoz Palma directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Mauricio Muñoz Palma
Mauricio Muñoz Palma
Bienvenidos a "La Botica del DBA" Donde la pasión por las bases de datos Oracle se transforma en conocimiento y excelencia. Este espacio está diseñado para ser el laboratorio de ideas, soluciones y estrategias que todo DBA necesita para optimizar, innovar y liderar en el mundo de las bases de datos. Desde los fundamentos hasta las últimas tendencias, aquí encontrarás guías prácticas, análisis profundos y herramientas que impulsarán tu carrera y tus proyectos al siguiente nivel.