【问题标题】:Network Outage Causes Stored Procedure Querying Across DB Link to Hang Forever网络中断导致跨数据库链接的存储过程查询永远挂起
【发布时间】:2008-12-01 15:06:03
【问题描述】:

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

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

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

【问题讨论】:

    标签: oracle plsql timeout locking database-link


    【解决方案1】:

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

    【讨论】:

    • Oracle 数据库 10g 企业版版本 10.2.0.3.0 - 64bi PL/SQL 存储过程。我审查了这些程序,但没有看到任何无限循环的地方。一件有趣的事情是,在这第一次发生前 4 天,安装了 10 月 CPU。可能导致它?
    • 谁有十月 CPU 文档的链接?我能找到的只是列出应该安装 CPU 的所有不同 Oracle 版本的文档。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-08
      • 1970-01-01
      相关资源
      最近更新 更多