【问题标题】:Windows Service Dequeuing with Oracle Advanced Queue使用 Oracle Advanced Queue 的 Windows 服务出队
【发布时间】:2012-10-19 02:25:46
【问题描述】:

我认为这可能是一个很长的尝试,但无论如何我都会尝试。

我们发现了 Oracle 高级队列存在的问题,但似乎还没有找到 Oracle 的解决方案,所以我想我会在这里发布。

问题来了:

• 我们编写了一个多线程 Windows 服务,该服务通过名为 IVRSD1 的 Oracle 数据库实例使用特定的数据库连接到名为 schema_X 的 Oracle 模式。 • 测试服务时,测试人员使用 TOAD 通过名为 IVRSD2 的不同 Oracle 实例连接到同一模式 (schema_x)。 • 测试人员更新表格。 • 此 UPDATE 触发对存储过程的调用,该存储过程将相应更新的记录复制到队列中。 • 我们的windows 服务(使用IVRSD1 实例)应该看到队列条目并将其出列并处理它。 • 由于测试仪连接到 IVRSD2 实例,而服务连接到 IVRSD1 实例,所以它没有。 • 如果测试人员规定了 IVRSD1 实例(并反过来连接到 IVRSD1 实例),则服务将识别出队列有推送到其上的记录,并将相应地处理该记录。

这似乎是 Oracle 的一个问题,我们有一个 Oracle 支持的未解决问题,但仍然找不到解决方案。

提前感谢您的帮助

道格

【问题讨论】:

  • Oracle 数据库 11g 企业版版本 11.2.0.2.0 - 64 位生产 PL/SQL 版本 11.2.0.2.0 - 生产 CORE 11.2.0.2.0 适用于 Linux 的生产 TNS:版本 11.2.0.2.0 - 生产 NLSRTL 版本 11.2.0.2.0 - 生产
  • 请求最终到达另一个实例中的同一个队列还是根本不到达?您是否在一段时间后(比如 10 秒)检查了两个实例的基础队列表的内容

标签: oracle11g


【解决方案1】:

Oracle 高级队列不适用于 RAC

Oracle 错误 3830972

错误 3830972 - RAC 集群上的 DBMS_AQ.LISTEN 没有看到新的排队消息 在 10.2 中修复 ...

问题:

使用 2 节点 RAC 配置。 使用 dbms_aq.listen() 时,对 监听开始后的队列不会被注意到。 入队发生在集群节点 1 上。 两个集群节点都在监听队列 排队发生了。 如果在消息有之后开始监听 排队,他们几乎立刻就被注意到了。

诊断分析:

我相信 dbms_aq.listen 在 RAC 中不受支持,如果 入队和监听发生在不同的节点上,因为 一个监听电话不会被 enqueue 发布 另一个节点。

解决方法:

如果在消息排队后开始监听, 他们几乎立即被注意到。 ... 重新发现信息: 要看到此错误,必须满足以下条件: 1.在RAC环境下运行 2. 一个节点上的 DBMS_AQ.LISTEN() 没有检测到其他节点上排队的新消息 节点。

解决方法: 无,除了在每个节点上发布“心跳”虚拟消息 时不时地。这显然需要应用程序支持,并且是 因此不太可能有用。另一种选择是始终确保 消息在执行监听调用的节点上排队。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-19
    • 2013-01-30
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多