Shell Script para monitorizar sesiones activas en Oracle

Aunque el uso de una herramienta tan potente como EMGC de Oracle es una ayuda inestimable para la monitorización activa de una base de datos, a veces esa herramienta no es lo suficientemente flexible o personalizable para adaptarse a la forma de trabajar de cada uno. En mi caso he tenido la necesidad de determinar, por ejemplo, sesiones activas en base de datos y monitorizar su comportamiento. Para ello me generé un conjunto de scripts en bash shell que comparto a continuación.

Incluida en un script mayor, la siguiente es la función principal encargada de realizar la monitorización de las sesiones:

# 
# Función principal que se encarga de mostrar las sesiones activas. 
#
monitorizaSesiones() {
while (true) do
 clear
 date
 echo -e "\v"
 echo -e "\t${RESALTO}SESIONES ACTIVAS SID${resalto}"
 echo -e ""
 ./sesionesactivas.sh SID1 | awk '/Instancia/,/SYS@/' | grep -v 'SYS@'
 echo -e -n "\v Tasa de refresco: ${ROJO}"$refresco"${rojo} segundos "

done
}

La función uso de parámetros de formato definidos al inicio del script principal; cambio del fondo del texto (resalto) y cambio del color del texto (rojo). En otro post hablaré sobre como formatear texto desde bash shell. También se puede ver el uso simple de comandos como awk y grep.

Como se puede observar, esta función llama a su vez a otro script (en el mismo path en el que se encuentra el script principal). El cometido de éste es hacer llamadas desde el shell de linux a sqlplus para poder ejecutar scripts sql.

Script sesionesactivas.sh:

#!/bin/bash
export ORACLE_HOME=/opt/oracle/product/10.2.0/db
export ORACLE_BASE=/opt/oracle
export ORACLE_SID=$1
$ORACLE_HOME/bin/sqlplus -s /nolog << EOF
conn / as sysdba
@/opt/oracle/admin/SID/scripts/administracion/sesiones_activas.sql
exit;

En cuanto al script sql, sesiones_activas.sql:

set lines 150
set pages 100

col inst_id head 'Instancia|RAC'
col username head 'Usuario|oracle' format a15
col osuser head 'Usuario|S.O.' format a12
col machine head 'Maquina|remota' format a22
col sid head 'Sid|Oracle' format 9999
col process head 'Pid|Remoto' format 99999
col actividad head 'Minutos|activa' format 999999
col last_call_et head 'Segundos|activa' format 999999

select s.inst_id,s.sid,s.serial#,s.username,s.machine,s.process,s.osuser,to_char(s.logon_time,'hh24:mi dd/mm/yyyy') Conexion, ROUND(s.last_call_et/60,2) actividad, s.last_call_et
from gv$session s 
where s.status='ACTIVE' 
and s.username not in ('DBSNMP','SYS','SYSTEM')
order by s.machine,Conexion;

One Response to Shell Script para monitorizar sesiones activas en Oracle

  1. Pingback: Shell Script para monitorizar sesiones activas en Oracle « DbRunas – Noticias y Recursos sobre Bases de Datos

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: