2012-08-07 9 views
17

tworzę tabelę jakORA-01652 Nie można przedłużyć odcinek temp przez w tabel

create table tablename 
as 
select * for table2 

Dostaję błąd

ORA-01652 Unable to extend temp segment by in tablespace 

Kiedy google ja zwykle ORA-01652 błędu pokaz niektóre wartości jak

Unable to extend temp segment by 32 in tablespace 

ja nie otrzymuję żadnych takich value.I prowadził kwerendy

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; 

albumu: Find out free space on tablespace

i okazało się, że tabel Używam obecnie ma około 32 GB wolnego miejsca. Próbowałem nawet utworzyć tabelę taką jak

, ale pojawia się ponownie ten sam błąd. Czy ktoś może mi dać pomysł, gdzie jest problem i jak go rozwiązać. Dla twojej informacji instrukcja select przyniosłaby mi 40 000 000 rekordów.

+0

czy pliki danych są pełne? – Sathya

Odpowiedz

30

Znalazłem rozwiązanie tego. Istnieje tymczasowy obszar tabel o nazwie TEMP, który jest używany wewnętrznie przez bazę danych do operacji takich jak odrębne, łączenia itp. Ponieważ moje zapytanie (które ma 4 sprzężenia) pobiera prawie 50 milionów rekordów, obszar tabel TEMP nie ma tyle miejsca, aby zajmować wszystkie dane. W związku z tym kwerenda nie powiedzie się, mimo że mój obszar tabel ma wolne miejsce. Tak więc po zwiększeniu obszaru tabel TEMP problem został rozwiązany. Mam nadzieję, że to pomoże komuś z tym samym problemem. Dzięki :)

+4

Innym rozwiązaniem, które * może * pomóc, jest sprawdzenie, czy istnieje alternatywny plan dla zapytania, który nie wymaga tak dużej przestrzeni tymczasowej - np. przez unikanie sortowania lub scalania. Oczywiście nie zawsze jest to łatwe i możliwe. –

+1

A jeśli zastanawiasz się, jak zmniejszyć obszar tabel TEMP, aby dopasować dane, zobacz tę wspaniałą odpowiedź: http://stackoverflow.com/a/1878732/210114 –

5

Utwórz nowy plik danych, uruchamiając następującą komendę:

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

Nie ma potrzeby tworzenia nowego pliku danych; można rozszerzyć istniejące pliki danych obszaru tabel.

wykonuje się następujące określić pliku dla istniejących tabel:

SELECT * FROM DBA_DATA_FILES; 

Następnie rozciągają rozmiar pliku danych w sposób następujący (wymienić nazwę z jednym z poprzednich zapytania):

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