0

我认为这可能是一个远景,但无论如何我都会尝试一下。

我们已经确定了我们在使用 Oracle 高级队列时遇到的问题,但是似乎还没有找到使用 Oracle 的解决方案,所以我想我会在这里发布它。

这是问题:

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

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

提前感谢您的帮助

道格

4

1 回答 1

1

Oracle Advanced Queues Do Not Work With RAC

Oracle Bug 3830972

Bug 3830972 - DBMS_AQ.LISTEN ON RAC CLUSTER DOES NOT SEE NEW ENQUEUE MESSAGES Fixed in 10.2 ...

PROBLEM:

Using 2 node RAC configuration. When using dbms_aq.listen() any enqueue made to a queue after the listen has started is not noticed. Enqueue happens on cluster node 1. Both cluster nodes are listening to the queue where enqueue happened. If the listen is started after the message have been queued, they are noticed almost instantly.

DIAGNOSTIC ANALYSIS:

I believe dbms_aq.listen is not supported in RAC if the enqueue and listen happen on different nodes because a listen call will not be posted by enqueue happening on another node.

WORKAROUND:

If the listen is started after the messages have been queued, they are noticed almost instanly. ... Rediscovery Information: To be seeing this bug the following must be true : 1. Running under a RAC environment 2. DBMS_AQ.LISTEN() on one node doesn't detect new messages enqueued on other nodes.

Workaround: None, other than to have a "heartbeat" dummy message posted on each node every now and then. This obviously requires application support and is therefore unlikely to be of use. Another alternative is to always ensure that messages are enqueued at the node that performs the listen call.

于 2012-10-18T18:25:46.770 回答