不能用单线程,业务比较复杂。这应用程序与oracle不是一个网段,跑几个小时就出这问题,有时候1个小时有时候3个小时,反正不固定。也没有返回结果,也不报异常,就这样停在那了,很奇怪啊!

解决方案 »

  1.   

    connection满了不应该不报错吧,而且其他job运行正常。依然可以自由的query...
      

  2.   

    你所有的job都用的同一个数据源吗?
      

  3.   

    select sess.sid, 
        sess.serial#, 
        lo.oracle_username, 
        lo.os_user_name, 
        ao.object_name, 
        lo.locked_mode 
        from v$locked_object lo, 
        dba_objects ao, 
        v$session sess 
    where ao.object_id = lo.object_id and lo.session_id = sess.sid; select * from v$session t1, v$locked_object t2 where t1.sid = t2.SESSION_ID; alter system kill session '<sid>,<serial#>';看下是否有死锁。
      

  4.   

    首先,经过大量资料查询,发现有很多人提出过这个问题,但是对问题的原因和解决方案却没有资料。
    大部分人认为是网络原因导致oracle驱动的底层socket超时。解决方案就是设置oracle.jdbc.ReadTimeout,oracle驱动默认此值为0,也就是不超时,也就有了我上面的问题,设置此值后,驱动会自动断开超时的连接,问题解决。