問題タブ [oracle-aq]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
oracle - dbms_aq.dequeue_array、最初のメッセージが 2 回返される
序章
Oracle Advanced Queuing メソッドを使用すると、Oracle SQL Server (正確には、Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production) で非常に奇妙な動作に直面しています。
問題
エラーは、X個のメッセージをキューに入れたことですが、dequeue_array はX+1個のメッセージを返し、最初のメッセージが重複しています (MessageId で確認できます)。
再現:
エラーを再現するための簡単な PoC を書くことができました。このコードは非常に単純です。エンキュー/デキューは標準の Oracle AQ です。このコードは、次の手順を 2 回実行します (テスト実行)。
- キュー テーブルをパージする
- X メッセージをキューに入れる
- dbms_aq.dequeue_array 呼び出しを使用してすべてのメッセージをデキューします
- デキューされたメッセージの数を確認する
新しい接続で POC を実行すると、最初の実行はエラーなしで成功しますが、その後の実行はすべて失敗します。その後、同じ接続を使用すると、スクリプトを実行するたびに、両方のテスト実行で失敗します。
私がこれまでに試したこと:
- 「新しい」接続でこのスクリプトを実行する: 最初の実行のみが失敗する
- 同じ接続でのスクリプトの追加実行: すべての実行が失敗する
- 新しいキューを使用/作成する場合: 最初の実行のみが失敗する
- dbms_aqadm.purge_queue_table() の代わりに「delete from <queue_table>」を使用する場合: すべて問題ありません
- 「通常の」1 つずつデキューを使用する場合: すべて問題ありません
結論:
この動作を説明することも、コードにエラーを見つけることもできません。ご覧ください。お気に入りの SQL クライアントで直接実行できるはずです (PL/SQL Developer でテスト済み)。
さらに詳しい情報が必要な場合や、PoC を機能させるのに問題がある場合は、質問してください。このスレッドを定期的にチェックします。何が起こっているかについての詳細な出力を含め、PoC をできるだけ読みやすいものにしようとしました。
コード:
出力例:
oracle-aq - Oracle AQ によるリクエスト/リプライ
Oracle AQ を使用して、要求と応答のパターンを実装したいと考えています。基本的に「リクエスタ」は次のようになります。
- 要求メッセージをキューに入れます。
- 要求メッセージ用に生成されたメッセージ ID を取得します。
- 応答メッセージをデキューし、デキュー オプションで相関プロパティを元の要求メッセージのメッセージ ID として指定します。
DBMS_AQ.ENQUEUE プロシージャでは、元のメッセージ ID を返す msgid OUT パラメータがRAWであるのに対し、デキュー オプションの相関プロパティはVARCHAR2(128)であることがわかります。
それを実装する正しい方法は何ですか?
oracle - Oracle OSB プロキシ サービス エラー
Oracle AQ を使用して作成されたキューを使用して、プロキシ サービスを使用する jms を作成しました。また、プロキシ サービスは、同じメッセージを orace AQ を使用して作成された別のキューにエンキューするビジネス サービスにルーティングされます。プロキシ サービスは正常に実行されており、メッセージは宛先キューに入れられますが、以下のようなエラー メッセージがスローされます。
エンドポイント プロキシ サービスの着信メッセージの処理中に予期しないエラーが発生しました
エラーが原因で、サービスが再試行され、メッセージが宛先キューに 16 回投稿されたと思います。
これを解決するのを手伝ってください。
ありがとう。
oracle11g - 一部の MQ クライアントに対する Oracle データベースの変更
こんにちは Oracle DB の皆さん、データベースの DML 変更を MQ サーバー (私の場合は Kafka) に伝達する方法はありますか。以下について読みましたが、具体的な実装が見つかりませんでした
Oracle ストリーム:- データベースからデータベースへのレプリケーション用です。
oracle strams AQ:- MQ クライアントとの統合用
GoldenGate: コストがかかるため使用できません