ORACLE 10G下LOB_DATA欄位型別佔滿臨時表空間問題
有一套10.2.0.4兩節點RAC資料庫,大概每隔一星期左右,後臺alert就會報臨時表空間不足的錯誤,透過查詢發現佔用監時表空間的sql是在執行一個包體,該包體已被加密,並且之前該庫的臨時表空間已經擴充套件過2次,每次30G,基本上可以說,既使再擴充套件的話還是有可能造成臨時表空間不足的情況,帶著這個問題,我們發現佔用大量監時表空間的資料型別為LOB_DATA和LOB_INDEX,每個會話佔用的臨時段大小不一,最大的可能佔用到幾十G以上,並且還會持續增長,這說明會話佔用的臨時段一直不釋放,積累造成臨時表空間滿。透過網上搜尋及查詢MOS文件,覺得可能是ORCLE的bug(Bug 5723140 – Temp LOB space not released after commit [ID 5723140.8]),
從10.2.0.4開始雖然已經修復了該bug,但是預設情況下:為了更加高效的利用temp,在session未斷開前,不自動釋放temp 空間,可以透過設定event 60025來強制會話在commit之後就立即釋放臨時段。解決方案我想有以下幾種:
1.目前的方式是軟體開發商每隔幾天透過SQL語句查詢下使用臨時段最高的幾個會話並kill掉它。這可以採用指令碼的方式來代替人工操作。
[oracle@eXXXX2p1 ~]$ cat kill_temp_pid.sh
#!/bin/ksh
export ORACLE_BASE=$ORACLE_BASE
export ORACLE_HOME=$ORACLE_HOME
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH
export ORACLE_SID=$ORACLE_SID
export AIXTHREAD_SCOPE=S
export LD_LIBRARY_PATH=$ORACLE_HOME/lib32:$ORACLE_HOME/lib:$ORA_CRS_HOME/lib32:$ORA_CRS_HOME/lib:/usr/lib
export LIBPATH=$ORACLE_HOME/lib:$ORACLE_HOME/lib32:$ORACLE_HOME/ctx/lib:$ORA_CRS_HOME/lib32:$ORA_CRS_HOME/lib
AWK=/bin/awk
DATE=/bin/date
file_name=/home/oracle/`/bin/date '+%Y-%m-%d-%H-%M'`
$ORACLE_HOME/bin/sqlplus -S "/as sysdba" 2>/dev/null 1>> $file_name <<sql_script
set feedback off
set heading off
select 'kill -9 '||spid from
(select pr.spid,te.username,se.sid,blocks UsedBLKS from v\$tempseg_usage te,v\$session se,v\$process pr where te.session_addr=se.saddr and se.paddr=pr.addr and se.username='HR' order by UsedBLKS) where rownum<3;
sql_script
chmod +x $file_name
/bin/sh $file_name
rm $file_name
2.開發人員修改軟體程式碼,使會話執行完包體之後立刻斷開連線。這樣就可以及時的釋放臨時段了。
alter session set events '60025 trace name context forever';
3.透過logon觸發器,在指定使用者登入後,對會話設定event 60025事件來達到不斷開會話的情況下及時釋放臨時段。
create or replace trigger login_db after logon on schema
begin
execute immediate 'alter session set events ''60025 trace name context forever''';
end;
/
--如果要在全庫級別設定,就按如下方法
create or replace trigger sys.login_db after logon on database
begin
if(sys_context('USERENV','SESSION_USER')='HR') then
execute immediate 'alter session set events ''60025 trace name context forever''';
end if;
end;
/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25462274/viewspace-2121464/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 解決Oracle臨時表空間佔滿的問題Oracle
- Oracle下查詢臨時表空間佔用率Oracle
- 臨時表空間被佔滿的原因查詢
- oracle 9i 臨時表空間問題Oracle
- oracle的臨時表空間寫滿磁碟空間,解決改問題的具體步驟Oracle
- oracle 臨時表空間Oracle
- oracle臨時表空間Oracle
- 【實驗】重建臨時表空間解決臨時表空間過大問題
- 轉:Oracle 臨時表空間過大問題解決Oracle
- 系統臨時表空間不足問題
- ORACLE 臨時表空間滿了的原因解決方案Oracle
- 【原創】Oracle number date varchar2欄位型別佔用空間大小Oracle型別
- Oracle 臨時表空間概念Oracle
- oracle臨時表空間組Oracle
- oracle的臨時表空間Oracle
- Oracle Temp 臨時表空間Oracle
- Oracle的temp表空間被佔滿Oracle
- 一次臨時表空間大量佔用問題的處理
- 檢視oracle臨時表空間佔用率的檢視Oracle
- impdp匯入包含xmltype型別欄位空表報錯問題XML型別
- oracle的臨時表空間解決問題的步驟Oracle
- Oracle臨時表空間檢視、新增臨時表空間資料檔案、修改預設臨時表空間 方法!Oracle
- 臨時表空間資料刪除問題
- 臨時表空間已滿的解決方法
- oracle臨時表空間相關Oracle
- Oracle TEMP臨時表空間概念Oracle
- Oracle 臨時表空間的概念Oracle
- ORACLE臨時表空間總結Oracle
- oracle 重建臨時表空間 tempfileOracle
- 刪掉Oracle臨時表空間Oracle
- ORACLE臨時表空間的清理Oracle
- oracle 時間欄位自動更新問題Oracle
- WINDOWS 環境下 監控ORACLE臨時表空間WindowsOracle
- Oracle 10G 中臨時表空間組的操作和使用Oracle 10g
- oracle 表空間,臨時表空間使用率查詢Oracle
- 改變表中非空欄位的型別型別
- Oracle Temp臨時表空間處理Oracle
- ORACLE預設的臨時表空間Oracle