0

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

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

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

4

2 回答 2

1

什么数据库版本?他们是卡在运行 SQL 还是在 PL/SQL 中?最近有没有人在例程中添加异常处理?我记得在 9iR2 中,我们被告知,或者向调用例程引发异常,我们将捕获所有异常并继续运行(基本上尝试运行处理作业中的所有项目,即使有些项目失败)。我们不可避免地让作业陷入无限循环,SQL 失败,被异常处理程序捕获并重试。他们不能被杀死,因为 WHEN OTHERS 也捕获了“你的会话已被杀死”异常。我认为后者在 10g 中发生了变化,因此没有捕获到异常。

于 2008-12-01T19:47:52.557 回答
0

我们永远无法确定是什么导致了这种情况发生。我们认为这是 2008 年 10 月累积补丁中的一个缺陷。也许以后的补丁会修复它。这已经有几个月没有发生了(而且我们遇到了一些网络中断),所以希望问题已经消失了。

于 2009-02-02T14:25:54.420 回答