如何监控SQL Server中的表格变化

4

这个问题早就被提出来了,虽然它涵盖了SQL 2005和2008的可能解决方案,但是对于仍然普遍存在的SQL 2000,缺乏一个好的解决方案。

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

我不想轮询数据库,原因有几个。1)我不希望增加服务器的额外负载。2)我宁愿获得接近实时的通知,而不是等待轮询频率过期。

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

我看过在SQL 2000上使用扩展存储过程和触发器来实现这个功能,但是xp似乎很难跨平台,并且安装在SQL 2005和2008上时会出问题。也许我看到的示例中只是糟糕的代码,我不确定,但我正在寻找适用于SQL 2000和更高版本的解决方案。 有任何想法吗? 编辑: 我考虑放弃对2000的支持,但这并不能解决我的问题。我希望能找到一个能够长期使用的解决方案。许多Microsoft技术的问题在于他们停止了对它们的支持。例如,通知服务可以完成我需要的工作,但他们决定在2008年将其弃用,并且在下一个版本中将不再提供。因此,我正在寻找一个有很好机会保持稳定的解决方案。
2个回答

6

非常简单的解决方案

你可以设置一个触发器,调用网页通知更新。

这种方法可能会出现问题,如果服务器无法访问网络,则插入操作可能会变得很慢。此外,根据插入的频率,它可能同样不好。

备选方案

在触发器中,写入到队列中(我恰好喜欢MSMQ)。然后,有些东西等待着队列,你就能实时获得消息。同样,它会受到更新频率的影响,如上所述。

更好的方案

设置一个触发器,将数据发布到“tblUpdatedThings”表中,然后进行轮询。但是,我知道你不想轮询。不管怎样,出于我所描述的原因,我认为这个策略更好。


3
你希望解决方案存在于数据库中,但同时也想保持数据库的独立性,这是不可能的。必须作出选择。如果你想独立于数据库,就不要允许源代码直接写入数据库,而是调用你所控制的中央服务,并在其中截取任何感兴趣的事件。 如果你想使用数据库功能而不需要轮询,你必须部署数据库调用的代码,并且你将依赖于未来版本支持你的代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接