May 6, 2016

Oracle - Automatizar AWR y enviar por correo electronico desde ambiente unix

A más de alguien le han solicitado si es posible automatizar el envío de un reporte AWR por mail. Bueno esto se puede desarrollar de copiosas maneras. Esta es tan sólo una de ellas.

Esto se basa en dos scripts:

awr.sh  -> el script que envia el correo
awr.sql -> el PLSQL que arma el archivo HTML con el reporte.

Ahora a continuación el contenido de cada archivo. Como se podrán dar cuenta esto lo desarrollé para un cliente que me solicito esto. La idea era enviar el contenido del reporte AWR cada 2 horas, por lo que el PLSQL muestra el rendimiento de la base durante las últimas dos horas. Eso lo pueden modificar como gusten en la clausula where del PL/SQL

awr.sh
#!/bin/ksh
# @author  Felipe Donoso, felipe@felipedonoso.cl
export ORACLE_BASE=/oracle
export ORACLE_HOME=/oracle/UMP/102_64
export LIBPATH=/usr/lib:/lib:/usr/sap/UMP/SYS/exe/run:/oracle/UMP/102_64/lib
export PATH=/oracle/UMP/102_64/bin:.:/oracle/UMP:/usr/sap/UMP/SYS/exe/run:/usr/bin:/etc:/usr/sbin:/usr/ucb:/usr/bin/X11:/sbin:/usr/java5/jre/bin:/usr/java5/bin:/oracle/UMP/102_64/OPatch
script=/oracle/UMP/scripts/Mng_Reporte_AWR_CLMDB/awr.sql
reporte=/oracle/UMP/scripts/Mng_Reporte_AWR_CLMDB/awr.html
sqlplus -s "sysibm/ibm655@10.22.1.48:1521/CLMDB" <<EOF
set feedback off
set SERVEROUTPUT ON size unlimited
spool $reporte
@$script
spool off
exit;
EOF

uuencode $reporte Reporte_AWR_$(date +%Y%m%d_%H%M).html |  mailx -s "SMU - Reporte automatizado AWR CLMDB" fdonoso@cl.ibm.com


awr.sql
DECLARE
   dbid           NUMBER;
   inst_id        NUMBER;
   bid            NUMBER;
   eid            NUMBER;
   db_unique_name VARCHAR2(30);  
   host_name       VARCHAR2(64);
BEGIN
SELECT MIN (snap_id), MAX (snap_id)
     INTO bid, eid
     FROM dba_hist_snapshot
    WHERE begin_interval_time > (sysdate-2/24)
;
   SELECT dbid, inst_id, db_unique_name
     INTO dbid, inst_id, db_unique_name
     FROM gv$database;

   SELECT host_name INTO host_name
     FROM v$instance;
FOR c1_rec IN
      (SELECT output FROM TABLE (DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML(dbid,inst_id, bid, eid, 8 )))
      --(SELECT output FROM TABLE (DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_TEXT(dbid,inst_id, bid, eid, 8 )))
 LOOP
     DBMS_OUTPUT.PUT_LINE(c1_rec.output);
   END LOOP;
END;
/


En el el script de awr.sh se invoca en la variable $script que apunta a la ruta PLSQL. También al final de dicho archivo podrán ver que se utiliza uuencode para enviar el archivo como reporte adjunto (esto ocupa mailx pero pueden ocupar lo que ustedes deseen).

sólo bastaría con editar las variables de ambiente del archivo awr.sh y nada más ejecutarlo llegará un correo de este tipo:


Al abrir el archivo adjunto que llega por correo podrán ver lo siguiente:



No comments:

Post a Comment