問題タブ [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 - Oracle AQ の同じメッセージが 2 回配信される
Oracle で AQ を作成し、キューをリッスンするために Java で 2 つの JMS コンシューマーを作成しました。キューにメッセージを生成すると、時々観察しました。キューから取り出されたメッセージの数が、キューに入れられた数よりも多くなっています。これは、一部のメッセージが 2 回消費されることを意味します。
プロパティでキューを作成しました:- multiple_consumers => FALSE
そして JMS コンシューマはCLIENT_ACKNOWLEDGE mode
このような動作の考えられる理由とその解決策を教えてください。したがって、問題を再現して上記の問題を解決し、複数の JMS コンシューマが同じ AQ をリッスンしている場合に、キューに入れられたメッセージの数がキューから取り出されたメッセージの数と同じになるようにします。
oracle - 別のスキーマ内のパッケージからの OracleAQ ビューのクエリ
スキーマ A が所有する OracleAQ マルチコンシューマー キューがあります。Oracle ドキュメントで説明されているように、キュー テーブルのステータスを確認するためのビュー (schema.aq$table_name*) がいくつかあります。
プレーン SQL または PL/SQL コードを使用して別のスキーマからこれらのビューをクエリできますが、このコードがパッケージ内にラップされている場合はできません。パッケージ本体は、ORA-00942 でコンパイルを拒否します: テーブルまたはビューが存在しません
2 番目のスキーマには、パッケージの外部からビューを実際に照会できるため、必要なすべての権限があります。
java - Java を使用して JMS メッセージを Oracle AQ にエンキューする方法
キュー タイプが SYS.AQ$_JMS_TEXT_MESSAGE の Oracle AQ があります。私がやろうとしているのは、Java アプリケーションから前述のキューにテキストを挿入することです。
同等の SQL クエリは次のとおりです。
私はこのガイドを使用してほとんどのことを正しく理解しましたが、行き詰まっています
このガイドでは、RAW メッセージをエンキューする方法を示していますが、JMS である必要があります。そうしないと、データ型がキューの型と一致しません。
全能のグーグルを使っても、この問題の解決策を見つけることができないので、どんな助けもいただければ幸いです。クラスを使用してそれを行う方法はありますoracle.jdbc.aq
か、それとも単にそれを吸い上げて SQL クエリを使用する必要がありますか?
java - Oracle AQ Java コンシューマ接続からの頻繁な SQLNet ブレーク エラー
当社の DBA は、これらのキューを排出する Oracle AQ Java プロセスから作成された接続に起因する SQLNet ブレーク エラーが多数あることに気付きました。Java 側にエラーは見られず、それ以外の場合は問題なく動作しているようです。これらの中断を引き起こす可能性のあるアプローチについて何かありますか?
ここにDB側からのエラーがあります... Oracleバージョン11.2.0.3を使用
Java AQ接続/セッションを初期化する方法は次のとおりです...
次に、タイマー (15 秒ごと) を使用して、このブロックを定期的に呼び出してキューを空にします...
onMessage() 非同期コールバック アプローチの使用も検討しましたが、さまざまな理由からこのアプローチを優先しました...
質問1
これは Oracle の AQ ドキュメントで参照されている例であり、かなり単純なアプローチのように見えますが、Java でメッセージをデキューするより安定した方法はありますか?
質問2
また、CLIENT_ACK モードが原因である可能性があるかどうか疑問に思っています...明示的に呼び出すmessage.acknowledge()
必要がありますか、queueSession.commit()
それともこれをカバーしますか?