Script monitoreo de bloques de sesiones en base de datos y envío de correo por shell

Oracle-logo

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.

 

Acerca de JulianOrtiz0506

Soy administrador de bases de datos y desarrollador web, desde mis inicios en el mundo de la informática, he implementando proyectos personales y empresariales. Por consiguiente esto me ha permitido contar con una amplia calificación y destreza sobre mis áreas de conocimiento. Sobre todo suelo estar en constante aprendizaje, diariamente me estoy informando sobre nuevas tecnologías. Ya queme gusta estar actualizado en la tecnología de punta para todas las plataformas que me apasionan y con las cuales trabajo día a día.

Ver todas las entradas de JulianOrtiz0506 →

Deja una respuesta

Tu dirección de correo electrónico no será publicada.