Ads 468x60px

miércoles, 17 de abril de 2013

Script Bash Para Calcular Tamaño Tablespaces En Oracle.

Script Bash Para Calcular Tamaño Tablespaces En Oracle.


Aunque ciertamente DBA Oracle no es primordialmente mi tarea a ejercer, soy mas administradora de sistemas POSIX compatibles, lo cierto es que un SysAdmin de sistemas POSIX no esta completo sino maneja o conoce la DB Oracle. Porque afirmo esto? porque a nivel empresarial, los sistemas POSIX y Oracle son como mugre y uña, vienen juntos instalados o se instalan uno dentro del otro desde el dia 1. Por lo que si eres o pretendes ser SysAdmin de sistemas POSIX compatibles, te recomiendo que no seas 100% indiferente a esta base de datos.

Olvidate del puritismo y fanatismo de ser pro software libre y querer implementar otra DB (Como PostgreSQL) en sustitucion de Oracle dentro de una empresa donde todo ya esta implementado. 

Una de las cosas que mas preocupan a las empresas es el llenado de los tablespaces de Oracle, por lo cual es totalmente recomendable monitorearlos. Hay empresas que disponen de softwares de monitoreo exclusivos para esto como Nagios u otro, pero en caso de que tu unico objetivo sea monitorear el espacio disponible de los tablespaces local o remoto de una o mas DB Oracle, un shell script puede perfectamente ejercer esta tarea. He creado un Bash Script que cumple esta funcion sin problemas:

if [  $@  < 3 ]; then
echo "Para ejecutarme debes especificar:   comando  usuario  contrasena  IP  SID   -  del servidor Oracle"
exit 1;
fi

sqlplus /nolog << EOF
connect $1/$2@'(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=$3) (PORT=1521)))(CONNECT_DATA=(SID=$4)))' as sysdba
set feed off
set linesize 100
set pagesize 200
spool tablespace.alert

select f.tablespace_name, round((sum(d.bytes/1024/1024))+(sum(f.bytes/1024/1024))) Espacio_Total, round(sum(d.bytes/1024/1024)) "Utilizado Mb", (round((sum(d.bytes/1024/1024))+(sum(f.bytes/1024/1024))))-(round(sum(d.bytes/1024/1024))) Espacio_Libre, substr(((round((sum(d.bytes/1024/1024))+(sum(f.bytes/1024/1024)))-round((sum(d.bytes/1024/1024))+(sum(f.bytes/1024/1024))))-(round(sum(d.bytes/1024/1024))))/round((sum(d.bytes/1024/1024))+(sum(f.bytes/1024/1024))),3,2)||' %' Porcentaje_Usado from dba_data_files d, dba_free_space f where f.tablespace_name = d.tablespace_name and f.tablespace_name not in('SYSTEM','SYSAUX','USERS','TBS_DEFAULT_USER','UNDOTBS1') group by f.tablespace_name;

spool off
exit
!
EOF
 

cat tablespace.alert | grep "%" > tablespace.tmp
sed 1d tablespace.tmp > tablespace.temp

El script anterior crea un archivo TXT llamado tablespace.tmp con la siguiente info o similar:

calcular tablespace

Donde se expone el porcentaje total ocupado por espacio, espacio total de cada tablespace, cuanto se ha ocupado y cuanto queda libre en MB. En la consulta SQL se ignoran tablespaces del sistema como SYSTEM, SYSAUX, USERS, etc. Por lo cual sino deseas ignorar estos, excluye el NOT IN de la consulta SQL.

El script shell funciona siempre y cuando tengas las utilidades de Oracle Client instaladas ya que el script da uso del comando sqlplus para realizar la coneccion local o remota a otros servidores.

No hay comentarios:

Publicar un comentario