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 < 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/26753337/viewspace-2101048/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26753337/viewspace-2101048/

你可能感兴趣的:(数据库)