🌐Verificaciones Oracle Data Guard en RAC 19c: Real-Time Apply sin sorpresas.

Esta guía paso a paso está diseñada para que puedas validar de manera segura y efectiva el estado de tu entorno Data Guard, especialmente tras reinicios, parcheos o eventos de failover. Incluye comandos clave, interpretación de resultados, y acción correctiva para asegurar que tu standby esté siempre listo para proteger tu entorno crítico.
🔍 1. Verificación de sincronización primaria - standby
-- En base primaria:
SELECT thread#, MAX(sequence#) "Last Sequence"
FROM v$archived_log
WHERE applied = 'NO'
GROUP BY thread#;
-- Alternativa:
SELECT thread#, sequence#, applied FROM v$archived_log ORDER BY sequence# DESC;
-- Usando script (Dataguard synchronization), te dejo todo lo necesario en los bonus.
Thread Last Sequence Received Last Sequence Applied Difference
1 24239 24239 0
2 25528 25528 0
✅ Sincronización perfecta si el "Difference" es 0 para todos los threads.
📊 2. Verificar estado del destino Data Guard en la base primaria
SET LINES 200
COL DESTINATION FORMAT A40
COL STATUS FORMAT A10
COL RECOVERY_MODE FORMAT A25
SELECT dest_id, destination, status, recovery_mode
FROM v$archive_dest_status
WHERE dest_id = 2;
Resultado esperado:
| DEST_ID | DESTINATION | STATUS | RECOVERY_MODE |
| 2 | botica19c_oci | VALID | MANAGED REAL TIME APPLY |
✅ Esto confirma que la base primaria está enviando logs en tiempo real a la standby.
📃 3. Estado general de todos los destinos
SELECT destination, status, type, recovery_mode
FROM v$archive_dest_status
WHERE recovery_mode IS NOT NULL;
✅ Confirmar que solo botica19c_oci está activo como destino PHYSICAL y en modo REAL TIME APPLY. Los demás pueden estar INACTIVE.
🌐 4. Verificación de la base standby (botica19c_oci)
-- En standby:
SELECT database_role, open_mode, protection_mode FROM v$database;
Resultado esperado:
PHYSICAL STANDBY | MOUNTED | MAXIMUM PERFORMANCE
✅ La base está en modo standby montado (no abierta), lista para recibir y aplicar logs.
-- Ver proceso MRP:
SELECT process, status FROM v$managed_standby WHERE process = 'MRP0';
Resultado esperado:
PROCESS | STATUS
--------|--------
MRP0 | APPLYING_LOG
✅ MRP0 activo = aplicación en tiempo real funcionando.
⚡ Checklist Rápida
| ✅ Verificación | Estado Esperado |
MRP0 corriendo en standby | APPLYING_LOG |
Base standby en MOUNTED | PHYSICAL STANDBY y MOUNTED |
Destino LOG_ARCHIVE_DEST_2 en primaria | VALID, REAL TIME APPLY |
| Dataguard synchronization/ secuencia aplicada = recibida | Difference = 0 |
🛠️ 5. Verificación del estado de recursos en Oracle Grid Infrastructure (CRS) con srvctl y crsctl
Desde el usuario grid, puedes validar que los recursos de base de datos estén correctamente registrados, online y con el home correcto:
crsctl stat res -w "TYPE = ora.database.type" -t
Ejemplo de salida esperada:
ora.botiquin_oci.db
1 ONLINE ONLINE exabotica-area51 Open,HOME=/u02/app/oracle/product/12.2.0/dbhome_5,STABLE
2 ONLINE ONLINE exabotica-area52 Open,HOME=/u02/app/oracle/product/12.2.0/dbhome_5,STABLE
ora.botica19c_oci.db
1 ONLINE ONLINE exabotica-area51 Open,HOME=/u02/app/oracle/product/19.0.0.0/dbhome_1,STABLE
2 ONLINE ONLINE exabotica-area52 Open,HOME=/u02/app/oracle/product/19.0.0.0/dbhome_1,STABLE
✅ Verificá que el estado esté ONLINE, el home correcto (dbhome_X) y que cada nodo esté reportando el estado como STABLE.
También puedes validar la base con srvctl:
srvctl status database -d botica19c_oci
srvctl config database -d botica19c_oci
⚡ Checklist Rápida
| ✅ Verificación | Estado Esperado |
MRP0 corriendo en standby | APPLYING_LOG |
Base standby en MOUNTED | PHYSICAL STANDBY y MOUNTED |
Destino LOG_ARCHIVE_DEST_2 en primaria | VALID, REAL TIME APPLY |
DGsynchronization / secuencia aplicada = recibida | Difference = 0 |
crsctl stat res -t en estado ONLINE | Recursos online, sin errores |
🔧 Comando para reiniciar MRP (si se detiene)
-- En standby:
START MRP;
-- o:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT
BONUS:
💻 Script .sh para automatizar validaciones básicas:
Dado que parte de las verificaciones pertenecen al contexto del usuario grid (infraestructura) y otras al usuario oracle (base de datos), se recomienda separar los scripts o coordinar su ejecución desde un entorno con privilegios compartidos.
✅ Script para usuario oracle (validaciones Data Guard)
#!/bin/bash
# check_dataguard_oracle.sh
ORACLE_SID=BOTICA19C1
. /home/oracle/.bash_profile
echo "Verificando MRP0 en standby..."
sqlplus -s / as sysdba <<EOF
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
SELECT 'MRP0 status: ' || status FROM v\$managed_standby WHERE process = 'MRP0';
EOF
echo -e "\nVerificando destino de standby (dest_id=2)..."
sqlplus -s / as sysdba <<EOF
SET LINES 200
COL destination FOR A30
COL recovery_mode FOR A30
SELECT destination, status, recovery_mode FROM v\$archive_dest_status WHERE dest_id = 2;
EOF
✅ Script para usuario grid (estado CRS)
#!/bin/bash
# check_grid_crsctl.sh
. /home/grid/.bash_profile
echo "Estado de bases de datos en Clusterware:"
crsctl stat res -w "TYPE = ora.database.type" -t | grep -Ei 'botica|gis'
✅ Estos scripts pueden integrarse en procesos automatizados por separado, o llamarse desde un orquestador común si hay acceso entre cuentas (ej: sudo, cron centralizado, herramientas de observabilidad).
📥 Descargá los scripts completos de verificación desde GitHub
💊 Si esta guía te sirvió para dejar tu Data Guard en modo zen y tus instancias bien sincronizadas, ¡misión cumplida!
🚀 Si te gustó el contenido, compartelo con tu equipo, guardalo en tu caja de primeros auxilios y no te olvides de suscribirte al boletín de La Botica del DBA desde:
Ahí seguimos publicando tips, guías, scripts y anécdotas del día a día del DBA — sin vueltas, directo al grano.
📮 ¿Tienes una duda, una historia técnica o quieres colaborar con el blog?
Escribime a admin@laboticadeldba.com
Nos vemos en la próxima dosis técnica 😉
— El Boticario del DBA






