🔄 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 el Observer.

:::::::: 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>; en dgmgrl para detectar errores comunes.

  • Documenta tus switchover para no confundir producción y standby.

  • Nunca dejes observer sin monitorear (fsfo_status en dgmgrl).

  • 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!

0
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.