1. OBJETIVOS

  2. Automatizar el control de espacios libre en los tablespaces de base de datos mediante un procedimiento pl/sql.
    Se pretende facilitar un procedimiento que compruebe el espacio libre del tablespace y si este es menor de un portentaje especificado del total se envie un correo de alerta para que el administrador pueda aumentar el tamaño del tablespace


  3. COMO VER EL ESPACIO LIBRE DE LOS TABLESPACES DE ORACLE

  4. Para ver el espacio libre que queda en un tablespace tenemos que mirar en la tabla dba_free_space

    SELECT tablespace_name,
    ROUND(sum(bytes)/1024/1024,0)
    FROM dba_free_space
    WHERE tablespace_name NOT LIKE 'TEMP%'
    GROUP BY tablespace_name;

    Con esta consulta obentemos el nombre del tablespace y el espacio en Megas libre

    Para ver el espacio total en un tablespace tenemos que mirar en la tabla dba_data_files

    SELECT tablespace_name,
    round(sum(BYTES/1024/1024),0)
    FROM dba_data_files b
    WHERE tablespace_name NOT LIKE 'TEMP%'
    GROUP BY b.tablespace_name;

    Con esta consulta obentemos el nombre del tablespace y el espacio total en Megas que puede llegar a tener


  5. COMO ENVIAR UN CORREO EN PL/SQL

  6. Como hemos dicho en el objetivo de este articulo, cuando el tablespace se esté quedando sin espacio libre, se recibirá un correo.
    Vamos a proporcionar un procedimiento para poder enviar un correo.

    CREATE OR REPLACE PROCEDURE SEND_MAIL(SENDER IN VARCHAR2, RECIPIENT IN VARCHAR2, SUBJECT IN VARCHAR2, MESSAGE IN VARCHAR2) IS
    -- SENDER: direccion de correo de quien envia el mail
    -- RECIPIENT: dirreción de correo a la que va dirigida el mail
    -- SUBJECT: Es el asunto del correo
    -- ESSAGE: es el texto del mensaje
    mailhost CONSTANT VARCHAR2(30) := 'mail.server.es'; -- servidor de correo , sustituir cadena por una valida
    mesg VARCHAR2(1000); -- texto del mensaje
    mail_conn UTL_SMTP.CONNECTION; -- conexion con el servidor smtp
    BEGIN
    mail_conn := utl_smtp.open_connection(mailhost, 25);
    mesg := 'Date: ' ||
    TO_CHAR( SYSDATE, 'dd Mon yy hh24:mi:ss' ) || CHR(13) || CHR(10) ||
    'From: <'|| Sender ||'>' || CHR(13) || CHR(10) ||
    'Subject: '|| Subject || CHR(13) || CHR(10)||
    'To: '||Recipient || CHR(13) || CHR(10) || '' || CHR(13) || CHR(10) || Message;
    utl_smtp.helo(mail_conn, mailhost);
    utl_smtp.mail(mail_conn, Sender);
    utl_smtp.rcpt(mail_conn, Recipient);
    utl_smtp.data(mail_conn, mesg);
    utl_smtp.quit(mail_conn);
    EXCEPTION
    WHEN OTHERS THEN
    RAISE_APPLICATION_ERROR(-20004,SQLERRM);
    END send_mail;

    Sustituir mail.server.es por un servidor smtp valido


  7. PROCEDIMIENTO PARA CONTROLAR EL ESPACIO LIBRE DE LOS TABLESPACES

  8. A través de este procedimiento comprobamos que queda más de un porcentaje establecido libre en el tablespace con respecto a su espacio total
    Si el espacio libre es menor al limite establecido ( portentaje ) del total del tablespace se envia un correo utilizando el procedimiento que se ha explicado en el punto anterior.

    CREATE OR REPLACE PROCEDURE ALERTA_ESPACIO (limite number) IS
    -- CREAMOS EL CURSOR CON EL NOMBRE DE LOS TABLESPACES
    -- Y ESPACIO LIBRE
    CURSOR c_espacio_libre
    IS
    SELECT tablespace_name,
    ROUND(sum(bytes)/1024/1024,0)
    FROM dba_free_space
    WHERE tablespace_name NOT LIKE 'TEMP%'
    GROUP BY tablespace_name;
    -- CREAMOS EL CURSOR CON EL NOMBRE DE LOS TABLESPACES
    -- Y ESPACIO total
    CURSOR c_espacio_total
    IS
    select tablespace_name,
    round(sum(BYTES/1024/1024),0)
    FROM dba_data_files b
    WHERE tablespace_name NOT LIKE 'TEMP%'
    GROUP BY b.tablespace_name;
    -- DEFINIMOS LAS VARIABLES PARA METER EL CONTENIDO DEL CURSOR
    c_nombre VARCHAR2(20);
    c_libre NUMBER(10);
    c_total NUMBER(10);
    v_bbdd VARCHAR(20);
    BEGIN
    -- OBTENEMOS EL NOMBRE DE LA BASE DE DATOS
    SELECT name into v_bbdd from v$database;
    -- ABRIMOS EL CURSOR Y NOS POSICIONAMOS EN LA PRIMERA LINEA
    OPEN c_espacio_libre;
    OPEN c_espacio_total;
    FETCH c_espacio_libre INTO c_nombre,c_libre;
    FETCH c_espacio_total INTO c_nombre,c_total;
    -- EN CASO DE QUE EXISTA RESULTADO REALIZAMOS LAS COMPROBACIONES DE ESPACIO
    WHILE c_espacio_libre%found
    LOOP
    -- comprobacion del tablespace ES MENOR DE limite MEGAS
    IF (c_libre * 100) / c_total < limite THEN
    send_mail('dedireccion@orasite.es','paradirecion@orasite.es',
    'ALERTA DE ESPACIO EN BASE DE DATOS ' || v_bbdd,
    'El tablespace con nombre: ' || c_nombre || ' se esta quedando sin espacio' ||chr(10)||
    'El tamaño restante es de: ' || c_libre || ' Megas');
    END IF;
    FETCH c_espacio_libre INTO c_nombre, c_libre;
    FETCH c_espacio_total INTO c_nombre,c_total;
    END LOOP;
    CLOSE c_espacio_libre;
    CLOSE c_espacio_total;
    END;
    /

    Este procedimiento recibe un parametro, que será el porcentaje que queramos comprobar. Un valor normal sería 10, de esta forma comprobará que el espacio libre sea mayor de un 10 por ciento del tamaño total del tablespace.
    En caso de que no sea mayor que ese límite puesto, se enviará un mail. Modificar las direcciones de correo, por direcciones de correo validas.


  9. AUTOMATIZAR LA TAREA DE COMPROBACION DE TABLESPACES

  10. Esta tarea se puede automatizar poniendo un job ( tarea ) en la base de datos y que compruebe cada x tiempo si los tablespaces se han llenado.
    Si no tenemos ningún job en la base de datos, antes de poner un job tenemos que asegurarnos que el valor job_queue_processes es mayor que 0.



Escribe un comentario:

Autor:

Comentarios:

por Anónimo | 10/14/2006 8:55:17 PM

RE: Controlar espacio de los tablespaces

Es la primera ves que entro en esta pagina, y estoy viendo el tutorial de control de espacio en filesystem y la verdad qeu esta muy bueno para implementarlo si en el ambiente donde tengamos la DB no tiene ninguna herramienta para este tipo de controles.
Donde trabajo tenemos chequeos de espacio desde el SO, pero voy a probar con PL a ver como funciona, más adelante les cuento
Muy buena la pagina.
Saludos Manuel

por Anónimo | 11/10/2006 10:16:05 AM

RE: Controlar espacio de los tablespaces

estoy muy interesada en saber como enviar correos desde un plsql. si cojo el código que poneis me da un error 06550 porque no tengo declarado sys.utl_smtp... podeis ayudarme?

por Anónimo | 11/12/2006 12:33:00 PM

RE: Controlar espacio de los tablespaces

Para la utilización del paquete sys.utl_smtp se precisa tener Jserver, para ello hay que ejecutar los siguientes scripts con el usuario sys

SQL> @$ORACLE_HOME/javavm/install/initjvm.sql
SQL> @$ORACLE_HOME/rdbms/admin/initplsj.sql

por Anónimo | 5/9/2007 6:59:43 PM

RE: Controlar espacio de los tablespaces

Hola cordial saludo, me puede por favor aclarar lo siguiente, para el envio del mail necesito instalar

SQL> @$ORACLE_HOME/javavm/install/initjvm.sql
SQL> @$ORACLE_HOME/rdbms/admin/initplsj.sql

luego instalar

{ORACLE_HOME}/rdbms/admin/utlsmtp.sql

Estos scripts estan disponibles en que versiones de Oracle ???

Si quisiera usar UTL_MAIL que debo hacer ?


Gracias por su colaboración...

por Anónimo | 5/10/2007 8:33:32 AM

RE: Controlar espacio de los tablespaces

Hola,
Yo he utilizado los scripts en una version de oracle9.
En cuanto a UTL_MAIL no lo he utilizado nunca, pero mirando la documentacion oficial de oracle pone lo siguiente:
Para instalarlo:
sqlplus sys/<pwd>
SQL> @$ORACLE_HOME/rdbms/admin/utlmail.sql
SQL> @$ORACLE_HOME/rdbms/admin/prvtmail.sql
Definir el parametro SMTP_OUT_SERVER en el fichero init.ora.
Los procedeimientos que se pueden utilizar son
SEND Procedure
SEND_ATTACH_RAW
SEND_ATTACH_VARCHAR2

No obstante, echale un vistazo a la pagina http://download-west.oracle.com/docs/cd/B13789_01/appdev.101/b10802/u_mail.htm

Un saludo.

por Anónimo | 5/28/2007 7:37:36 PM

RE: Controlar espacio de los tablespaces

Me esta marcando el error Ora-06512 sera que en el servidor no esta dado de alta mi SMTP?.

por Lucas | 11/10/2007 10:18:18 PM

RE: Controlar espacio de los tablespaces

Muy bueno me salvaste

por DBA | 3/4/2010 4:50:34 AM

RE: Controlar espacio de los tablespaces

Este procedimiento de verificación de espacio libre en tablespaces es muy cutre y de perdedores.

Thank youuuuu.
No man behind.
Ebony.
Morocha.

por jaimico | 8/10/2010 11:46:22 AM

RE: Controlar espacio de los tablespaces

Este procedimiento de verificación de espacio libre en tablespaces es muy cutre y de perdedores.
El perdedor sos vos ya existe el console manager, en el cual podes ver en conjunto a toda la base de datos, pero antes esta era la mejor manera de controlar el espacio de los tables spaces...



Buscar errores de Oracle


Buscar en la web

 
Web orasite.com
· Tutoriales
- Export / Import Oracle 9i
- Instalación Oracle 10g
- Archivos de configuración de red para Oracle
- Administración de usuarios
- Export Oracle 10g
- init.ora spfile.ora fichero de parámetros oracle
- Configurar modo archivelog
- Introducción Oracle 10g
- Arrancar o parar base de datos Oracle
- Tunning Oracle
- Seguridad listener Oracle 10g
- Instalación statspack
- Parámetros memoria SGA
- Activar auditoria de la base de datos
- Oracle Jobs (9i)
- Controlar espacio tablespaces
- Hotbackup de una base de datos Oracle
- Búsquedas en Oracle 10g case-insensitive
- Recover database until time
- Privilegios sysoper y sysdba
- Consultas sobre V$
- Bloquear acceso a base de datos por IP
- Problemas Oracle Jobs
- Cambiar ubicación base de datos
- Reconstrucción de índices
- Encriptación e integridad de datos en Oracle
- Configuración de memoria
- Instalación de la máquina virtual Java
- Loadjava y Dropjava en Oracle
- Cambiar a modo restricted session
- Recuperación modo noarchivelog
 
· Oracle FAQ
- Oracle database
 
· Noticias
- Oracle OpenWorld 2009
- Oracle compra Sun
- Oracle 11g presentada
- Oracle vulnerable a inyección SQL en cursores
- Procesos de negocio con Oracle
- OracleXE para Debian
 
· Descargas
- Free Toad
 
· Errores Oracle
· Libros sobre Oracle
· Sitios relacionados
- Trabajos de Oracle
- ZonaOracle.com
- AjpdSoft
- La Web del Programador
· Sitios recomendados
- Cronica24.com
- TPV
- Buscar trabajo
Los contenidos de esta web son producto de la colaboración de sus usuarios, por lo que puede haber erratas. Si encuentras una información incorrecta agradeceremos que nos lo comuniques en nuestra dirección:
Cualquier información aquí publicada es de libre distribución, siempre y cuando se haga referencia mediante un link al documento original.
Orasite.com