微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何跟踪.NET应用程序中许多SQL Server数据库的更改?

问题:

有许多不同的数据库,它们直接由许多不同的应用程序填充(没有任何常见的应用程序层).只能通过SP访问数据(按政策)

任务:

应用程序需要跟踪这些数据库中的更改并在最短时间内做出响应

可能的解决方案:

1)为每个数据库中的每个表创建触发器,这将使用事件填充一个表.应用程序将通过sqlDependency观察此表.

2)通过sqlDependency观察每个数据库中的每个表.

3)为每个数据库中的每个表创建触发器,这将使用托管扩展通知应用程序.

哪种方式最好?

解决方法

这可能是一个广泛的主题.首先:使用的sql Server版本是什么?

如果您使用的是sql 2008,那么Change Data Capture就是您的首选工具
此新功能使您可以监视sql 2008中对数据库所做的每次更改.这包括DDL更改以及对数据的更改.
查看介绍here.

如果您使用的是旧版本的sql 2008,并且您可以修改数据库的DDL,则选项3将是您选择的选项之一(您所描述的那个).我不建议这样做,因为还有其他事情需要考虑,例如当事务回滚时或者当批量插入时触发器被停用时会发生什么?

在所有这些情况下,让您的解决方案正常运行将是一项挑战.

另一种方法是观察事务日志文件.这种方式是迄今为止最好的,也是最复杂的方式,因为几乎没有关于专有日志格式的文档.它也绑定到特定版本的sql Server.这将导致对所选数据库的无影响监视.

另一种方法是创建要监视的数据的副本,并定期检查是否存在差异.
这样做的好处是不得对源数据库进行任何更改.以及摆脱交易或批量插入问题.从下次监控运行的最新版本开始,您将能够发现这些变化.

性能影响相当小,因为它只需要对要监视的表进行主索引连续读取.这是迄今为止与数据库交互的最优化方式.
然而,这种方法需要相当大的开发工作.我必须知道,因为这是我自去年以来的主要焦点.检查here

原文地址:https://www.jb51.cc/mssql/76929.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐