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.
[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]