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