2009-12-01 19 views
30

¿Cómo podemos reducir el espacio de tabla temporal en Oracle? Y por qué está aumentando tanto como hasta 25 GB, ya que solo hay un esquema en la base de datos para la aplicación y el tamaño del espacio de la tabla de datos es de 2 GB y el tamaño del espacio de la tabla de índice es de 1 GB.Cómo reducir el espacio de tabla temporal en Oracle?

+0

¿Qué versión de Oracle? – BradC

+0

¿Has mirado mi respuesta y en la página a la que enlaza? Me pregunto qué más necesitarías. –

Respuesta

94

¡Oh Dios mío! ¡Mira el tamaño de mi espacio de mesa temporal! O ... cómo reducir espacios de tablas temporales en Oracle.

Sí me pasó una consulta para ver lo grande que mi espacio de tabla temporal es:

SQL> SELECT tablespace_name, file_name, bytes 
2 FROM dba_temp_files WHERE tablespace_name like 'TEMP%'; 

TABLESPACE_NAME FILE_NAME         BYTES 
----------------- -------------------------------- -------------- 
TEMP    /the/full/path/to/temp01.dbf  13,917,200,000 

La primera pregunta que hay que hacerse es por qué el espacio de tabla temporal es tan grande. Usted puede saber la respuesta a esto de la parte superior de su cabeza. Puede ser debido a una gran consulta que acaba de ejecutar con un tipo que fue un error (he hecho eso más de una vez). Puede deberse a alguna otra circunstancia excepcional. Si ese es el caso , entonces todo lo que necesita hacer para limpiar es reducir el espacio de tabla temporal y continuar en la vida.

¿Pero qué pasa si no sabes? Antes de que decida contraerse, es posible que necesite realizar alguna investigación sobre las causas del espacio de tabla grande. Si esto ocurre en una base regular , entonces es posible que su base de datos solo necesite tanto espacio.

La vista del rendimiento dinámico

V$TEMPSEG_USAGE 

puede ser muy útil en la determinación de la causa.

Tal vez simplemente no le importe la causa y solo necesita reducirla. Este es su tercer día en el trabajo. Los datos en la base de datos son solo de 200MiB si los datos y el espacio de tabla temporal son 13GiB: simplemente agréguelos y continúe. Si vuelve a crecer, investigaremos la causa. Mientras tanto, tengo de espacio en ese volumen de disco y solo necesito recuperar el espacio.

Echemos un vistazo a la reducción. Dependerá un poco de la versión de Oracle que está ejecutando y de cómo se configuró el tablespace temporal.
Oracle hará lo mejor para evitar cometer errores horrendos , así que simplemente probaremos los comandos y, si no funcionan, reduciremos de una nueva manera.

Primero intentemos reducir el tamaño del archivo de datos. Si podemos hacer eso, volveremos al espacio y podremos preocuparnos de por qué creció mañana.

SQL> 
SQL> alter database tempfile '/the/full/path/to/temp01.dbf' resize 256M; 
alter database tempfile '/the/full/path/to/temp01.dbf' resize 256M 
* 
ERROR at line 1: 
ORA-03297: file contains used data beyond requested RESIZE value 

Dependiendo del mensaje de error es posible que desee probar esto con diferentes tamaños que son más pequeños que el sitio actual del archivo. He tenido éxito limitado con esto. Oracle solo reducirá el tamaño del archivo si el espacio de tabla temporal está en la cabecera del archivo y si es más pequeño que el tamaño que especifica. Alguna documentación antigua de Oracle (corrigieron esto) dijo que podría emitir el comando y el mensaje de error le diría a qué tamaño de podría encogerse. Para cuando empecé a trabajar como DBA, esto era falso.Simplemente tuvo que adivinar y volver a ejecutar el comando un montón de veces y ver si funcionó.

Muy bien. Eso no funcionó. Qué tal esto.

SQL> alter tablespace YOUR_TEMP_TABLESPACE_NAME shrink space keep 256M; 

Si estás en 11g (Maybee en 10g también) ¡esto es todo! Si funciona, puede querer para regresar al comando anterior y darle algunos intentos más.

Pero qué pasa si eso falla. Si el espacio de tablas temporal es el valor predeterminado temporal que se configuró cuando se instaló la base de datos, es posible que necesite hacer un lote de mucho más trabajo. En este punto, normalmente vuelvo a evaluar si realmente necesito ese espacio de . Después de todo, el espacio en disco solo cuesta $ X.XX a GiB. Por lo general, no deseo que realice cambios como este durante las horas de producción. Eso significa que trabaja a las 2AM ¡OTRA VEZ! (No es que realmente me oponga a trabajar a las 2 AM - es solo que ... Bueno, me gusta dormir también. Y a mi esposa le gusta tenerme en casa a las 2AM ... no vagabundear por las calles del centro a las 4AM intentando para recordar dónde estacioné mi auto 3 horas antes. He oído hablar de esa cosa del "teletrabajo" . Solo me preocupa que llegue a la mitad y luego mi conectividad a Internet fallará, entonces tengo que apresurarme al centro para arreglarlo todo antes la gente se muestran en la mañana utilizar la base de datos.)

Ok ... Volver a las cosas serias ... Si el espacio de tablas temporal que desea reducir su valor predeterminado es tablas temporal, tendrá para crear primero un nuevo espacio de tabla temporal , configúrelo como el espacio de tabla temporal predeterminado y luego elimine su antiguo espacio de tabla temporal predeterminado y recíclelo. Afterwords descarta la segunda tabla temporal creada.

SQL> CREATE TEMPORARY TABLESPACE temp2 
2 TEMPFILE '/the/full/path/to/temp2_01.dbf' SIZE 5M REUSE 
3 AUTOEXTEND ON NEXT 1M MAXSIZE unlimited 
4 EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M; 

Tablespace created. 

SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp2; 

Database altered. 

SQL> DROP TABLESPACE temp INCLUDING CONTENTS AND DATAFILES; 

Tablespace dropped. 


SQL> CREATE TEMPORARY TABLESPACE temp 
2 TEMPFILE '/the/full/path/to/temp01.dbf' SIZE 256M REUSE 
3 AUTOEXTEND ON NEXT 128M MAXSIZE unlimited 
4 EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M; 

Tablespace created. 

SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp; 

Database altered. 

SQL> DROP TABLESPACE temp2 INCLUDING CONTENTS AND DATAFILES; 

Tablespace dropped. 

¡Espero que una de estas cosas ayude!

+0

Solo una nota: SHRINK SPACE se presenta en 11g y no está disponible en 10g. ¡Gracias por una reseña exhaustiva de todas las opciones! –

+1

Muchas publicaciones y artículos en Internet sugieren procedimientos muy complicados. ¡Este fue el más simple que he encontrado! –

+1

Muchas gracias por esta explicación y solución clara y precisa. Es el mejor que se encuentra en Internet hasta ahora. –

0
alter database datafile 'C:\ORA_SERVER\ORADATA\AXAPTA\AX_DATA.ORA' resize 40M; 

Si no ayuda:

  • Crear nuevo espacio de tabla
  • transición a nuevas tablas temporal
  • Esperar hasta de tabla anterior no será utilizada
  • Eliminar antiguos de tablas
5

Las opciones para administrar tablespa Las cosas han mejorado mucho con respecto a las versiones que comienzan con 8i. Esto es especialmente cierto si está utilizando los tipos de archivos adecuados para un espacio de tabla temporal (es decir, archivos temporales gestionados localmente).

Por lo tanto, podría ser tan simple como este comando, que se reducirá el espacio de tabla de 128 meg ...

alter tablespace <your_temp_ts> shrink space keep 128M; 

La documentación en línea de Oracle es bastante bueno. Find out more.

edición

Al parecer, el PO tiene una versión anterior de la base de datos. Con versiones anteriores, tenemos que cambiar el tamaño de los archivos de datos individuales. Entonces, antes que nada, busque los nombres de los archivos. Una u otra de estas consultas deben hacerlo ...

select file_name from dba_data_files where tablespace_name = '<your_temp_ts>' 
/

select file_name from dba_temp_files where tablespace_name = '<your_temp_ts>' 
/

luego usar esa ruta en este orden:

alter database datafile '/full/file/path/temp01.dbf' resize 128m 
/
+0

SQL> alterar el espacio de contracción del espacio de tablas mantener 128M; alterar espacio temporal de contracción de espacio de tabla mantener 128M * ERROR en la línea 1: ORA-02142: falta o no es válida ALTER TABLESPACE opción –

1

Se aumentando debido a que tiene una necesidad de espacio de almacenamiento temporal, posiblemente debido a un producto cartesiano o una operación de clasificación grande.

La vista de rendimiento dinámico V$TEMPSEG_USAGE ayudará a diagnosticar la causa.

+0

¿Se mostrará después de utilizado? –

+0

No debería pensar así. –

+0

Otra razón podría ser el uso intensivo de tablas temporales globales. –

2

Debería haber escrito qué versión de Oracle usa. Lo más probable es que use algo más que Oracle 11g, es por eso que no puede reducir un espacio de tabla temporal.

Alternativas:

1) alter database tempfile '[your_file]' resize 128M; que probablemente se producirá un error
2) eliminar y reconstruir el espacio de tabla. Si el espacio de tabla temporal que desea reducir es su espacio de tabla temporal predeterminado, primero deberá crear un nuevo espacio de tabla temporal, establecerlo como el espacio de tabla temporal predeterminado, luego colocar su anterior espacio de tabla temporal predeterminado y volver a crearlo. Luego, suelte la segunda tabla temporal creada. 3) Para Oracle 9i y superiores que sólo podría caer el archivo temporal (s) y añadir una nueva (s)

Todo se describe here con gran detalle.


ver este enlace: http://databaseguide.blogspot.com/2008/06/resizing-temporary-tablespace.html
Ya estaba ligado, pero tal vez se ha perdido, así que aquí está de nuevo.

0

No me molesto con el abandono de la temperatura alternativa en caso de que necesite para recuperar el almacenamiento de nuevo en el futuro ...

  1. de temperatura predeterminado conjunto de grupos de stand-alone temp
  2. esperar un rato, a continuación, cambiar el tamaño de los miembros del grupo de temperatura
  3. establecer por defecto de nuevo al grupo de temperatura
  4. esperar un tiempo, cambiar el tamaño de la temperatura en solitario. no hay prisa por hacer el último paso
Cuestiones relacionadas