Oracle clob占用临时表空间不释放的解决方案

  如果自定义函数返回clob,在使用tomcat,weblogic这样中间件,都有连接池,使用的都是长连接,非常有可能导致Clob字段占用临时表空间不放,要加一句clob.free();

import java.sql.Clob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class TestReadBlob{
    Connection con = null;
    PreparedStatement pre = null;
    ResultSet result = null;
    public void runTest() {
    	   try{
    	        Class.forName("oracle.jdbc.driver.OracleDriver");
    	        String url = "jdbc:oracle:thin:@11.11.5.54:1521:lcdb";
    	        String user = "test";
    	        String password = "test";
    	        con = DriverManager.getConnection(url, user, password);
    	        String sql = "select  funcId,en_clob_concat(distinct role_id) otherPostName "+
    " from ROLE_RESOURCE  where rownum <39490 group by  resource_id";
    	        pre = con.prepareStatement(sql);
    	        result = pre.executeQuery();
    	        Clob clob ;
    	        while (result.next()){
    	            System.out.println( result.getString("funcId"));
    	            clob =result.getClob("otherPostName");
                    clob.free();
    	        }
    	        System.out.println("程序暂停开始");
    	        Thread.sleep(20000);    	    } 
    	    catch (Exception e)
    	    {
    	        e.printStackTrace();
    	    }//这里没有写finally就是模拟weblogic长连接不关闭连接的情况
    }
    public static void main(String[] args) {
    	TestReadBlob testReadBlob = new TestReadBlob();
    	testReadBlob.runTest();
    }
 }
select s.BLOCKS * 8 / 1024 / 1024, s.*
  from v$tempseg_usage s
 where username = 'LCAM_SYS' --and s.SESSION_ADDR='0000001381EA0408'
 order by s.BLOCKS desc;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值