En este articulo, les mostrare una de las formas que utilizo para validar bloqueos de sesiones en las bases de datos, este me es muy útil ya que tenemos la facilidad de que nos envía correo y así enterarnos de una forma fácil y rápida.
Lo primero que debemos realizar es la configuración de envío de correo por Linux, les dejaré el articulo de referencia aquí.
A continuación lo que debemos hacer, es crear un espacio para almacenar nuestros scripts, recomiendo usar el home del usuario y crear las carpetas
[oracle@soyundba ~]$ mkdir scripts
[oracle@soyundba ~]$ cd scripts/
[oracle@soyundba scripts]$ mkdir monitoreo
Después de crear nuestra carpeta de scripts y monitoreo, procedemos a acceder y crear nuestro archivo para la validación de bloqueos en base de datos
[oracle@soyundba scripts]$ cd monitoreo/
[oracle@soyundba monitoreo]$ vi validar_bloqueos_bd.sql
-- Detecta los bloques de sesiones mayores a 45 seg
SELECT S.INST_ID,
S.BLOCKING_SESSION,
S.SID,
S.SERIAL#,
S.SECONDS_IN_WAIT,
S.EVENT
FROM GV$SESSION S
WHERE BLOCKING_SESSION IS NOT NULL AND S.SECONDS_IN_WAIT > 45;
Ahora crearemos el archivo que pondremos a ejecutar desde el crontab
[oracle@soyundba monitoreo]$ vi validar_bloqueos_bd.sh
#!/bin/bash
##########################################################
# Soy un DBA #
# Nombre del script: validar_bloqueos_bd.sh #
# Descripcion: Valida bloques de BD e informa por correo #
# Fecha creacion: Enero 22 2021 #
# Creado por: Julian David Ortiz Idrobo #
# Fecha modificacion: #
# Modificado por: #
##########################################################
######################
# SETEO DE VARIABLES #
######################
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db
export ORACLE_SID=$1
log=/home/oracle/scripts/monitoreo/alerta_bloqueos_bd.log
######################
# EJECUTAR SENTENCIA #
######################
sqlplus / as sysdba << EOF
SPOOL $log
@/home/oracle/scripts/monitoreo/validar_bloqueos_bd.sql
SPOOL OFF
exit
EOF
#################
# ENVIAR CORREO #
#################
contador=`cat $log | wc -l`
if [ $contador -ge 1 ]; then
mail -s "BLOQUEO DE BASE DE DATOS $ORACLE_SID (> 45 seg)" el_correo_destino < $log
fi
###############
# DEPURAR LOG #
###############
>$log
Otorgamos los permisos necesarios para que el usuario Oracle pueda ejecutar la tarea automáticamente desde el crontab
[oracle@soyundba monitoreo]$ chmod 755 validar_bloqueos_bd.sh
Asimismo modificamos nuestro crontab para dejar nuestra tarea programada cada minuto
[oracle@soyundba monitoreo]$ crontab -e
# MONITOREO BLOQUEO DE SESIONES EN BASE DE DATOS
5 * * * * /home/oracle/scripts/monitoreo/validar_bloqueos_bd.sh soyundba
Finalmente, podremos esperar nuestro correo informando el bloqueo.