[OCI] Monitorización de tareas OCI Erróneas

David SanzDavid Sanz
2 min read

Os paso un pequeño script que tengo de monitorización de tareas de OCI erróneas. Este script se ejecuta diariamente y lo que hace es consultar si ha habido tareas erróneas el día anterior.

En caso que encuentre tareas erróneas, te índice que hilos han ido bien y cual han fallado dentro de la tarea. Además, te adjunta el log de la tarea ejecutada. Algo muy útil para indagar la causa.

Esta sería la alerta que nos llegaría en caso de que se encuentre alguna tarea errónea

Y este sería el código del sh

#!/bin/bash

DATABASE=`dbcli list-databases | awk 'NR>3{print $2}'`
FILTRO=`date -d "yesterday" +%A", "%B" "%d", "%Y`
MES=`date -d "yesterday" +%B`
TODAY=`date +%A", "%B" "%d", "%Y`
EMAIL=dsanmaci@emeal.nttdata.com
LOG=/opt/oracle/dcs/log/jobs/

for X in `dbcli list-jobs | grep -i "${DATABASE}" | grep "${FILTRO}" | grep Failure | awk '{print $1}'`
 do
   SUMMARY=`
     dbcli list-jobs | grep -i "$X" | awk '{print $1}' | \
     awk -v db="${DATABASE}" -v rango="${FILTRO}" -v mes="${MES}" '
          {

            "dbcli describe-job -i "$1"  | grep Description | cut -d: -f2- " | getline desc;
            "dbcli describe-job -i "$1"  | grep Progress    | cut -d: -f2- " | getline progre;
            "dbcli describe-job -i "$1"  | grep Message     | cut -d: -f2- " | getline msg;

            split(progre, tprogre,"%")

            printf "\n"
            printf "Tarea OCI: " desc" -(" tprogre[1] ")\n"
            printf "id: " $1
            id=$1
            printf "\n"
            printf "Error:" msg
              printf "\n\n"
            printf "Hilos con problemas dentro de la tarea "
            printf "\n"
            for (i=1;i<=80;i++) { printf "-" }
            printf "\n"
            "dbcli describe-job -i "$1" -l Verbose | grep Failure | grep "mes" | wc -l " | getline nfailure;
            while ( itera < nfailure) {
              "dbcli describe-job -i "$1" -l Verbose | grep Failure | grep "mes | getline line;
              split(line, tline, mes)
              printf tline[1]
              printf "\n"
              itera++
            }
            printf "\n\n"
            itera=0;
            printf "Hilos correctos dentro de la tarea "
            printf "\n"
            for (i=1;i<=80;i++) { printf "-" }
            printf "\n"
            "dbcli describe-job -i "$1" -l Verbose | grep Success | grep "mes" | wc -l " | getline nsuccess;
            while ( itera < nsuccess) {
              "dbcli describe-job -i "$1" -l Verbose | grep Success | grep "mes | getline line;
              split(line, tline, mes)
              printf tline[1]
              printf "\n"
              itera++
            }

         }
     '`
  printf "Current Database is: ${DATABASE}\n\n${SUMMARY}" | mailx -a ${LOG}${X}".log" -s "[${DATABASE}] Check Jobs OCI - ${X} - ${TODAY}." ${EMAIL}
done

Ahora solo faltaría planificarlo en cron. En mi caso es diario y a las 08, justo cuando se entra en la oficina.

[root@ scripts]# crontab -l
00 08 * * * /root/scripts/check_backups.sh

Listo. ¡Espero que os sirva!

1
Subscribe to my newsletter

Read articles from David Sanz directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

David Sanz
David Sanz

Soy desarrollador, Analista, DBA Oracle y Arquitecto OCI, certificado en OCI Migration and Integration Certified Professional y Certified Architect Associate con más de 15 años de experiencia en plataformas Oracle además de especialista en temas de rendimiento.