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_nameestén bien configuradosQue los archivos
tnsnames.oraylistener.oraestén definidosQue los destinos
LOG_ARCHIVE_DEST_nesté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 VERBOSEsolo en versiones 12c+.Documenta cada
switchoveryfailovercuidadosamente.Nunca dejes el
observersin 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!






