2012-08-07 67 views
17

我建立一個表來延伸溫度段等ORA-01652無法通過在表空間

create table tablename 
as 
select * for table2 

我正在錯誤

ORA-01652 Unable to extend temp segment by in tablespace 

當我一派我通常發現ORA-01652錯誤表示像

Unable to extend temp segment by 32 in tablespace 

我沒有得到任何這樣的value.I運行此查詢的一些價值

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; 

來自Find out free space on tablespace

,我發現我使用的表空間目前大約有可用空間32GB。我甚至嘗試創建表格,如

create table tablename tablespace tablespacename 
as select * from table2 

但我再次得到相同的錯誤。任何人都可以給我一個想法,問題在哪裏以及如何解決。爲了您的信息,select語句會提取我40,000,000條記錄。

+0

你數據文件已滿嗎? – Sathya 2012-08-07 06:00:02

回答

30

我找到了解決方案。有一個名爲TEMP的臨時表空間,它在數據庫內部用於獨立,連接等操作。由於我的查詢(有4個連接)提取近5000萬條記錄,因此TEMP表空間沒有足夠的空間佔用所有數據。因此,即使我的表空間具有可用空間,查詢也會失敗。因此,在增加TEMP表空間的大小後,問題就解決了。希望這可以幫助有同樣問題的人。謝謝:)

+4

*可以幫助的另一種方法是檢查是否存在不需要太多臨時空間的查詢的替代計劃 - 例如,通過避免排序或合併。當然,並不總是那麼容易或者可能。 – 2012-08-08 04:42:35

+1

如果您想知道如何縮小TEMP表空間以適合數據,請參閱以下最佳答案:http://stackoverflow.com/a/1878732/210114 – 2015-02-18 15:12:42

5

通過運行以下命令來創建新的數據文件:

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

你並不需要創建一個新的數據文件;您可以擴展現有的表空間數據文件。

執行以下,以確定現有的表空間的文件名:

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

SELECT * FROM DBA_DATA_FILES; 

然後延伸如下數據文件的大小(用來自先前的查詢的一個替換文件名)