Skip to main content

Command Palette

Search for a command to run...

Fundamentos de Sincronización en Oracle Data Guard

Updated
3 min read
Fundamentos de Sincronización en Oracle Data Guard
M
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.

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)

SQL> recover managed standby database cancel;
Media recovery complete.
SQL> alter database open read only;

Database altered.

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;

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

More from this blog

L

La botica del DBA

24 posts