Oracle临时表空间异常增长

问题描述:

Oracle的临时表空间使用一直在缓慢增长,理论上临时表空间是重复使用的。但是从临时表空间使用率缓慢增长,临时表空间没有释放过。

点击(此处)折叠或打开

  1. 日期 临时表空间 当前大小(G)
  2. --------------------------------------
  3. 2014/1/3 TEMP 85
  4. 2014/1/2 TEMP 74
  5. 2014/1/1 TEMP 64
  6. 2013/12/31 TEMP 45
  7. 2013/12/30 TEMP 13
  8. 2013/12/29 TEMP 13


问题分析:

业务也没有类似增长,所以应该不是业务导致的。从每天的增长看,是逐步累积的。经过检查发现占用临时表空间的语句访问了LOB对象。

和开发沟通,和clob相关的代码如下:


点击(此处)折叠或打开

  1. if p_benefit_str is not null then
  2.       v_length := length(p_benefit_str);
  3.       if v_length > 0 then
  4.         dbms_lob.open(p_benefit_clob,dbms_lob.lob_readwrite);
  5.         dbms_lob.writeappend(p_benefit_clob, v_length, p_benefit_str);
  6.         dbms_lob.close(p_benefit_clob);
  7.       end if;
  8.     end if;

根据metalink文章,是lob在使用完成后需要free的。


点击(此处)折叠或打开

  1. declare
  2.   clb clob;
  3.   ch varchar2(32767);
  4.   k number;
  5. begin
  6.   dbms_lob.createtemporary(clb,true,dbms_lob.call);
  7.     for i in 1..1500 loop
  8.       ch:=lpad('o',32767,'Y');
  9.       dbms_lob.writeappend(clb,length(ch),ch);
  10.     end loop;
  11.     k:=dbms_lob.getlength(clb);
  12.     dbms_lob.freetemporary(clb);
  13.     dbms_output.put_line('the clob length: '||k);
  14. end;
  15. /

如果在java端调用后,可以在java端进行回收。


点击(此处)折叠或打开

  1. 1.java.sql.NClob.free()
  2. 2.oracle.sql.NCLOB.freeTemprary()
  3. 3.(OracleCallableStatement) conn.prepareCall("begin DBMS_LOB.FREETEMPORARY ( ? ); end;");


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25105315/viewspace-2132112/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25105315/viewspace-2132112/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值