SQL Server中的“实时”数据更改检测

时间:2015-07-13 17:52:56

标签: sql-server notifications

我们需要通知外部系统SQL Server数据库中各种表中的数据更改。选择要监控的数据在某种程度上受用户控制(可以从我们支持的列表中进行选择)。通知的接收者可能在本地连接的网络上(即,在同一数据中心内),也可能是远程的。

我们目前通过数据访问层中的应用程序代码处理此问题,该代码检测Service Broker队列上的更改和队列通知,该队列由执行实际通知的Windows服务监视。不是很实时,但足够接近。

事实证明这有一些维护问题,所以我们正在考虑使用SQL Server内置的一种更改检测机制。不幸的是,我所看到的一切(我认为我都看着它们)似乎都很合适:

更改数据捕获和更改跟踪:主要问题是,它们需要轮询捕获的信息以确定要传递给收件人的更改。我怀疑会引入太多开销。

Notification Services:基本上使用SQL Server作为Web服务器,这是对许可证的可怕浪费。它还需要通过网络中的至少两个防火墙进行访问,从安全角度来看这是不可接受的。

查询通知:似乎是最有可能的候选人,但似乎并不适合动态选择要观看的数据元素。发送每个通知后需要重新注册查询意味着我们会让SQL Server忙于管理注册

事件通知:旨在通知数据库或实例级事件,而不是真正适用于数据更改检测。

关于我提出的最好的想法是使用CDC并在更改数据表上放置插入触发器。触发器会将某些内容排入Service Broker队列,该队列将由其他一些代码处理以执行通知。这基本上是我们现在所做的,除了使用SQL Server功能进行更改检测。我甚至不确定你是否可以为这些表添加触发器,但我认为在花费大量时间与POC之前我会得到反馈。

这似乎是一种糟糕的迂回方式来完成工作。是否有一些我错过的东西会使工作变得更容易,或者我误解了其中一个功能?

谢谢,我为这个问题的篇幅道歉。

1 个答案:

答案 0 :(得分:0)

为什么不使用更新和插入触发器?触发器可以执行clr代码,解释为enter link description here