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臨時表空間檢視、新增臨時表空間資料檔案、修改預設臨時表空間 方法!Oracle
- Oracle 12C RMAN備份佔用大量臨時表空間Oracle
- 臨時表空間ORA-1652問題解決
- oracle建立臨時表空間和資料表空間以及刪除Oracle
- MYSQL造資料佔用臨時表空間MySql
- Linux磁碟空間佔滿問題快速排雷Linux
- oracle 臨時表空間的增刪改查Oracle
- mysql臨時表,臨時表空間,ibtmp1表空間暴增原因初探MySql
- Oracle 查詢佔用臨時表空間大的歷史會話和SQLOracle會話SQL
- Oracle 10g大檔案表空間(轉)Oracle 10g
- [BUG反饋]關於ot模型中的時間型別欄位bug問題模型型別
- oracle11g 查詢臨時表空間的使用率和正在使用臨時表空間的使用者Oracle
- oracle建立使用者,表空間,臨時表空間,分配許可權步驟詳解Oracle
- MySQL InnoDB臨時表空間配置MySql
- 刪除臨時表空間組
- 4.2.1.8規劃臨時表空間
- [20210528]oracle大表空間預分配問題.txtOracle
- 2.5.7 建立預設臨時表空間
- MySQL 5.7 新特性 共享臨時表空間及臨時表改進MySql
- 臨時表空間和回滾表空間使用率查詢
- Oracle 修改欄位型別和長度Oracle型別
- oracle sysaux表空間滿了處理辦法OracleUX
- oracle系統表空間過大問題處理Oracle
- SQLServer如何釋放tempdb臨時表空間SQLServer
- 消除臨時表空間暴漲的方法
- Oracle表空間切換路徑,解決硬碟滿導致的ORA-01653問題Oracle硬碟
- mysql表操作(alter)/mysql欄位型別MySql型別
- oracle 表空間Oracle
- Oracle表空間Oracle
- 【MybatisPlus】資料庫的datetime型別欄位為空的時候,報錯空指標?MyBatis資料庫型別指標
- laravel sync()同步時修改中間表欄位Laravel
- oracle temp 表空間Oracle
- 增加oracle表空間Oracle
- [提問交流]建立模型,新增屬性,欄位型別如何設定2位小數的欄位型別模型型別
- Oracle實驗(05):時間型別Oracle型別
- oracle 表移動表空間Oracle