En un sistema de traspaso de información por streams tenemos básicamente tres procesos. En el nodo de origen un proceso de capture que se encarga de ir encolando los archive_logs, un proceso de propagation que se encarga de transferir lo que encuentra en la cola hacia la base de datos de destino, y en destino un proceso de apply que va controlando cual es el siguiente log que está esperando y los va aplicando de la cola de llegada.

En cada configuración de streams se establece un nombre único para cada uno de estos procesos. Podemos interrogar las bases de datos con las queries:

  • En origen

select capture_name,status from sys.dba_capture;
select propagation_name,status from sys.dba_propagation;

  • En destino

select apply_name,status from sys.dba_apply;

Dichos procesos pueden estar habilitados o deshabilitados. Normalmente cuando se hacen operaciones sobre las bases de datos como reinicio o parada, o bien tareas que afectan al modelo de datos, se deben hacer paradas de dichos procesos de streams.

En Nagios monitorizamos el estado de estos procesos.

  • Si los tres procesos están en ENABLED da OK (verde).
  • Si alguno de ellos está en DISABLED el estado queda en WARNING (amarillo).
  • Si alguno está en UNCONFIGURED el estado queda en UNKNOWN (naranja). UNCONFIGURED indica que no existe el nombre único configurado en Nagios. Podria deberse a una degradación de la configuración o a un cambio en la configuración que no nos hubiera comunicado (tipo ‘a partir de hoy el proceso de streams se ha configurado con otro nombre’).

Adjunto aquí el script que uso para monitorizar el estado de streams en Nagios. Ojo con el usuario y password de las bases de datos.

#!/bin/sh

STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
STATE_DEPENDENT=4

CAPTURE_NAME=$1
PROPAGATION_NAME=$2
APPLY_NAME=$3
DATABASE_orig=$4
DATABASE_dest=$5

TNS_ADMIN=/opt/sqlplus; export TNS_ADMIN
SQLPLUS_orig=”/opt/sqlplus/sqlplus -s nagios/nagios123@${DATABASE_orig}”
SQLPLUS_dest=”/opt/sqlplus/sqlplus -s nagios/nagios123@${DATABASE_dest}”

#—————————
# Streams_Capture
#—————————
echo “set pages 0
set lines 20
set linesize 9999
set head off
set echo off
set verify off
set feedback off
select status from sys.dba_capture where capture_name=’$CAPTURE_NAME’;
exit” > /tmp/commands.$$.tmp
STREAMS_CAPTURE=`$SQLPLUS_orig < /tmp/commands.$$.tmp`
rm /tmp/commands.$$.tmp
if [ -z “$STREAMS_CAPTURE” ]; then STREAMS_CAPTURE=UNCONFIGURED; fi

echo “set pages 0
set lines 20
set linesize 9999
set head off
set echo off
set verify off
set feedback off
select status from sys.dba_propagation where propagation_name=’$PROPAGATION_NAME’;
exit” > /tmp/commands.$$.tmp
STREAMS_PROPAGATION=`$SQLPLUS_orig < /tmp/commands.$$.tmp`
rm /tmp/commands.$$.tmp
if [ -z “$STREAMS_PROPAGATION” ]; then STREAMS_PROPAGATION=UNCONFIGURED; fi

echo “set pages 0
set lines 20
set linesize 9999
set head off
set echo off
set verify off
set feedback off
select status from sys.dba_apply where apply_name=’$APPLY_NAME’;
exit” > /tmp/commands.$$.tmp
STREAMS_APPLY=`$SQLPLUS_dest < /tmp/commands.$$.tmp`
rm /tmp/commands.$$.tmp
if [ -z “$STREAMS_APPLY” ]; then STREAMS_APPLY=UNCONFIGURED; fi

echo “Oracle Streams Status – Capture $CAPTURE_NAME: $STREAMS_CAPTURE – Propagation $PROPAGATION_NAME: $STREAMS_PROPAGATION – Apply $APPLY_NAME: $STREAMS_APPLY”

if [ “${STREAMS_CAPTURE}” = “ENABLED” ] && [ “${STREAMS_PROPAGATION}” = “ENABLED” ] && [ “${STREAMS_APPLY}” = “ENABLED” ]; then
exit ${STATE_OK}
fi
if [ “${STREAMS_CAPTURE}” = “UNCONFIGURED” ] || [ “${STREAMS_PROPAGATION}” = “UNCONFIGURED” ] || [ “${STREAMS_APPLY}” = “UNCONFIGURED” ]; then
exit ${STATE_UNKNOWN}
fi

exit ${STATE_WARNING}