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.
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:
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.
NOTA: Antes de ejecutar los respectivos ALTER a tablespace, es necesario ver con cuando espacio en disco se dispone.