Fundamentos de Sincronización en Oracle Data Guard

Oracle Data Guard garantiza alta disponibilidad mediante una base standby que replica los cambios desde la primaria. En entornos como Oracle RAC, Exadata o nubes (OCI), esta replicación puede verse afectada por red, transporte de redo logs o errores de configuración.

Verifica siempre:

  • Que los db_unique_name estén bien configurados

  • Que los archivos tnsnames.ora y listener.ora estén definidos

  • Que los destinos LOG_ARCHIVE_DEST_n estén activos y sin errores


🧪 Comandos Clave por Versión

🔹 Oracle 11g (NO multitenant, sin CDB/PDB)

-- Abrir en modo solo lectura (para validaciones)
ALTER DATABASE OPEN READ ONLY;

-- Cancelar recuperación gestionada (mantenimiento)
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

-- Reanudar recuperación
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;

🔹 Oracle 12c (Soporta CDB/PDB, Broker funcional)

-- Arrancar instancia en modo MOUNT (standby)
STARTUP MOUNT;

-- Activar recuperación gestionada
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;

🔹 Oracle 19c, 21c, 23ai (Real-Time Apply y Broker completo)

-- Real-Time Apply recomendado
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;

-- Modo normal también válido
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;

🔍 Validaciones con SQL

📌 Script estado_dataguard.sql

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

SET LINE 180
SET PAGES 30

COLUMN LOGON_TIME FORMAT A20
COLUMN USERNAME FORMAT A15
COLUMN OSUSER FORMAT A20

SELECT
    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 desde Primaria: 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

Puedes programarlo en cron o integrarlo con Zabbix/Nagios.


Data Guard Broker (DGMGRL) — desde Oracle 12c+

⚙️ Paso 1: Habilitar Broker

ALTER SYSTEM SET DG_BROKER_START=true SCOPE=BOTH;

🔗 Paso 2: Crear Configuración

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;

🔍 Validaciones

SHOW CONFIGURATION;
SHOW DATABASE VERBOSE PRIMARIA_DB;
SHOW DATABASE VERBOSE STANDBY_DB;

⟲ Switchover

dgmgrl
CONNECT /
SWITCHOVER TO 'STANDBY_DB';

Failover (desastre)

FAILOVER TO 'STANDBY_DB' IMMEDIATE;

🔄 Reinicio Automático con systemd

Archivo: /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

Activar:

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 solo en versiones 12c+.

  • Documenta cada switchover y failover cuidadosamente.

  • Nunca dejes el observer sin monitorear (FSFO).

  • En OCI, aprovecha FastConnect o Private Endpoints para baja latencia.


📧 admin@laboticadeldba.com — ¡Consulta casos específicos de HA, rendimiento o DR!


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