问题标签 [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

我在 Win7(64 位)机器上运行此测试,运行本地 11.2.0.1.0 Oracle 服务器,并连接了针对在同一台机器上运行的 Instantclient-11.2.0.2.0 构建的 C++ 客户端应用程序.

  • 我尝试将OCI_ATTR_SUBSCR_TIMEOUT显式设置为 0,但无济于事。
  • 我检查了job_queue_processes实例参数以确保它不是 0(它是 1000)。
  • 当然,我正在连接的用户/模式已被授予更改通知

我在这个问题上的想法已经用完了,我希望能对我可以尝试或检查的其他内容提供一些见解。

我开始怀疑是否需要以某种方式激活CQN 。我的 DBA 技能几乎不存在,这是使用安装程序在 Windows 上进行的 11gR1 库存安装,根本没有进行任何特殊配置或定制。

谢谢,--DD

更新#1

一位同事成功地运行了同样的测试,他使用服务器提供的 oci.dll 运行它。我试过了(我使用instantclient构建,但在运行时强制使用PATH:Path=D:\oracle\product\11.2.0\dbhome_1\BIN;$(Path)在VS属性页>调试>环境中),确实CQN测试有效!我们仍然没有弄清楚客户端和服务器之间的细微版本差异,或者使用 Instantclient(顺便说一下Light变体)与完整客户端与服务器安装是否是真正的罪魁祸首。

一个较新的即时客户端不支持 CQN 是个坏消息……

更新#2

我已经在 Win64 上的 12.2.0.(1|2|3).0 版本中尝试了所有 6 种 Instantclient Light (65 MB) 或Normal (150 MB) 组合,但都没有奏效。尚未测试完整客户端,也尚未在 Linux 上进行测试。

0 投票
1 回答
10288 浏览

sql-server - How to push the data from database to application?

I want to push the data from database to application instead of application pull the data. I have installed ms sql server and apache tomcat server. I have my application in apache tomcat, here I made connection to database. Now I want database send the data whenever there is update in data. But all I know is fetch the data from database is not good idea, because application needs to monitor the database for updated data will lead to fire the query for every 5 sec, this is not efficient as well.

I google it I got some answers they are Query Notification here, Sql server Agent Job to schedule the task automatically. If you have any other suggestion please post it.

0 投票
0 回答
166 浏览

sql-server - 如何使用查询通知以及有什么要求?

我想在我们的应用程序中使用查询通知从数据库获取更新数据的通知,以便应用程序触发查询以获取更新的数据,而不是每 5 秒监控一次数据库。我用的是ms sql server 2012 express edition,这个版本使用查询通知方便吗?我正在使用 apache tomcat 服务器部署我的应用程序(webMathematica),我使用 jsp 的用户自定义标签将我的应用程序嵌入到 tomcat 服务器。

我需要配置客户端应用程序以向数据库发送通知请求,我不知道该怎么做。建议我使用查询通知的好材料/链接。

0 投票
1 回答
193 浏览

sql-server - 如何编写从应用程序到数据库的通知请求查询?

这是我的棘手问题。关于如何从数据库推送数据而不是应用程序拉数据。

通过链接和文件后,我知道我需要在应用程序端编写一个查询以获取通知请求,然后数据库将在订阅中注册我的请求,如果数据库有任何更改,它将检查订阅,如果请求在那里它会将消息发送给客户端。

此段来自上述链接

现在我不知道如何在应用程序端为通知请求编写查询,而且我不理解submit a service and a broker instance上面给出的段落。我猜在查询数据库以获取通知请求之前,需要在应用程序中创建服务和代理实例。如果是这样,如何创建服务和代理实例?

select * from sys.dm_qn_subscriptions我可以通过命令检查数据库服务器的订阅。谁能帮我?

0 投票
3 回答
18522 浏览

sql-server - 大约一天后,Service Broker 消息开始挂断

我有一个使用 Service Broker 的应用程序是 SQL 2008。大约每天一次,数据库的性能开始受到明显影响,我确定这是因为 Service Broker。如果我使用以下命令硬重置所有代理连接:

然后性能恢复正常,直到大约第二天。我还注意到,当性能很差时,运行以下查询会返回大量(目前大约 1000 个)卡在 STARTED_OUTBOUND 状态的对话:

此外,以下查询不会返回其中的任何条目:

在此查询返回大量项目的情况下,性能似乎还不错。唯一出现问题的时间是当有 STARTED_OUTBOUND 的连接停留在此状态时。

我对 SQL Server 2008 实例上的 Service Broker 所做的唯一配置是运行以下命令:

挖掘 SQL 错误日志,我也发现了超过 1000 次这个条目:

我在整个日志中也看到这个错误十几次,但我相信我可以通过在数据库中创建一个主密钥来解决这个问题:

我认为这些错误的数量可能与停留在队列中的对话数量有关。这是我用来订阅查询通知的 C# 代码:

以下是我处理通知的方式:

有谁知道什么会导致经纪人的连接进入这种状态?或者我可以使用什么工具来试图找出导致这种情况的原因?我目前只有一个 Web 服务器正在注册它的通知,所以我的场景并不太复杂。

更新:

好的,所以我从这篇文章中确定错误“找不到远程服务......因为它不存在”是由于 SqlDependency 没有正确清理自身。服务结束后,代理仍在尝试向我的应用程序发送通知。所以现在,听起来我只需要找到一种方法来清除在调用 SqlDependency.Start() 之前我的应用程序启动时没有正确清理的任何内容,但除了我的原始方法之外,我还没有找到其他方法上面,这会使数据库脱机并且是不可接受的。有谁知道清理这个?

0 投票
1 回答
615 浏览

c# - 您如何使用多结果查询(SQL 服务代理)正确调用“结束对话”?

我在 SQL Server 2008 R2 上使用 Service Broker,并且我正在注册一个存储过程,该过程具有多个选择语句,如下所示:

当我使用 C# 对象 SqlDependency OR SqlNotificationRequest 注册查询时,我会在 sys.conversation_endpoints 表中为查询中的每个选择语句获得一个条目。因此,通过上述查询,我​​添加了 2 个端点。当我在 dbo.Appointment 表中插入一行时,我会收到一个通知,该通知已发送到与第一个查询相关的端点。然后我在@conversation_handle 上调用 END CONVERSATION,但由于我将其注册为存储过程,我也想结束第二个查询的对话。我不确定如何执行此操作,因为两个条目都有不同的 conversation_group_id 列。

有没有办法使用 SqlDependency/SqlNotificationRequest 来做到这一点,还是我需要在我的存储过程中手动设置对话组并停止使用 SqlDependency/SqlNotificationRequest?

0 投票
1 回答
4304 浏览

sql-server - 服务代理 - SQL Server 错误日志中未找到会话句柄消息

关于这个主题打开了许多线程,似乎没有一个可以解决我的问题,所以我要试一试..

系统:Windows Server 2012 SQL Server 2012 企业版

问题:我们使用 SQLDependency 在我们的应用程序中启用查询通知,这意味着它创建自己的服务、队列和过程。

问题 1:查看存储过程,我看到它确实收到了 top 0。top 0 是什么意思?

现在是真正的问题.. 有时,错误日志中充满了以下消息(直到我无法打开它):查询通知传递无法在对话框'X'上发送消息....因为以下错误在服务代理中:'找不到对话句柄 X。消息以相同的 conversation_handle 或 3 个最多的不同出现。

当我从 sys.conversation_endpoints 查询该对话时,我确实看到了它,并且它被标记为 is_system = 1 (STARTED_OUTBOUND)。

我添加了一个关于错误 9245 的警报,以尝试确定它发生时发生的原因。在消息“在最后一个时间间隔 X 查询通知错误被抑制”中,X 非常大,超过 10,000 个。我猜这个数字与重审有关,因为我们没有这么多的通知。

起初,我认为它可能与“DialogTimer”消息有关,因为我注意到当我结束该特定消息的对话时,消息停止但最近它不起作用所以我唯一能做的就是设置 NEW_BROKER .

当我确实回收到我们的应用程序池时,它立即发生,尽管我在我们的日志中看到它调用 SQLDependency.Stop ,我没有看到对象(服务、队列和过程)被丢弃并且错误消息开始淹没错误日志。

如果需要更多详细信息,请告诉我。感谢你的帮助,

0 投票
1 回答
6525 浏览

c# - 使用 Sql Dependency 查询通知 - 停止检测更改

我正在使用 SQL Server 表在我的应用程序中充当队列。我使用 SQL Dependency 的查询通知,特别是 Jeremiah Gowdy 在这篇博文中使用的很棒的实现。http://jgowdy.blogspot.com/2010/01/sqldependency-query-notification-with.html

我在 Windows 服务中实现了这一点,并使用它来“监听”SQL 表(即我的队列)上的更改,如果有更改,则对队列的返回内容进行处理 - 请参见下面的代码,返回内容的数据集存储过程。

问题是,在重负载下或仅经过一段时间后,即使表中存在记录,也不再检测到更改。当我重新启动服务时,就会检测到更改!我尝试手动更新表格以触发通知但无济于事。通知服务似乎在某些时候中断并且无法重新订阅,但我不能确定。

我拼命地试图找到解决这个问题的方法,因为我必须不断地观察表本身的变化,如果队列卡住,我会重新启动服务——不理想!

还有其他人对 SQL 依赖和查询通知有任何问题吗?特别是任何关于已知问题的指导或知识都会有所帮助。我知道存在更好的排队系统,但如果可以的话,我会尝试解决这个问题,而不是重新开发整个项目!!!

这是一个代码片段。

这是我的存储过程

更新: 我有一个 sql server 日志并且我收到以下错误。

似乎远程服务不断下降,经过更多挖掘,似乎与 SQLDependency 在每次调用后如何清理订阅有关。有谁知道如何解决这个问题?

0 投票
1 回答
598 浏览

c# - 网络 SQL 数据库 SQL 依赖于 C# 应用程序问题

我已经使用本地数据库成功地在我的 c# 应用程序上使用了查询通知。但是,将连接字符串更改为我的实际数据库(不是本地数据库)会导致错误。请注意,两个数据库是相同的 + 队列和服务等在两个数据库上都是相同的。我所做的只是交换连接字符串 ==> 导致无法创建队列订阅。如果我缺少有关本地与远程数据库依赖关系的内容,请告知。

代码引发异常的部分:

0 投票
1 回答
4992 浏览

java - JAVA 中的 SQL Server 查询通知

我已经在网上搜索了一段时间,但到目前为止没有运气。是否可以在 JAVA http://www.codeproject.com/Articles/144344/Query-Notification-using-SqlDependency-and-SqlCach中实现这一点?JDBC for SQL Server 2012 是否支持它?

提前致谢!