ORA-01652解決一例

blue_prince發表於2004-09-23

       應用程式在執行一個儲存過程時報如下錯誤:
        ORA-01652: 無法透過256(在表空間NEW_TEMP中)擴充套件 temp 段
        ORA-06512: 在"NEW1.PACK_DATA_FX", line 60
        ORA-06512: 在"NEW1.PROC_FXTZ0", line 7 ORA-06512: 在line 1 
       

[@more@]      通常來說如果出現該錯誤是由於臨時表空間空間不足所致,只要給表空間新增資料檔案就能解決問題(alter tablespace ts_name add tempfile file_name size)。建議出現該問題的時候最好是檢查應用程式,看看語句是否有最佳化的餘地,以最佳化排序操作。
      但透過檢查發現應用程式沒有大的排序操作。這時我們就把注意力放在表空間的資料檔案上,檢查一下資料檔案的狀態。   
SQL> select file#,status from v$tempfile;

     FILE# STATUS
---------- -------
         1 ONLINE
         2 ONLINE
         3 ONLINE
         4 OFFLINE
果不其然,問題就出在資料檔案上,我們看到編號為4的臨時檔案狀態為不線上。我們首先找出對應的臨時檔案:
SQL> select tablespace_name,file_name from dba_temp_files where file_id=4;

TABLESPACE_NAME                FILE_NAME
------------------------------ ----------------------------------------
NEW_TEMP                       D:ORACLEORADATAHSMISNEW_TEMP01.DBF

再把臨時檔案的狀態改為線上:

SQL> alter database tempfile 'd:oracleoradatahsmisnew_temp01.dbf' online;

資料庫已更改。

這樣問題就得以解決。

備註:碰到該問題的時候一般是由於臨時表空間空間擴充套件不足所致,但是如果臨時檔案非聯機的話也會引發該錯誤。因此建議日常應該定時檢查alert log,檢視資料檔案的狀態,如果有非聯機的資料檔案應該及時改為聯機。更多情況是由於過多的排序導致臨時表空間擴充套件不足。出現這種情況我們應該檢查相應的應用程式,最佳化排序操作,避免臨時表空間的擴充套件。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/60857/viewspace-778814/,如需轉載,請註明出處,否則將追究法律責任。

相關文章