网络中断导致存储过程查询DB链接以永久挂起

时间:2008-12-01 15:06:03

标签: oracle plsql timeout locking database-link

我支持通过WAN查询远程数据库的许多存储过程。网络偶尔会出现故障,但最糟糕的情况是程序失败,必须重新启动。

过去几周,它发生了恶劣的转折。而不是失败的程序挂起在一个奇怪的锁定状态。它们不能在Oracle内部被杀死,只要它们存在,任何尝试运行该程序的其他副本的行为都会挂起。我们发现的唯一解决方案是使用操作系统中的“kill -9”来终止违规程序。其中一些程序在几个月甚至几年内都没有改变,因此我怀疑数据库或数据库配置中存在根本原因。

任何人都有任何想法,我们可以做些什么来解决问题?或者PL / SQL是否有我可以添加到代码中的超时机制,以便我可以创建一个我可以以编程方式处理的异常?

2 个答案:

答案 0 :(得分:1)

什么数据库版本?他们是在运行SQL还是在PL / SQL中运行? 最近有人在例程中添加了异常处理吗? 我记得在9iR2中,我们被告知,相反或者对调用例程提出异常,我们要捕获所有异常并继续运行(基本上尝试运行处理作业中的所有项目,即使有些失败)。 我们不可避免地让工作陷入无限循环,SQL失败,被异常处理程序捕获并再次尝试。并且他们不能被杀死,因为当其他人也抓住了“你的会话被杀”的例外情况。我认为后者改变了10g,因此异常没有被抓住。

答案 1 :(得分:0)

我们无法确定导致这种情况发生的原因。我们认为这是2008年10月累积补丁的缺陷。也许后来的补丁修好了。它已经发生了几个月(我们已经有一些网络中断),所以希望这个问题已经消失了。