Reducir tablespace TEMP en ORACLE 10g

Esta semana nos hemos encontrado a una de nuestras bases de datos con un tablespace temporal (TEMP) que había crecido hasta los 32Gb. Evidentemente, habíamos cometido un error en la postinstalación de la base de datos, al no modificar el parámetro MAXSIZE, y alguna aplicación (esta base de datos da soporte a varias aplicaciones) había hecho que este tablespace crezca hasta ese tamaño.

Para más inri, la base de datos está en un entorno de producción, con lo cual el prodedimiento a aplicar debería minimizar la pérdida de servicio (o sea, o que no hubiese que parar la base de datos, o que la parada fuese en una franja horaria en el que la perdida de servicio no fuese muy apreciable; ésto último es complicado puesto que las aplicaciones que hacen uso de esta base de datos deben estar activas las 24 horas del día).

Otro problema a priori era el de los esquemas creados en la base de datos; pero éste fué descartado rápidamente, puesto que al tratarse de una versión 10.2, en la creación de un esquema no se indica un tablespace temporal, el esquema hace uso del tablespace temporal por defecto de la base de datos.

La solución que se contempló, y que no implicaba parada de la base de datos, consistía en crear un nuevo tablespace temporal, configurarlo como tablespace temporal por defecto de la base de datos y borrar el antiguo tablespace de 32Gb. El procedimiento aplicado fué el siguiente:

  • Crear el nuevo tablespace temporal de la base de datos, al que llamaremos TEMP2.

CREATE TEMPORARY TABLESPACE TEMP2
TEMPFILE SIZE 3072M AUTOEXTEND ON NEXT 128M MAXSIZE 4096M;

Obsérvese como en la creación de este tablespace se asigna un valor MAXISZE.

  • Configurar TEMP2 como tablespace temporal por defecto de la base de datos.

ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP2;

  • Poner en estado OFFLINE el antiguo tablespace temporal.

En este punto se observa que no se puede hacer:

ALTER TABLESPACE TEMP OFFLINE;

La bd devuelve el error ORA-03217.

Para solucionarlo, hay que actuar sobre los datafiles del tablespace. En este caso, uno:

ALTER DATABASE TEMPFILE ‘+disco/BD/tempfile/datafile’ OFFLINE

  • Borrar el antiguo tablespace temporal.

DROP TABLESPACE TEMP INCLUDING CONTENTS AND DATAFILES;

  • Comprobaremos ahora como los esquemas existentes en la base de datos tienen como tablespace temporal por defecto TEMP2.

16 Responses to Reducir tablespace TEMP en ORACLE 10g

  1. Luis says:

    muy bueno acerca de la administracion del tablespace.
    como crear un tablespace x defecto y configurarlo para que sea temporal y por defecto
    y eliminar el anterior.

    Ok,Ok

  2. Hollmann says:

    Muy buen comentario, no soy ducho en esto pero si me parece interesante el tema por que me paso a mi lo que hice fue poner No Archive la base de datos y borrar unos archive log, pero mi pregunta no voy a perder información al momento de borrar el tablespace temp y crear el otro como hago que la informacion que esta en temp 1 pase al temp 2 y hablando los dos temp estarian en disco diferentes por que el uno tiene topado el disco duro de Antemano agradezco tu ayuda

  3. jop89s says:

    En respuesta al comentario ‘2’. En primer lugar, es muy peligroso borrar archive log sin hacer previamente una copia de los mismos; esto no se debería hacer nunca, ya que en caso de tener que recuperar alguna transacción de los archivelogs borrados, tendríamos un problema serio. En segundo lugar, en un tablespace temporal no hay información relevante; se usa únicamente para ordenaciones y alguna otra información necesaria para completar una SELECT, con lo cual no se pierde información al borrarlo. En el caso que comento en este post, necesitábamos borrarlo porque había crecido hasta los 32Gb, y un tablespace no se puede reducir de tamaño; cuando no hay más remedio que hacer esto, debe ser eliminado y sustituido por otro con el mismo nombre.

  4. Benito Cruz says:

    Muy buen articulo, yo tengo uan BD 9.2.0, entonces aqui si tenemos el problema de que los equemas tienen asignado el table space TEMP por default, para hacer este cambio , creo que habria que hacer un poco mas de trabajo, se tendria que asignar el nuevo table space temporal, para despues borrar el original table space.

  5. roque says:

    felicitaciones por el articulo

  6. ivan says:

    Hola, yo tengo un TEMP hasta 4 Gb, lo que quiero es limpiar ese log, alguien puede ayudarme?

    Es necesario generar otro TEMP como respaldo?

  7. Stella says:

    Hola. Muy bien!
    Me pregunto si se puede aplicar tal cual en una BD 9i?
    Gracias…

  8. jop89s says:

    Para Stella,

    No he probado el procedimiento en Oracle 9i. No te podría dar una respuesta totalmente satisfactoria. Sin embargo el aplicar esto mismo en una 9i no te va a dejar sin bd; lo más que puede ocurrir es que tengáis que planificar un reinicio de la misma.

  9. Luisinho says:

    Se puede aplicar sin problema tambien en oracle9i. Lo recomendable para una buena administración es contar con 2 tablespaces temporales sea en 9i o 10g, uno asignado a los esquemas padres y otro para los usuarios de consultas y desarrolladores, con esto se puedo saber exactamente quien esta haciendo demasiado uso de los segmentos temporales.

  10. guili says:

    Hola. No se si este hilo sigue activo, pero queria añadir un comentario.
    Según he comprobado no es necesario crear otro tablespace para reducir el espacio. La solución es mucho mas sencilla:

    – Añadimos un nuevo temfile de tablespace por ejemplo 4 GB. «ALTER TABLESPACE XXXX ADD TEMPFILE ‘…’ SIZE 4096M;»
    – Ponemos offline el tempfile grande que tenemos para que deje de estar en utilizado.
    – Lanzamos un DROP del tempfile.
    «ALTER TABLESPACE XXXX DROP TEMPFILE ‘….’;»

  11. Maria says:

    He seguido los paso y me ha funcionado correctamente. Me ha sido de gran ayuda
    Gracias !!

  12. Pingback: Los números de 2010 « Blog Técnico

  13. Pingback: Los números de 2010 « Blog Técnico

  14. jimmy says:

    De igual manera he seguido tus pasos y me funciona bien. muchas gracias excelente tema y sobre todo bien explicado

  15. This is exactly the 3rd blog post, of your website I personally checked out.
    However , I personally love this one, “Reducir tablespace TEMP en ORACLE 10g
    Blog Técnico” the very best. Thanks ,Joanne

Replica a Benito Cruz Cancelar la respuesta