問題タブ [advanced-queuing]
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.
java - Oracle AQ Java インタフェースとカスタム メッセージ タイプ
AQ に Oracle Java インターフェイスを使用しており、メッセージをデキューしたいと考えています。これらのメッセージは、次の 2 つのフィールドで構成されています。
- 一意の行 ID。
- 一意でない ID。
次のような単一の RAW ペイロードを使用して、メッセージを正常にデコードしました。
sthを読んだことを覚えています。Java インターフェイスではカスタム型がサポートされていないことを示しています。そうですか?コレスポンデントAQQueueTableProperty
コールはどのようになりますか、または SQL でキューとキュー テーブルを作成する必要がありますか? 通常の JDBC 操作を使用して、デキュー操作の結果を Java 表現にマップすることはできませんResultSet
か?
sql-server - SQL Server には、Oracle Streams Advanced Queuing と同様の機能がありますか?
Oracle Streams AQ (Advanced Queuing) は、スケーラビリティの高いデータベース ベースのキューイング機能を提供します。SQL Server (任意のバージョン) に同等の機能はありますか?
注: テーブルを単にキューとして使用するという意味ではなく、ベンダーが提供するデータベース プラットフォームに対する特定の拡張機能です。
oracle - Oracle Advanced Queuingでの無関係なメッセージの選択的デキュー
この質問は、 Oracle Streams Advanced Queuingでのメッセージのデキューに関するものです。
相互に関連するメッセージが順次処理されるようにする必要があります。
たとえば、トランザクション参照 (txn_ref) と呼ばれるビジネス関連フィールドを持つ 4 つのメッセージがキューにシードされており、そのうちの 2 つのメッセージ (1,3) が同じトランザクション (000001) に属しているとします。
また、このキューからデキューしたい 4 つのスレッド/プロセスを実行しているとします。以下が発生するはずです。
- スレッド 1 がメッセージ #1 をデキューします
- スレッド 2 はメッセージ #2 をデキューします
- スレッド 3 はメッセージ #4 をデキューします (メッセージ #3 は #1 に関連しており、#1 がまだ完了していないため)。
- メッセージを待っているスレッド 4 ブロック
- スレッド 1 はメッセージ #1 の作業をコミットします
- スレッド 4 (またはおそらくスレッド 1) がメッセージ #3 をデキューします。
私の最初の考えは、ENQ_TIME (エンキュー時間) が同じ TXN_REF を持つすべてのメッセージの他の ENQ_TIME よりも遅くないデキュー条件でこれを達成できるということでした。しかし、私の問題は、まだ選択していないメッセージの TXN_REF を参照して選択する方法です。例えば
ここで私が望むものを達成することは可能ですか?
oracle - Oracle AQ のリキュー
ユニバーサル pl/sql を書き込んで、既にキューに入れられているメッセージを (再) キューに入れようとしています (どのような状態でもキュー テーブルに存在します)。
キューでデキューが有効になっている場合は正常に機能するため、最初にブラウズ モードでデキューしてDBMS_AQ.message_properties_t
、既存のメッセージからデータを入力して読み込むことができます。しかし、デキューが無効になっている場合、どうすればそれらを取得できますか?
ありがとう
database - デキューの進行中にセッションが強制終了された後、Oracle AQ メッセージが失われました
Oracle 11g R2 Windows 2008 R2 データベースで DBMS_AQ.deQueue に問題があります。セッションがデキューを実行し、その後 (コミットまたはロールバックの前に) セッションが強制終了されると、特定のメッセージがキューから完全に削除されます。まだキューにあるか、少なくとも例外キューにあると思います。次の手順を実行してテストします。
- セッション 1 からエンキューし、コミットします。(以下のコードを参照)
- セッション 2 からデキューします (以下のコードを参照)。
- セッション 1: MY_Q_T から * を選択 -> 私のメッセージはまだここに表示されています。
- セッション 2: MY_Q_T から * を選択 -> メッセージが表示されなくなりました。
- セッション 2 (デキュー) セッションを終了します。
- セッション 1: MY_Q_T から * を選択 -> メッセージが表示されなくなりました。メッセージが失われます。
これはバグですか?デキュー (/visibility) は自律的に設定されていないため、セッション 2 が強制終了されたときに、メッセージがまだキューにあると予想されます。回避策のアイデアはありますか?
エンキューとデキューに使用されるコード:
エンキュー:
デキュー:
sql - Oracle SQLクエリは1つのプロセスでのみ失敗します:「ORA-01405:フェッチされた列の値がNULLです」
作成した「プラグイン」でシステムストアドプロシージャを呼び出そうとしています。プラグインをテストアプリケーションでテストすると、正常に動作します。構築しているターゲットアプリでプラグインを実行すると、Oracleから意味のない例外が発生します。
Oracleサーバー11.2.0.1.0とODP.NET2.112.2.0を使用しています。
これが私のテストアプリからのODP.NETからのデバッグトレースです:
そして、ターゲットアプリで実行されている同じコードからのODP.NETからのデバッグトレースは次のとおりです。
テスト/ターゲットアプリケーション間で何が異なる可能性があるかについて、私は途方に暮れています。両方のプロセスは、ローカルのAdministratorsグループのメンバーとして実行されています。どちらも同じ接続文字列を使用しています。どちらも同じ.NETコードを実行していますが、データベースサーバーとは結果が異なります。ここで何が起こっているのでしょうか?
oracle - OracleAdvancedQueuingの10gデータベースに対してOracle11gClientを使用することをお勧めしますか?
C#、NServiceBus、Oracle 10g(クライアントとサーバー)などを使用して、クライアント用の統合ソフトウェアを開発しています。要件は、メッセージのキューイングメカニズムであるITransportの実装を作成するために、NServiceBusの新しいプラグインを開発する必要があることです。そのため、これにはOracleAdvancedQueuingが使用されます。Oracle 11g(クライアントとサーバー)で高度なキューイング用のコードを作成する作業はかなり行っていますが、ODP.Net 10gを見ると、キューイングのサポートが不足しているか存在しないため、問題が発生する可能性があります。
私の質問はこれです:
11gクライアントを10gデータベースサーバーに対して使用できることは知っていますが、Oracle Advanced Queuingにとっては良い考えであり、知っておく必要のある落とし穴はありますか?
どうもありがとう。
c# - C#を使用してOracle8iからメッセージキューをリッスンする方法
メッセージキュー用のOracleODAPをインストールすることにより、C#でOracle11gを使用してメッセージキューAPIを使用できました。Oracle8i上に構築された古いシステムのアップグレードプロジェクトがあります。基本的に既存のシステムを変更することはできないので、テーブル挿入トリガーを介してメッセージキューイベントを追加することを考えていました。しかし、C#でそのメッセージキューをリッスンする方法があるかどうか疑問に思っています。
現在のオラクルのWebサイトでは、オラクル8i用のODACは提供されていません。しかし、私は彼らがこれを行うためのサポートまたはハックを持っているかどうか疑問に思っていますか?
これに代わる方法は、テーブルを監視するために1秒ごとにポーリングを実行することです。どう思いますか?
注:JavaはJMSを介してこれを実行できることを読みましたが、要件はC#で使用するためのものです。 ここを参照してください
java - MessageListener が Oracle Queue のメッセージをリッスンしていない
Oracle Advanced Queue を実装しました。リスナー プログラムを作成しています。以下は私のサンプルです:
}
このプログラムは、Oracle キュー内のメッセージを実行およびリッスンし続けるスタンドアロン プログラムであることに注意してください。
残念ながら、このクラス ファイルの jar を作成して実行すると、実行されて終了し、キュー内のメッセージが 1 つだけ消費されます。リスナーが実行され続けず、キューをリッスンしないのはなぜですか?
リッスンし続け、キュー内のすべてのメッセージを取得してから、永遠にリッスン モードのままになると思っていましたが、そのようには動作しません。
誰かが何がうまくいかないのか教えてくれれば感謝します。
ありがとう
database - アプリがオフラインのときにエンキューされたメッセージをデキューする方法 (Oracle Advanced Queue)
2つ質問があります。以下はシナリオです -
プロセス A とプロセス B の 2 つの異なるプロセスがあります。プロセス A は、メッセージをメッセージ キューにエンキューします。プロセス B は、メッセージ キューからメッセージをデキューします。
1) プロセス B はしばらくシャットダウンしますが、プロセス A はメッセージをキューに入れ続けます。プロセス B がライブに戻ったとき、プロセス B がオフラインだったときにプロセス A によってポストされたメッセージ キュー内のメッセージをデキューする方法は?
2) メッセージをデキューするには複数のプロセス B が必要なため、使用しているキューは複数のコンシューマ キューです。設計の背後にある理由は、プロセス B の 1 つが停止した場合でも、他のプロセス B が引き続きメッセージを処理できるためです。同時に、プロセス B の 1 つのインスタンスがメッセージを取得した場合、そのメッセージを処理しないように他のプロセス B に通知する必要があります。
サンプルが見つかりませんでした。どんな助けでも大歓迎です。