Autor Tema: MONITOREO Y AJUSTE A TABLESPACE [ORACLE]  (Leído 7405 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado SiKa

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Mensajes: 2548
  • .
MONITOREO Y AJUSTE A TABLESPACE [ORACLE]
« : mayo 20, 2010, 04:01:52 pm »
Muchas veces se vuelve tedioso, engorroso y hasta complicado tener que ajustar tablespace de forma manual, por lo general es recomendable que el espacio utilizado en tablespace no supere el 90% como minimo, y cuando eso sucede, aveces no sabemos como calcular el porcentaje ideal para aumentarlo.

Pongo entonces un script que espero sea de utilidad para quienes tienen que ajustar tablespace de forma manual.

PRIMER PASO:
Se debe crear una vista que nos de el panorama general de nuestros tablespaces.
Código: [Seleccionar]
CREATE OR REPLACE FORCE VIEW "SOFTWORKS"."DBA_TABLESPACE_MONITOR" ("NOMBRE",
"ESTADO", "TAMAQO", "UTILIZADO", "LIBRE", "PRCT_USED")
AS
  SELECT
    t.tablespace_name nombre,
    t.status estado,
    ROUND (MAX (d.BYTES)                            / 1024 / 1024, 2) tamaQo,
    ROUND ( (MAX (d.BYTES)                          / 1024 / 1024) - (SUM (DECODE (f.BYTES, NULL, 0,
    f.BYTES))                                       / 1024 / 1024),2) utilizado,
    ROUND (SUM (DECODE (f.BYTES, NULL, 0, f.BYTES)) / 1024 / 1024, 2 ) libre ,
    ROUND(((ROUND ( (MAX (d.BYTES)                  / 1024 / 1024) - (SUM (
    DECODE (f.BYTES, NULL, 0, f.BYTES))             / 1024 / 1024),2))/(ROUND (
    MAX (d.BYTES)                                   / 1024 / 1024, 2) ))*100,2)
    PRCT_USED
  FROM
    dba_free_space f,
    dba_data_files d,
    dba_tablespaces t
  WHERE
    t.tablespace_name      = d.tablespace_name
  AND f.tablespace_name(+) = d.tablespace_name
  AND f.file_id(+)         = d.file_id
  GROUP BY
    t.tablespace_name,
    t.pct_increase,
    t.status
  ORDER BY
    6 DESC ;

AL realizar un select a la vista nos quedara asi:


SEGUNDO PASO:
Ejecutar el siguiente script:
Código: [Seleccionar]

SELECT   (SELECT   FILE_NAME
            FROM   dba_data_files
           WHERE   tablespace_name = x.nombre
                   AND FILE_ID IN (SELECT   MAX (FILE_ID)
                                     FROM   dba_data_files
                                    WHERE   tablespace_name = x.nombre))
            datafile,
         x.*,
        FLOOR (((((prct_used - 90)+1.5) * UTILIZADO)/100)) AJUSTE,
            'ALTER DATABASE DATAFILE '
         || ''''
         || (SELECT   FILE_NAME
               FROM   dba_data_files
              WHERE   tablespace_name = x.nombre
                      AND FILE_ID IN (SELECT   MAX (FILE_ID)
                                        FROM   dba_data_files
                                       WHERE   tablespace_name = x.nombre))
         || ''''
         || ' RESIZE '
         || FLOOR (((((prct_used - 90)+1.9) * UTILIZADO)/100)+TAMAQO)
         || 'M;'
            COMANDO
  FROM   SOFTWORKS.DBA_TABLESPACE_MONITOR X
 WHERE   PRCT_USED > 90;

Este script, te da el nombre y la ruta del datafile que se debe ajustar, el nombre logico del tablespace, el tamaño, el valor de ajuste y la linea de COMANDO que debes ejecutar para tal fin.


De esta manera resulta bastante practico obtener las lineas de comando para ajustar los tablespaces sin tener que ir uno a uno.  Unicamente lo que se tiene que hacer es copiar la columna COMANDO y ejecutarlos en otra ventana y listo.

Espero sea de utilidad a mas de alguno.     :thumbsup:

NOTA: Antes de ejecutar los respectivos ALTER a tablespace, es necesario ver con cuando espacio en disco se dispone.