TEMP表空間持續增高問題根結

2021-09-03 10:52:10 字數 3246 閱讀 2484

生產系統,業務反饋只要他們一跑某程式,就報temp表空間不足。我們的使用者在建立某錶的時候,需要指定自己的臨時表空間,其他使用者均沒有問題,就這個使用者有問題。

抓取資料庫內部等待事件,沒有temp相關的等待事件,先查一下temp表空間的利用率看看有沒有頭緒。

select d.tablespace_name "name",

to_char( nvl(a.bytes / 1024 / 1024, 0),'99,999,990.900' ) "size (m)",

to_char( nvl(t.hwm, 0 )/1024/ 1024,'99999999.999' ) "hwm (m)",

to_char( nvl(t.hwm / a.bytes 100 , 0), '990.00') "hwm % " ,

to_char( nvl(t.bytes/1024 /1024, 0),'99999999.999' ) "using (m)",

to_char( nvl(t.bytes / a.bytes 100 , 0), '990.00') "using %"

from sys.dba_tablespaces d,

( select tablespace_name, sum (bytes) bytes from dba_temp_files group by tablespace_name) a,

( select tablespace_name, sum (bytes_cached) hwm, sum(bytes_used) bytes from gv$temp_extent_pool group by tablespace_name) t

where d.tablespace_name = a.tablespace_name(+)

and d.tablespace_name = t.tablespace_name(+)

and d.extent_management like 'local'

and d.contents like 'temporary'

/為了避免業務影響,隨即先採取應急手段,對temp表空間進行resize擴容,上條sql執行完成後結果30g的temp表空間,已經用掉了59%。

繼續往下檢視temp到底卡在**

隨即檢視sql對應的表,desc表結構,沒有clob欄位啊,難道發生了轉換?詢問開發後得知,他們確實有wmsys.wm_concat物件實現行列轉換的語句,拿到語句

這種方法不被oracle所推薦,因為wmsys使用者用於workspace manager,其函式物件可能因版本而不同體現出來。原本wm_concat函式返回值為varchar2變更為clob。這一變化導致了很多程式的異常。建議開發使用listagg的方式進行轉換。wm有bug只能用逗號,如果用其他符合需要配合replace

wm_concat有時取出來的字段不完整。有興趣的可以試試10046抓一下sql執行的時候,到底是怎麼走的

1,alter session set events '10046 trace name context forever,level 12';

2,select

wmsys.wm_concat(***x) as code

from ***_type pe

left join

yyyy_mcc mcc on ***.type=***pe.code

where valid='1' and pe.valid='1'

3,關閉10046 alter session set events '10046 trace name context off';

4,獲取trc檔案位置

隨即當晚緊急變更,反饋臨時表空間暫無異常。

temp表滿,解決方式 增加空間

抽取工具報錯 temp滿了,磁碟空間滿了,擴充套件一下temp表空間 解決方法一 新增乙個temp2 然後把temp切換到temp2 然後刪除temp 在新增乙個temp 再把預設的切換回去 如果太大的temp表空間試用,有可能sql排序過多,或用臨時表過大。看看對應的sql,如果有大量排序如gro...

temp表空間不足 oracle之臨時表空間組

在乙個臨時表空間 組中,使用者可以定義很多臨時表 空間。乙個臨時表空間組包含至少乙個臨時表空間,但是沒有包含最大個臨時表空間個數。注意,臨時表空間組的名子和臨時表空間的名字必須不相同,不然會出現錯誤。任何臨時表空間都可以 在乙個臨時 表空間中新增 刪除甚至 移動到其他臨時表空間組中。臨時表空間的好處...

ORACLE 9I 重建 TEMP 表空間

oracle 9i 重建 temp 表空間 oracle 9i 重建 temp 表空間 1.startup 啟動資料庫 2.create temporary tablespace temp2 tempfile home2 oracle oradata sysmon temp02.dbf size 5...