0

これは大げさかもしれないと思いますが、とにかくやってみます。

Oracle Advancedキューで発生している問題を特定しましたが、Oracleでの解決策がまだ見つからないようであるため、ここに投稿すると思いました。

問題は次のとおりです。

•IVRSD1と呼ばれるOracleデータベースインスタンスを介して、schema_Xと呼ばれるOracleスキーマへの特定のdb接続を使用するマルチスレッドWindowsサービスを作成しました。•サービスをテストする場合、テスターはTOADを使用してIVRSD2と呼ばれる別のOracleインスタンスを介して同じスキーマ(schema_x)に接続されます。•テスターはテーブルを更新します。•このUPDATEは、それぞれの更新されたレコードをキューにコピーするストアドプロシージャの呼び出しをトリガーします。•Windowsサービス(IVRSD1インスタンスを使用)は、キューエントリを確認し、それをデキューして処理する必要があります。•テスターはIVRSD2インスタンスに接続されており、サービスはIVRSD1インスタンスに接続されているため、接続されていません。•テスターがIVRSD1インスタンスを指定した場合(そして次にIVRSD1インスタンスに接続された場合)、

これはOracleの問題のようであり、Oracleをサポートするオープンチケットがありますが、それでも解決策を見つけることができません。

助けてくれてありがとう

ダグ

4

1 に答える 1

1

OracleAdvancedQueuesはRACでは機能しません

Oracleバグ3830972

バグ3830972-RACクラスター上のDBMS_AQ.LISTENは、10.2で修正された新しいエンキューメッセージを認識しません...

問題:

2ノードRAC構成を使用します。dbms_aq.listen()を使用する場合、リッスンの開始後にキューに対して行われたエンキューは認識されません。エンキューはクラスターノード1で発生します。両方のクラスターノードは、エンキューが発生したキューをリッスンしています。メッセージがキューに入れられた後にリッスンが開始されると、それらはほぼ瞬時に通知されます。

診断分析:

別のノードで発生するエンキューによってリッスン呼び出しがポストされないため、エンキューとリッスンが異なるノードで発生する場合、dbms_aq.listenはRACでサポートされていないと思います。

回避策:

メッセージがキューに入れられた後にリッスンが開始されると、メッセージはほぼ瞬時に通知されます。...再検出情報:このバグを確認するには、次の条件が満たされている必要があります。1.RAC環境で実行している2.1つのノードのDBMS_AQ.LISTEN()が、他のノードにキューに入れられている新しいメッセージを検出しない。

回避策:「ハートビート」ダミーメッセージを各ノードに時々投稿する以外はありません。これには明らかにアプリケーションのサポートが必要であるため、役に立たない可能性があります。もう1つの方法は、listen呼び出しを実行するノードでメッセージが常にキューに入れられるようにすることです。

于 2012-10-18T18:25:46.770 に答える