Autor Tema: ORACLE 9i,10g,11g - Mantenimiento a Tablespace [espacio]  (Leído 3261 veces)

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

Desconectado SiKa

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Mensajes: 2548
  • .
ORACLE 9i,10g,11g - Mantenimiento a Tablespace [espacio]
« : junio 12, 2014, 09:14:31 am »
Una de las actividades como Administrador de Base de Datos, es la de dar mantenimiento a los Tablespace's de la base.  Si bien es cierto es una actividad sencilla, aun así  requiere de una alta responsabilidad por parte del administrador.


He conocido Administradores que gustan aumentar espacio a sus tablespace's al "tantiometro", es decir asignando cierta cantidad y posteriormente ver si eso fue suficiente o no.

Para evitar esos desaciertos, yo utilizo un scripts sencillo que da la sentencia SQL para adicionarle espacio solo únicamente a aquellos tablespace que su espacio libre es menor o igual al 10% de su espacio asignado.

 

Código: [Seleccionar]
[font=verdana][color=blue]SELECT "TABLESPACE_NAME",
       "PERCENT_USED",
       "PCT_USED",
       "ALLOCATED",
       "USED",
       "FREE",
       CASE
          WHEN "PCT_USED" >= 90
          THEN
                'ALTER DATABASE DATAFILE '
             || ''''
             || (SELECT file_name
                   FROM dba_data_files
                  WHERE     ROWNUM = 1
                        AND autoextensible = 'YES'
                        AND STATUS = 'AVAILABLE'
                        AND tablespace_name = X."TABLESPACE_NAME")
             || ''''
             || ' RESIZE '
             || (ROUND ( ( ( ("PCT_USED" - 77) / 100) + 1) * "ALLOCATED"))
             || 'M;'
          ELSE
             ' '
       END
          "ALTER_ATAFILE"
  FROM (  SELECT a.tablespace_name,
                    'SQLDEV:GAUGE:0:100:0:0:'
                 || NVL (
                       ROUND ( ( (c.bytes - NVL (b.bytes, 0)) / c.bytes) * 100,
                              2),
                       0)
                    percent_used,
                 ROUND ( ( (c.bytes - NVL (b.bytes, 0)) / c.bytes) * 100, 2)
                    PCT_USED,
                 c.bytes / 1024 / 1024 allocated,
                 ROUND (c.bytes / 1024 / 1024 - NVL (b.bytes, 0) / 1024 / 1024,
                        2)
                    used,
                 ROUND (NVL (b.bytes, 0) / 1024 / 1024, 2) free,
                 c.datafiles
            FROM dba_tablespaces a,
                 (  SELECT tablespace_name, SUM (bytes) bytes
                      FROM dba_free_space
                  GROUP BY tablespace_name) b,
                 (  SELECT COUNT (1) datafiles,
                           SUM (bytes) bytes,
                           tablespace_name
                      FROM dba_data_files
                  GROUP BY tablespace_name) c
           WHERE     b.tablespace_name(+) = a.tablespace_name
                 AND c.tablespace_name(+) = a.tablespace_name
        ORDER BY NVL ( ( (c.bytes - NVL (b.bytes, 0)) / c.bytes), 0) DESC) X;
[/color][/font]