有许多不同的数据库,它们直接由许多不同的应用程序填充(没有任何常见的应用程序层).只能通过SP访问数据(按政策)
任务:
应用程序需要跟踪这些数据库中的更改并在最短时间内做出响应
可能的解决方案:
1)为每个数据库中的每个表创建触发器,这将使用事件填充一个表.应用程序将通过sqlDependency观察此表.
2)通过sqlDependency观察每个数据库中的每个表.
3)为每个数据库中的每个表创建触发器,这将使用托管扩展通知应用程序.
哪种方式最好?
解决方法
如果您使用的是sql 2008,那么Change Data Capture就是您的首选工具
此新功能使您可以监视sql 2008中对数据库所做的每次更改.这包括DDL更改以及对数据的更改.
查看介绍here.
如果您使用的是旧版本的sql 2008,并且您可以修改数据库的DDL,则选项3将是您选择的选项之一(您所描述的那个).我不建议这样做,因为还有其他事情需要考虑,例如当事务回滚时或者当批量插入时触发器被停用时会发生什么?
在所有这些情况下,让您的解决方案正常运行将是一项挑战.
另一种方法是观察事务日志文件.这种方式是迄今为止最好的,也是最复杂的方式,因为几乎没有关于专有日志格式的文档.它也绑定到特定版本的sql Server.这将导致对所选数据库的无影响监视.
另一种方法是创建要监视的数据的副本,并定期检查是否存在差异.
这样做的好处是不得对源数据库进行任何更改.以及摆脱交易或批量插入问题.从下次监控运行的最新版本开始,您将能够发现这些变化.
性能影响相当小,因为它只需要对要监视的表进行主索引连续读取.这是迄今为止与数据库交互的最优化方式.
然而,这种方法需要相当大的开发工作.我必须知道,因为这是我自去年以来的主要焦点.检查here 原文链接:https://www.f2er.com/mssql/76929.html