今天提交請求後,提示ORA-01652: 無法通過 128 (在資料表空間 TEMP 中) 擴充 temp 段。最後通過ALTER DATABASE TEMPFILE '/*/*/db/apps_st/data/tempx01.dbf' RESIZE 7168M;擴充暫存資料表空間來解決。在網上找了些資料,重新學習下暫存資料表空間的知識點,記錄在此以免以後忘記。
暫存資料表空間的作用:
暫存資料表空間主要用途是在資料庫進行排序運算[如建立索引、order by及group by、distinct、union/intersect/minus/、sort-merge及join、analyze命令]、管理索引[如建立索引、IMP進行資料匯入]、訪問視圖等操作時提供臨時的運算空間,當運算完成之後系統會自動清理。
當暫存資料表空間不足時,表現為運算速度異常的慢,並且暫存資料表空間迅速增長到最大空間(擴充的極限),並且一般不會自動清理了。
如果暫存資料表空間沒有設定為自動擴充,則暫存資料表空間不夠時事務執行將會報ora-01652無法擴充臨時段的錯誤,當然解決方案也很簡單:1、設定臨時資料檔案自動擴充,或者2、增大暫存資料表空間。
暫存資料表空間的相關操作:
查詢預設暫存資料表空間:
SQL> select * from database_properties where property_name='DEFAULT_TEMP_TABLESPACE';
PROPERTY_NAME
------------------------------
PROPERTY_VALUE
--------------------------------------------------------------------------------
DESCRIPTION
--------------------------------------------------------------------------------
DEFAULT_TEMP_TABLESPACE
TEMP
Name of default temporary tablespace
查詢暫存資料表空間狀態:
SQL> select tablespace_name,file_name,bytes/1024/1024 file_size,autoextensible from dba_temp_files;
TABLESPACE_NAME
——————————
FILE_NAME
——————————————————————————–
FILE_SIZE AUT
———- —
TEMP
/u01/app/Oracle/oradata/orcl/temp01.dbf
100 YES
擴充暫存資料表空間:
方法一、增大臨時檔案大小:
SQL> alter database tempfile ‘/u01/app/oracle/oradata/orcl/temp01.dbf’ resize100m;
Database altered.
方法二、將臨時資料檔案設為自動擴充:
SQL> alter database tempfile ‘/u01/app/oracle/oradata/orcl/temp01.dbf’ autoextend on next 5m maxsize unlimited;