ORA-01652:無法通過128(在表空間TEMP中)擴充套件temp段
在Oracle資料庫中進行order by or group by
、索引的建立和重建立、distinct
操作、union
& intersect
& minus sort-merge joins
、Analyze
操作、異常等操作時,會產生很多的臨時資料。如有一張員工資訊表,資料庫中是安裝記錄建立的時間來儲存的。如果使用者查詢時,使用Order BY
排序語句指定按員工編號來排序,那麼排序後產生的所有記錄就是臨時資料。通常情況下,Oracle資料庫會先將這些臨時資料存放到記憶體的PGA
(程式全域性區)內。如果資料量太大,PGA
存不了,則會放入臨時表空間。
預設情況下,臨時表空間對所有使用者是共享的。當然可以為特殊使用者指定單獨的臨時表空間。臨時表空間可以重用。
當臨時表空間不足的時候,就會報:ORA-01652:無法通過128(在表空間TEMP中)擴充套件temp段
這個時候,想當然的就想看看臨時表空間的使用情況了:
select tablespace_name, bytes, user_bytes, user_bytes/bytes,file_name from dba_temp_files;
```
![在這裡插入圖片描述](https://img-blog.csdn.net/2018092609295569)
`99%?`但是其實這個使用率並沒有太大的意義,因為當新增一個臨時檔案(如`TEMP02.DBF`),然後再跑一次`order by`,這個使用率就直接飆到`99%`了。然後換其他的`order by`語句測試,發現還是可以正常查出資料,說明臨時表空間的使用率跟正常的表空間使用率,有所不一樣(具體怎麼個不一樣,就不得而知了)。
也就是說,報錯的時候,它的使用率可能是`99%`;正常執行的時候,使用率也可能是`99%`。
當報錯的時候,就說明臨時表空間真的不足了。但由於臨時表空間表現為的是`dbf`檔案,那擴充套件空間也就方便多了。可以直接增大原臨時檔案,還可以增加臨時檔案以達到擴大臨時表空間的目的。如果你的臨時表空間滿得太快,這種方式就治標不治本了。可以通過`v$sort_usage`和`v$sort_segment`兩個檢視,分析出是哪些使用者和哪些`sql`導致臨時表空間暴漲,再針對性解決。除此之外,優化`sql`以及對查詢的欄位建立索引,也可以減少臨時表空間的佔用。在Oracle中,如果表沒有索引,那麼會將所有的資料都複製到臨時表空間,而如果有索引的話,一般只是將索引的資料複製到臨時表空間中。
除了以上這種臨時表空間真正滿了的情況,查詢會報錯以外,還有一種情況,也會報同樣的錯,那就是臨時檔案`offline`了。
![在這裡插入圖片描述](https://img-blog.csdn.net/20180926094330645)
在`v_$tempfile`檢視中,記錄了臨時檔案的狀態,一種是`online`,一種是`offline`。當狀態為`offline`的時候,查詢也有可能會報這個錯。
當然,如果一個臨時檔案`offline`了,查詢大小時,也是查不出來的。
![在這裡插入圖片描述](https://img-blog.csdn.net/20180926094416927)
**與臨時表空間相關的語句:**
```sql
--查詢使用者所使用的臨時表空間:
select username,default_tablespace,temporary_tablespace from dba_users;
--查詢臨時表空間大小以及使用率:
select tablespace_name, bytes, user_bytes, user_bytes/bytes,file_name from dba_temp_files;
--查詢臨時檔案是否線上:
select name,status from v$tempfile;
--修改臨時檔案線上(離線)狀態:
alter database tempfile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEMP02.DBF' online(offline);
--增加臨時檔案大小(增加原檔案):
alter database tempfile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEMP01.DBF' resize 100m;
--通過增加新的臨時檔案,來擴大臨時表空間:
alter tablespace temp add tempfile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEMP02.DBF' size 4000m;
--刪除臨時檔案:
alter database tempfile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEMP02.DBF' drop;
--將臨時檔案設定為自動擴充套件:
alter database tempfile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEMP01.DBF' autoextend on next 5m maxsize unlimited;
--關閉(啟動)臨時檔案的自動增長:
alter database tempfile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEMP01.DBF' autoextend off(on);
相關文章
- [轉]ORA-01652 無法通過128 (在表空間 TEMP中)擴充套件temp段套件
- ORA-01652 無法透過128 (在表空間 TEMP中)擴充套件temp段套件
- 解決ora-01652無法通過128(在temp表空間中)擴充套件temp段的過程套件
- 解決ora-01652無法透過128(在temp表空間中)擴充套件temp段的過程套件
- ora-01652:無法通過128(在表空間space中)擴充套件temp段解決套件
- ORA-01652: 無法通過 8 (在表空間 TONGYIHUA 中) 擴充套件 temp 段套件
- ORA-01652: 無法通過64(表空間idx_data200511)擴充套件temp段套件
- Oracle - ORA-01652: unable to extend temp segment by 128 in tablespace TEMPOracle
- TEMP表空間不足解決 - temp group
- oracle temp 表空間Oracle
- 表空間無法擴充套件問題處理套件
- 檢視單個SQL消耗TEMP表空間以及TEMP表空間使用率SQL
- Oracle Temp 表空間切換Oracle
- Oracle Temp 臨時表空間Oracle
- 擴充套件表空間套件
- Oracle TEMP臨時表空間概念Oracle
- 表空間擴充套件過程 停電導致異常中斷, 無法啟動套件
- 聊聊Data Guard環境下Temp表空間和Temp檔案管理
- Oracle的temp表空間被佔滿Oracle
- Oracle Temp臨時表空間處理Oracle
- Oracle基礎 02 臨時表空間 tempOracle
- 處理TEMP表空間滿的問題
- 表空間自動擴充套件 AUTOALLOCATE 的擴充套件規律套件
- temp檔案空間的分配
- 有關temp表空間的一點總結!
- 搬運工:temp表空間被過多佔用處理方法
- TEMP表空間報ORA-1652的處理
- oracle UNDO表空間一個bug——undo表空間快速擴充套件Oracle套件
- 大檔案表空間受作業系統限制無法自動擴充套件作業系統套件
- ubuntu 擴充套件磁碟空間Ubuntu套件
- 查詢表空間是否具備自動擴充套件空間套件
- Oracle 11g中Temp臨時表空間、檔案的新特性Oracle
- 【TEMP】臨時表空間的工作原理及維護方法
- 如何捕捉temp表空間出錯的session資訊和SQLSessionSQL
- 擴充套件c盤空間有什麼辦法套件
- OS 刪除temp表空間 而磁碟空間未釋放的解決方案
- Oracle 10g 物理DataGuard擴充套件表空間Oracle 10g套件
- mysql空間擴充套件 VS PostGISMySql套件