Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从Windows服务连续检查数据库_Sql_Windows Services - Fatal编程技术网

Sql 从Windows服务连续检查数据库

Sql 从Windows服务连续检查数据库,sql,windows-services,Sql,Windows Services,我正在制作一个Windows服务,它需要不断地检查数据库条目,以便随时添加这些条目来告诉它执行一些代码。它正在查看它的状态是否设置为挂起,它的执行时间条目是否大于当前时间。这样做的唯一方法是反复运行select语句吗?它可能需要每分钟执行一次代码,这意味着我需要每分钟运行select语句来查找数据库中的条目。我试图避免不必要的cpu时间,因为我可能最终会为托管提供商的cpu周期付费鉴于您谈论的是服务提供商,我怀疑其中一个主要替代方案不会向您开放,那就是通知服务。它允许您注册数据更改事件并收到通知

我正在制作一个Windows服务,它需要不断地检查数据库条目,以便随时添加这些条目来告诉它执行一些代码。它正在查看它的状态是否设置为挂起,它的执行时间条目是否大于当前时间。这样做的唯一方法是反复运行select语句吗?它可能需要每分钟执行一次代码,这意味着我需要每分钟运行select语句来查找数据库中的条目。我试图避免不必要的cpu时间,因为我可能最终会为托管提供商的cpu周期付费

鉴于您谈论的是服务提供商,我怀疑其中一个主要替代方案不会向您开放,那就是通知服务。它允许您注册数据更改事件并收到通知,而无需轮询数据库。然而,它确实需要启用ServiceBroker才能工作,如果它是托管的,这可能会成为一个问题——一些公司将其关闭


问题没有标记到特定的数据库,只是SQL,notification services是一个SQL Server工具。

如果您使用的是SQL Server,并且对其他方法持开放态度,请查看。

Oracle也提供通知,称之为

请注意,notification services仅适用于SQL 2005,并已从SQL 2008中删除

我建议编写一个从触发器调用的CLR存储过程,而不是轮询数据库中的更改,当发生适当的更改(例如insert或update)时会引发该触发器。CLR存储过程会提醒您的服务,然后该服务将执行其工作

通过TCP/IP或HTTP通道发送服务警报是一个不错的选择,因为您可以在任何地方部署服务,只需修改存储过程读取的某些配置参数。它还使测试服务变得容易

我会在您的服务中使用事件驱动模型。服务等待自动重置事件,在引发事件时启动工作块。存储过程通信通道在另一个线程上运行,并在每个传入请求上设置事件

假设服务正在执行一个工作块,并且有一组多个挂起的请求未完成,此设计确保当当前请求完成时,这些请求只触发另外一个工作块

如果需要重叠处理,还可以让多个工作进程等待同一事件


注意:对于外部网络访问,
CREATE ASSEMBLY
语句需要将
PERMISSION\u SET
选项设置为
external\u access

找到允许通知服务器的提供程序可能比找到需要可以承载windows服务的vm的提供程序更容易。我还没有选择提供商yetI认为这不如让Windows服务用一些SELECT语句轮询数据库那么健壮。如果Windows服务关闭时触发该触发器,会发生什么情况?通过轮询,当Win服务返回时,它将“赶上”并执行它关闭时错过的所有事务。Windows服务可能由于许多原因而关闭,例如更新后重新启动服务器。可能Windows服务器是VM群集中的VM,在从一台主机迁移到另一台主机时会错过请求。我打算进行投票。我设想触发的通知只是“发生了什么事”,而不是“这里是细节”。在通知和启动时,服务仍然需要请求挂起的工作细节,但我的模型避免了不必要的网络流量,并将事件和数据请求之间的延迟降至最低。