收縮臨時表空間

2021-09-08 02:27:22 字數 1237 閱讀 6227

當排序操作、重建索引等大型操作無法在記憶體中完成時,臨時表空間將為排序提供便利。一般情況下臨時表空間為多個使用者,多個會話所共

享。不能為會話分批空間配額。臨時表空間耗用過度且在不能自動擴充套件的情形下將收到「ora-1652:unable to extend temp segment」 錯誤.下面

描述了過度擴充套件後如何釋放臨時表空間。

與之相關的內容參考:

oracle 表空間與資料檔案

臨時表空間的管理與受損恢復

oracle 徹底 kill session

一、臨時表空間何時釋放

檢索資料的會話游標關閉時,占用的臨時空間即被釋放

資料庫關閉,重啟(一般情況),會話 log off

二、釋放過大的臨時表空間

三、總結

1、關注alert_.log檔案中的ora-1652錯誤並調查什麼原因導致該錯誤。有些時候並不是由於當前的sql 導致臨時表空間不能擴充套件,很可能

由於前乙個sql耗用了99%的臨時表空間,而後乙個sql執行時即出現錯誤。對於此類情況應調查前一sql並調整避免過多的磁碟排序。

2、如果基於空間壓力應該關閉臨時表空間的自動擴充套件。因此為臨時表空間設定合理的大小就成了乙個問題。個人的解決方案是首先檢查ora-1652

其次是觀察業務高峰期的峰值。如前面查詢中的字段max size(: maximum number of mb ever used)的值來預估。如果大師們有更好的建議

不妨拍磚。

3、通過重啟資料庫,臨時表空間所耗用的大小有時候並不能縮小。

4、在oracle 11g之前一般是通過建立中轉臨時表空間來達到縮小的目的。不是很完美,因為有些時候臨時段未釋放導致不能刪除臨時表空間及

資料檔案。在11g可以直接使用下面的命令來完成:

alter tablespace temp shrink space;

alter tablespace temp shrink tempfile '' keep n ;

5、系統預設的臨時表空間不能被刪除,因此如果系統預設的臨時表空間過大刪除前應該新置乙個系統預設的臨時表空間。

6、刪除過大臨時表空間前其上的使用者應該先將其設定到中轉臨時表空間,重建後再將其置回原狀態。

7、減少磁碟排序的首要任務調整sql,如避免笛卡爾積,為表新增合理的索引等。其次要考慮pga的值是否設定合理。

四、相關參考

oracle 表空間與資料檔案

臨時表空間的管理與受損恢復

oracle 徹底 kill session

Oracle收縮臨時表空間與臨時檔案

資料庫在使用一段時間後,尤其是存在頻繁的imp exp操作以及排序操作時,臨時表空間就會越來越大,對應的資料檔案也會很大。從oracle 11g開始,可以使用shrink命令收縮臨時表空間和臨時檔案,也可以使用resize命令對資料檔案進行大小進行調整。一 shrink命令 oracle幫助文件 a...

mysql收縮空間 Oracle表空間收縮方案

對於表空間收縮,oracle只提供擴大的功能,而不提供收縮。所以,要實現這樣的要求,就只能先建立乙個中間表空間,然後將待收縮表 應用背景 某些情況下,由於前期設計上沒有考慮全面,導致表空間預建太大,遠遠超出實際使用大小。於是,就出現了收縮表空間這樣的需求,即將這個表空間的占用空間進行收縮。處理方案 ...

Oracle收縮臨時表空間與臨時檔案的方法

資料庫在使用一段時間後,尤其是存在頻繁的imp exp操作以及排序操作時,臨時表空間就會越來越大,對應的檔案也會很大。從oracle 11g開始,可以使用shrink命令收縮臨時表空間和臨時檔案。oracle幫助文件 alter and maintaining tabelspaces alter t...