Eliminar temporales de base de datos Oracle

En las bases de datos Oracle se utilizan archivos temporales para realizar algunas operaciones SQL que no pueden o no conviene que sean procesadas completamente en memoria. Por defecto estos archivos de datos se almacenan en el Tablespace TEMP de la instancia.

Normalmente se cuenta con un archivo de datos dentro del tablespace, TEMP01.DBF, el que puede a su vez estar configurado para crecer automáticamente según la necesidad, a partir de un tamaño inicial dado.

 

Existen algunos casos en que aplicaciones intensivas en uso de consultas o con problemas en el diseño de éstas pueden hacer crecer en forma desmedida el espacio utilizado por estos temporales. En esos casos veremos que el archivo original se ha multiplicado, y ahora contamos con TEMP02.DBF…TEMP0n.DBF.

Eliminación

 

Estos archivos pueden ser eliminados o achicados cuando sea necesario, a menos que justo en el momento en que intentemos hacerlo alguien los esté utilizando. Para nuestro ambiente de desarrollo esto no debiera ocurrir.

Los pasos para la eliminación de los temporales consisten en una secuencia de instrucciones SQL de modificación de la base de datos. A continuación se detallan según la versión de Oracle de que se trate.

 

Procedimiento para Oracle 9i

Lo primero es ver la situación de los temporales. Hay dos formas:

  • A través del Enterprise Manager Console, en Almacenamiento-> Tablespaces->Temp. En la vista de detalles es posible ver la lista de archivos temporales creados hasta el momento, junto con su tamaño y configuración de crecimiento.
  • Por consulta SQL:
SELECT tablespace_name, file_name, bytes
FROM dba_temp_files WHERE tablespace_name = 'TEMP';

Confirmada la situación, eliminamos los archivos temporales:

alter database TEMPFILE 'e:\oracle\oradata\rolap2\temp03.dbf'
 drop including datafiles;
alter database TEMPFILE 'e:\oracle\oradata\rolap2\temp02.dbf'
 drop including datafiles;
alter database TEMPFILE 'e:\oracle\oradata\rolap2\temp01.dbf'
 drop including datafiles;

Esto para el caso en que tenemos tres archivos temporales. La idea es que la sentencia SQL debe ser ejecutada para cada archivo temporal. Ojo que la ruta es particular para una de nuestras instancias corriendo sobre Windows.

Eliminados los archivos creamos uno nuevo para partir de cero:

ALTER TABLESPACE temp ADD TEMPFILE 'e:\oracle\oradata\rolap2\
temp01.dbf' SIZE 512m
AUTOEXTEND ON NEXT 250m MAXSIZE UNLIMITED;

Aquí estamos especificando que debe partir en 512M y crecer ilimitadamente. Si las consultas siguen igual, implica que tendremos la misma situación entre manos en el mediano o corto plazo.

Si todo salió bien, podemos ejecutar el SELECT inicial o revisar la consola para verificar que todo está bien.

El último paso, si todo salió bien, es verificar que los archivos temporales fueron efectivamente borrados del disco. Si no es así, pueden ser eliminados manualmente en caso de que hayamos tenido éxito en los pasos anteriores.