程序采用多线程.主程序先测试每个远程数据库是否可连接,连接语句:select count(*) from userinfo@dblinkA
如果这个语句可以执行,则连接远程数据库进行操作.
问题在于,大部分情况下程序是没问题的,但是每过几天就会有某个远程数据库连接不上.并且不是直接报告连接不上.而是卡在那等待,有的时候一卡就是两天都没反映,也无异常.跟踪程序就一直都是卡在上面那条语句的执行上.某些远程数据库虽然也卡死,但是过个大概40分钟或者1个多小时,会给个异常回来,异常如下:
ORA-04021: timeout occurred while waiting to lock 或者ORA-04020: deadlock detected while trying to lock 由于远程数据库多,问题变得比较频繁,把远程数据库一重启.问题立刻解决,但是不可能一出问题就要求人重启啊,DBLINK的最简单的查询也会卡死,求助!!!!!!!工程已经拖了半个多月,救命啊....

解决方案 »

  1.   

    TNSPING下远程服务器看看时间另外查查远程服务器的防火墙的设置问题,远程服务器工作是否正常不要急,冷静的分析下原因...
      

  2.   

    使用DBLINK后会导致大型表查询速度慢(有索引也没用),表连接也很慢。
    但楼主的问题应该是“因为两段式提交引起的TX锁,即使是select也会引起的”
      

  3.   

    看看这个帖子,看看会不会有点帮助:http://www.itpub.net/778989.html
      

  4.   

    1, 设置SHARED_POOL参数
    2, 换个 主程序先测试每个远程数据库是否可连接 方法