2012-08-07 26 views
17

sto creando una tabella comeORA-01652 in grado di estendere segmento del temp da in tablespace

create table tablename 
as 
select * for table2 

sto ottenendo l'errore

ORA-01652 Unable to extend temp segment by in tablespace 

Quando ho concentrandoci solito trovato ORA-01652 che mostra l'errore un certo valore come

Unable to extend temp segment by 32 in tablespace 

non ricevo tale value.i corse questa query

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; 

Tratto da: Find out free space on tablespace

e ho scoperto che lo spazio tabelle che sto usando ha attualmente circa 32GB di spazio libero su. Ho anche cercato di creare tavolo come

create table tablename tablespace tablespacename 
as select * from table2 

ma io sono sempre di nuovo lo stesso errore. Qualcuno può darmi un'idea, dove è il problema e come risolverlo. Per tua informazione, l'istruzione select mi ha portato a 40.000.000 di record.

+0

sei pieno di dati? – Sathya

risposta

30

Ho trovato la soluzione a questo. C'è un tablespace temporaneo chiamato TEMP che viene utilizzato internamente dal database per operazioni come distinte, join, ecc. Poiché la mia query (che ha 4 join) recupera quasi 50 milioni di record, il tablespace TEMP non ha molto spazio per occupare tutti i dati. Quindi la query non riesce anche se il mio tablespace ha spazio libero. Quindi, dopo aver aumentato la dimensione del tablespace TEMP, il problema è stato risolto. Spero che questo aiuti qualcuno con lo stesso problema. Grazie :)

+4

Un altro approccio che * può * aiutare è quello di verificare se esiste un piano alternativo per la query che non richiede così tanto spazio temporaneo - ad es. evitando una sorta o un'unione. Non sempre facile o possibile, ovviamente. –

+1

E se ti chiedi come ridimensionare il tuo tablespace TEMP per adattarlo ai dati, guarda questa grande risposta: http://stackoverflow.com/a/1878732/210114 –

5

Crea un nuovo file di dati eseguendo il comando seguente:

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

Non è necessario creare un nuovo file di dati; puoi estendere i tuoi file di dati tablespace esistenti.

Eseguire il seguente per determinare il nome del file per il tablespace esistente:

SELECT * FROM DBA_DATA_FILES; 

quindi estendere la dimensione del file di dati come segue (sostituire il nome del file con quello della query precedente):

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