如何监视SQL Server中的表以进行更改

时间:2009-08-30 00:55:30

标签: sql-server monitoring notifications

很久以前就问过{p> This question,虽然它涵盖了SQL 2005和2008的可能解决方案,但它缺乏一个很好的SQL 2000解决方案,这仍然太常见了。

我需要一种方法来监视数据库表的某些字段以进行更改,并在发生这些更改时通知我的应用程序,以便我可以将它们作为广播消息在本地网络上发布,任何有客户端的人都可以监听它们将它们显示为警报(想想类似于达到特定阈值的股票市场数据)。

由于多种原因,我不想轮询数据库。 1)我不希望向服务器添加额外的负载。 2)我宁愿接近实时收到通知,而不是等待轮询频率到期。

现在,我可以将逻辑放在更新数据库的应用程序中,但数据可以从多个来源更新,包括网络,我不想处理跨DMZ边界发送通知的Web服务器等。而且我不想在20个不同的应用程序中维护它(更具压倒性的问题)。

我已经在使用扩展存储过程和触发器的SQL 2000上看到了这一点,但xp似乎难以跨平台,并且在SQL 2005和2008上安装时会破坏​​。可能这只是示例中的错误代码我已经看到了,我不确定,但我正在寻找适用于SQL 2000及更高版本的东西。

有什么想法吗?

编辑:

我考虑放弃对2000的支持,但这确实无法解决我的问题。我希望解决方案能够在未来几年继续发挥作用。许多微软技术的一个问题是它们不再支持它们。例如,Notification服务执行我需要它做的事情,但是他们决定在2008年弃用它,并且它将在下一个版本中不可用。所以我正在寻找一种很有可能坚持不懈的解决方案。

2 个答案:

答案 0 :(得分:5)

非常简单的解决方案

您可以使用触发器调用网页,通知更新。

这可能非常糟糕,因为如果服务器无法访问Web,由于某种原因,它可能会使插入操作变得非常慢。此外,根据插入的频率,它可能同样糟糕。

替代计划

在触发器中,写入队列。 (我碰巧爱上了MSMQ)。然后,等待该队列,你将获得“实时”的消息。同样,如上所述,它更容易出现更新频率。

更好的计划

有一个触发器,可以将数据发布到'tblUpdatedThings'表中,然后轮询该表。但我知道你不想投票。无论如何,由于我描述的原因,我认为这更好。

答案 1 :(得分:2)

您希望您的解决方案位于数据库中,但您希望它与数据库无关。你不可能两种方式。选一个。如果要独立于数据库,请不要让源直接写入数据库,而是要调用您控制的中央服务,以及可以捕获您感兴趣的任何事件。 如果要在不轮询的情况下使用数据库功能,则必须部署数据库调用的代码,并且您将依赖于支持代码的未来版本。