問題タブ [query-notifications]

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.

0 投票する
0 に答える
373 参照

c++ - CQN 登録が暗黙的に削除される問題

カスタム C++ OCI ラッパーを使用して、CQN C++ コールバック ベースの登録を正常に登録できますが、何らかの形でサブスクリプションがすぐに削除されたように見えます。単純な DML ではコールバックがありません。register() が正常に機能したサブスクリプションを登録解除しようとすると、ORA-29970: Specified registration id does not exist が発生します。

このテストは、ローカルの 11.2.0.1.0 Oracle サーバーを実行している Win7 (64 ビット) ボックスで実行しており、同じマシンで実行される instantclient-11.2.0.2.0 に対してビルドされた C++ クライアント アプリに接続しています。 .

  • OCI_ATTR_SUBSCR_TIMEOUTを明示的に 0 に設定しようとしましたが、役に立ちませんでした。
  • job_queue_processesインスタンス パラメータをチェックして、0 でないことを確認しました (1000 です)。
  • もちろん、接続しているユーザー/スキーマにはCHANGE NOTIFICATIONが付与されています

この問題に関するアイデアが不足しています。他に何を試したり確認したりできるかについての洞察をいただければ幸いです。

どうにかして CQN を有効にする必要があるのではないかと考え始めています。私の DBA スキルはほとんどありません。これは Windows にインストーラーを使用して 11gR1 をストック インストールしたもので、特別な構成やカスタマイズはまったく行われていません。

ありがとう、 --DD

更新 #1

同僚が同じテストを正常に実行し、サーバー提供の oci.dll を使用して実行しました。私はそれを試しました(インスタントクライアントを使用してビルドしましたが、実行時にPATHを強制しました:Path=D:\oracle\product\11.2.0\dbhome_1\BIN;$(Path)VSプロパティページ>デバッグ>環境で)、実際にCQNテストが機能しました!クライアントとサーバーの間のわずかなバージョンの違い、またはInstantclient (ちなみにLightバリアント) と完全なクライアントとサーバーのインストールの使用が本当の原因であるかどうかはまだわかりません。

しかし、新しいInstantClient が CQN をサポートしていないというのは悪いニュースです...

アップデート #2

Win64 のバージョン 12.2.0.(1|2|3).0 で、instantclient Light (65 MB) またはNormal (150 MB)の 6 つの組み合わせすべてを試しましたが、どれも機能しませんでした。フル クライアントはまだテストしておらず、Linux でもまだテストしていません。

0 投票する
1 に答える
10288 参照

sql-server - データベースからアプリケーションにデータをプッシュする方法は?

アプリケーションがデータをプルするのではなく、データベースからアプリケーションにデータをプッシュしたい。ms sql サーバーと apache tomcat サーバーをインストールしました。私は自分のアプリケーションを apache tomcat に持っています。ここでデータベースに接続しました。ここで、データが更新されるたびにデータベースにデータを送信してもらいます。しかし、私が知っているのは、データベースからデータをフェッチすることは良い考えではありません。アプリケーションは更新されたデータをデータベースで監視する必要があり、5 秒ごとにクエリを起動する必要があるため、これも効率的ではありません。

私はそれをグーグルで検索しました。ここでクエリ通知、Sqlサーバーエージェントジョブでタスクを自動的にスケジュールするといういくつかの回答を得ました。他に提案があれば投稿してください。

0 投票する
0 に答える
166 参照

sql-server - クエリ通知の使用方法と要件は何ですか?

アプリでクエリ通知を使用して、データベースから更新されたデータの通知を取得したいので、5 秒ごとにデータベースを監視する代わりに、アプリがクエリを起動して更新されたデータを取得します。ms sql server 2012 エクスプレス エディションを使用していますが、このエディションはクエリ通知を快適に使用できますか? アプリケーション(webMathematica)をデプロイするためにapache tomcatサーバーを使用しています.jspのユーザーカスタムタグを使用してアプリケーションをtomcatサーバーに埋め込みます.

通知要求をデータベースに送信するようにクライアント アプリケーションを構成する必要がありますが、その方法がわかりません。クエリ通知を使用するための適切な資料/リンクを提案してください。

0 投票する
1 に答える
193 参照

sql-server - アプリケーションからデータベースへの通知要求のクエリを作成するにはどうすればよいですか?

これは私の以前の質問です。アプリケーションのプルデータではなく、データベースからデータをプッシュする方法について。

リンクとドキュメントを調べた後、通知要求のためにアプリケーション側でクエリを作成する必要があることがわかりました。DB はサブスクリプションに要求を登録し、DB に変更がある場合はサブスクリプションをチェックします。リクエストがあれば、クライアントにメッセージを送信します。

このパラは上記のリンクからのものです

今、通知要求のためにアプリケーション側でクエリを作成する方法がわかりませんsubmit a service and a broker instance。また、上記のパラグラフからのスタンドも理解していません。通知要求のためにデータベースにクエリを実行する前に、アプリケーションでサービスとブローカーのインスタンスを作成する必要があると思います。もしそうなら、サービスとブローカーインスタンスを作成する方法は?

コマンドで DB サーバーのサブスクリプションを確認できますselect * from sys.dm_qn_subscriptions。誰でも私を助けることができますか?

0 投票する
3 に答える
18522 参照

sql-server - Service Broker のメッセージが約 1 日後にハングアップし始める

Service Broker を使用しているアプリケーションは SQL 2008 です。1 日に約 1 回、データベースのパフォーマンスが著しく低下し始めます。これは Service Broker が原因であると判断しました。次のコマンドを使用して、すべてのブローカー接続をハード リセットした場合:

その後、パフォーマンスは翌日頃まで通常に戻ります。また、パフォーマンスが低いときに次のクエリを実行すると、STARTED_OUTBOUND 状態でスタックしている多数 (現在約 1000) の会話が返されることにも気付きました。

また、次のクエリではエントリが返されません。

このクエリによって返されるアイテムがたくさんある場合、パフォーマンスは問題ないようです。問題が発生するのは、STARTED_OUTBOUND の接続がこの状態のままになっている場合のみです。

SQL Server 2008 インスタンスで Service Broker に対して行った唯一の構成は、次のコマンドを実行することでした。

SQL エラー ログを調べてみると、このエントリも 1000 回以上見つかりました。

また、このエラーはログ全体で十数回見られますが、データベースにマスター キーを作成するだけでこれを修正できると思います。

これらのエラーの数は、キューに残っている会話の数に関連している可能性があると考えています. クエリ通知をサブスクライブするために使用している C# コードは次のとおりです。

通知を処理する方法は次のとおりです。

ブローカーの接続がこの状態になる原因を知っている人はいますか? または、これを引き起こしている原因を突き止めるために、どのツールを使用できますか? 現在、通知に登録している Web サーバーは 1 つしかないため、シナリオはそれほど複雑ではありません。

アップデート:

わかりましたので、この投稿から、「存在しないため、リモートサービスが見つかりません」というエラーは、SqlDependencyが適切にクリーンアップされていないことが原因であると判断しました。サービスが終了した後も、ブローカーはアプリケーションに通知を送信しようとしています。だから今、SqlDependency.Start() を呼び出す前に、アプリの起動時に適切にクリーンアップされていないものをすべてクリアする方法を見つける必要があるように思えますが、元のメソッド以外にこれを行う方法が見つかりませんでしたこれはデータベースをオフラインにするため、受け入れられません。これをきれいにする方法を知っている人はいますか?

0 投票する
1 に答える
615 参照

c# - 複数の結果クエリ (SQL Service Broker) で「会話の終了」を正しく呼び出すにはどうすればよいですか?

SQL Server 2008 R2 で Service Broker を使用しており、次のような複数の選択ステートメントを持つストアド プロシージャを登録しています。

C# オブジェクト SqlDependency または SqlNotificationRequest を使用してクエリを登録すると、クエリ内の各 select ステートメントに対して sys.conversation_endpoints テーブルに 1 つのエントリが取得されます。したがって、上記のクエリでは、2 つのエンドポイントが追加されています。dbo.Appointment テーブルに行を挿入すると、最初のクエリに関連するエンドポイントに 1 つの通知が配信されます。次に、@conversation_handle で END CONVERSATION を呼び出しますが、これをストアド プロシージャとして登録したので、2 番目のクエリの会話も終了させたいと考えています。両方のエントリが異なる conversation_group_id 列を持っているため、これを行う方法がわかりません。

SqlDependency/SqlNotificationRequest を使用してこれを行う方法はありますか? または、ストアド プロシージャで会話グループを手動でセットアップし、SqlDependency/SqlNotificationRequest の使用を停止する必要がありますか?

0 投票する
1 に答える
4304 参照

sql-server - サービス ブローカー - SQL Server エラー ログに会話ハンドルが見つかりませんというメッセージが表示される

このトピックについて多くのスレッドが開かれましたが、私の問題に対する答えがないように見えるので、試してみます..

システム:Windows Server 2012 SQL Server 2012 Enterprise エディション

問題 : SQLDependency を使用して、アプリケーションでクエリ通知を使用できるようにしています。これは、独自のサービス、キュー、およびプロシージャを作成することを意味します。

質問 1: ストアド プロシージャを見ると、トップ 0 を受け取っていることがわかります。トップ 0 を行うとはどういう意味ですか?

さて、実際の問題です..時折、エラーログが次のメッセージでいっぱいになります(開くことができないほどです): クエリ通知配信は、ダイアログ 'X' でメッセージを送信できませんでした.... Service Broker: '会話ハンドル X が見つかりません。メッセージは、同じ conversation_handle で表示されるか、最も異なる 3 つのハンドルで表示されます。

sys.conversation_endpoints からその会話をクエリすると、それが表示され、 is_system = 1 (STARTED_OUTBOUND) としてマークされます。

エラー 9245 に関するアラートを追加して、エラーが発生したときにその理由を特定しようとしました。メッセージ「前回の時間間隔中に X クエリ通知エラーが抑制されました」では、X は膨大で 10,000 を超えています。そのような数の通知がないため、この数は再試行に関連していると思います。

最初は、「DialogTimer」メッセージに関連している可能性があると思いました。その特定のメッセージの会話を終了すると、メッセージが停止することに気付いたからですが、最近は機能しませんでした。 .

アプリケーション プールにリサイクルするとすぐに発生しますが、ログには SQLDependency.Stop が呼び出されます。

さらに詳細が必要な場合はお知らせください。あなたの助けに感謝、

0 投票する
1 に答える
6525 参照

c# - Sql 依存関係を使用したクエリ通知 - 変更の検出を停止します

アプリケーションでキューとして機能する SQL サーバー テーブルを使用しています。SQL 依存関係を使用したクエリ通知を使用しています。特に、このブログ投稿で使用されている Jeremiah Gowdy の素晴らしい実装です。http://jgowdy.blogspot.com/2010/01/sqldependency-query-notification-with.html

これを Windows サービスに実装し、それを使用して SQL テーブル、つまりキューの変更を「リッスン」し、変更がある場合はキューの返された内容を処理します - 以下のコードを参照して、内容のデータセットを返しますストアド プロシージャ。

問題は、負荷が高い場合や一定期間が過ぎた場合、テーブルにレコードが存在する場合でも、変更が検出されなくなることです。サービスを再起動すると、変更が検出されます! テーブルを手動で更新して通知をトリガーしようとしましたが、役に立ちませんでした。ある時点で通知サービスが中断され、再登録に失敗したようですが、確信が持てません。

テーブル自体の変更を常に監視し、キューがスタックした場合はサービスを再起動する必要があるため、この問題の解決策を必死に見つけようとしています-理想的ではありません!

他の誰かが SQL 依存関係とクエリ通知で問題を抱えていますか? 特に、既知の問題に関するガイダンスや知識が役立ちます。より良いキューイングシステムが存在することは知っていますが、プロジェクト全体を再開発するのではなく、できればこの問題を解決しようとしています!!!

コードスニペットを次に示します。

ここに私のストアドプロシージャがあります

更新: SQL サーバーのログがあり、次のエラーが発生しています。

さらに掘り下げた後、リモートサービスがドロップし続けているようです.SQLDependencyが呼び出しのたびにサブスクリプションをクリーンアップする方法に関係しているようです. この問題を解決する方法を知っている人はいますか?

0 投票する
1 に答える
598 参照

c# - ネットワーク SQL データベース SQL 依存関係の C# アプリの問題

ローカル データベースを使用して、C# アプリケーションでクエリ通知を正常に使用しました。ただし、接続文字列を実際のデータベース (ローカルではない) に変更すると、エラーが発生します。両方のデータベースが同一であることに注意してください+キューとサービスなどは両方のデータベースで同一です。私がしたことは、接続文字列を交換することだけでした ==> その結果、キュー サブスクリプションの作成に失敗しました。ローカル DB とリモート DB の依存関係に関して不足している点がある場合は、アドバイスしてください。

例外を発生させるコードの一部:

0 投票する
1 に答える
4992 参照

java - JAVA での SQL Server クエリ通知

私はしばらくオンラインで検索してきましたが、今のところ運がありません。Java http://www.codeproject.com/Articles/144344/Query-Notification-using-SqlDependency-and-SqlCachでこれを実装することは可能ですか? SQL Server 2012 の JDBC でサポートされていますか?

前もって感謝します!