ITPub博客

首页 > 数据库 > Oracle > Oracle临时表空间异常增长

Oracle临时表空间异常增长

原创 Oracle 作者:dbs101 时间:2017-01-09 14:18:42 0 删除 编辑

问题描述:

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博客 ” ,链接:https://blog.itpub.net/25105315/viewspace-2132112/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: Oracle 监听优化
请登录后发表评论 登录
全部评论
喜欢oracle、redis、mysql、pg数据库

注册时间:2010-12-18

  • 博文量
    94
  • 访问量
    473130