Historial del Crecimiento del Tamaño de la Base de Datos Oracle

Raúl Antonio Molina Alvarenga

19 de Abril de 2023

#OracleACE

#OracleTipsSV

A veces nos hacen la pregunta, cuanto espacio debemos reservar para el crecimiento a futuro de la base de datos, o cuanto espacio hemos consumido en un año anterior.

Esa información de forma natural en la base de datos, sin precalcularlo es un poco complejo obtenerla, especialmente si no tenemos vistas históricas que se obtienen con EE y Packs de diagnóstico y tuneo.

Aquí un pequeño TIP para poder calcular dicha información y almacenarlo, no considera el UNDO  y TEMP, solo Información real de usuario.

Crear Tabla que almacenara la información histórica.

create table db_space_hist (

timestamp    date,

total_space  number(8),

used_space   number(8),

free_space   number(8),

        pct_inuse    number(5,2),

        num_db_files number(5)

);

 

Crear procedimiento de colección de Información:

CREATE OR REPLACE PROCEDURE db_space_history AS

BEGIN

   INSERT INTO db_space_hist 

SELECT SYSDATE, total_space,

        total_space-NVL(free_space,0) used_space,

        NVL(free_space,0) free_space,

        ((total_space - NVL(free_space,0)) / total_space)*100 pct_inuse,

        num_db_files

 FROM ( SELECT SUM(bytes)/1024/1024 free_space

        FROM   sys.DBA_FREE_SPACE WHERE tablespace_name NOT LIKE '%UNDO%') FREE,

      ( SELECT SUM(bytes)/1024/1024 total_space,

               COUNT(*) num_db_files

        FROM   sys.DBA_DATA_FILES WHERE tablespace_name NOT LIKE '%UNDO%') FULL;

   COMMIT;

END;

/

Crear el JOB que calculara la información, la Frecuencia puede ser la deseada, o necesitada, diaria, semanal , mensual.(Puede usarse o mejor dicho usar Scheduler JOBS).

DECLARE

  X NUMBER;

BEGIN

  SYS.DBMS_JOB.SUBMIT

    (

      job        => X

     ,what       => 'OBS.DB_SPACE_HISTORY;'

     ,next_date  => sysdate+1

     ,INTERVAL   => 'TRUNC(SYSDATE+7)'

     ,no_parse   => FALSE

    );

END;

La información se consulta asi:

select * from db_space_hist order by timestamp desc;

Espero les sea de Utilidad

Saludos.