2012-08-07 681 views
17

Estoy creando una tabla comoORA-01652 No se ha podido ampliar el segmento temporal por en tablas

create table tablename 
as 
select * for table2 

estoy consiguiendo el error

ORA-01652 Unable to extend temp segment by in tablespace 

Cuando busqué en Google por lo general encontrado ORA-01652 que muestra el error algún valor como

Unable to extend temp segment by 32 in tablespace 

no estoy recibiendo dicha value.I corrió esta consulta

select 
    fs.tablespace_name       "Tablespace", 
    (df.totalspace - fs.freespace)    "Used MB", 
    fs.freespace        "Free MB", 
    df.totalspace        "Total MB", 
    round(100 * (fs.freespace/df.totalspace)) "Pct. Free" 
from 
    (select 
     tablespace_name, 
     round(sum(bytes)/1048576) TotalSpace 
    from 
     dba_data_files 
    group by 
     tablespace_name 
    ) df, 
    (select 
     tablespace_name, 
     round(sum(bytes)/1048576) FreeSpace 
    from 
     dba_free_space 
    group by 
     tablespace_name 
    ) fs 
where 
    df.tablespace_name = fs.tablespace_name; 

Tomado de: Find out free space on tablespace

y me encontré con que el espacio de tablas que estoy utilizando actualmente tiene alrededor de 32 GB de espacio libre. Incluso traté de crear una tabla como

create table tablename tablespace tablespacename 
as select * from table2 

pero recibo el mismo error nuevamente. ¿Alguien puede darme una idea, dónde está el problema y cómo resolverlo? Para su información, la declaración seleccionada me traería 40,000,000 de registros.

+0

¿Están sus archivos de datos llenos? – Sathya

Respuesta

30

Encontré la solución a esto. Hay un tablespace temporal llamado TEMP que se usa internamente por la base de datos para operaciones como distinct, joins, etc. Como mi consulta (que tiene 4 uniones) obtiene casi 50 millones de registros, el espacio de tabla TEMP no tiene tanto espacio para ocupar todos los datos. Por lo tanto, la consulta falla aunque mi tablespace tenga espacio libre. Así que, después de aumentar el tamaño del tablespace TEMP, se resolvió el problema. Espero que esto ayude a alguien con el mismo problema. Gracias :)

+4

Otro enfoque que * puede * ayudar es comprobar si hay un plan alternativo para la consulta que no requiere tanto espacio temporal, p. evitando un tipo o una fusión. No siempre es fácil o posible, por supuesto. –

+1

Y si se pregunta cómo puede reducir el espacio de tabla TEMP para ajustarse a los datos, consulte esta excelente respuesta: http://stackoverflow.com/a/1878732/210114 –

5

Crear un nuevo archivo de datos ejecutando el siguiente comando:

alter tablespace TABLE_SPACE_NAME add datafile 'D:\oracle\Oradata\TEMP04.dbf'    
    size 2000M autoextend on; 
1

No es necesario para crear un nuevo archivo de datos; puede ampliar sus archivos de datos de espacio de tabla existentes.

ejecutar el siguiente para determinar el nombre de archivo para el espacio de tabla existente:

SELECT * FROM DBA_DATA_FILES; 

a continuación, extender el tamaño del archivo de datos de la siguiente manera (sustituir el nombre del archivo con el de la consulta anterior):

ALTER DATABASE DATAFILE 'D:\ORACLEXE\ORADATA\XE\SYSTEM.DBF' RESIZE 2048M; 
Cuestiones relacionadas