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

2024-01-30

Problem:

有很多不同的数据库,由许多不同的应用程序直接填充(没有任何通用的应用程序层)。数据只能通过SP访问(根据策略)

Task:

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

可能的解决方案:

1)为每个数据库中的每个表创建触发器,这将用事件填充一个表。应用程序将通过 SqlDependency 监视该表。

2)通过SqlDependency监视每个数据库中的每个表。

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

哪个是最好的方法?


这可能是一个广泛的话题。首先:使用的SQL Server版本是什么?

如果您使用的是 SQL 2008变更数据捕获是首选工具 这项新功能使您能够监控EVERYSQL 2008 中对数据库所做的更改。这包括DDL 更改数据更改。 检查介绍here http://www.databasejournal.com/features/mssql/article.php/3720361/Microsoft-SQL-Server-2008----Change-Data-Capture--Part-I.htm.

如果您使用的是旧版本的 SQL 2008 并且您可以修改DDL数据库的option 3将是您所描述的选择之一。但我不推荐它,因为还有其他事情需要考虑,比如当事务回滚或当批量插入时触发器被停用例如?

让您的解决方案在所有这些情况下正常工作将是一个安静的挑战。

您可以采取的另一种方式是观看交易日志文件。这种方式是迄今为止最好的,但也是最复杂的方式这样做,因为几乎没有关于专有日志格式的文档。它还绑定到特定版本的 SQL Server。这将导致没有影响监控所选数据库。

另一种方法是创建一个数据副本应进行监控并定期检查是否存在差异。 这样做的好处是没有对源数据库进行任何更改必须做出。以及摆脱事务或批量插入问题。最迟在下一次监控运行时您将能够发现变化。

对性能的影响相当小,因为它只需要对要监视的表进行主索引连续读取。这是迄今为止与数据库交互的最优化的方式。 然而,这种方法需要相当大的开发工作。我必须知道,因为这是我近年来的主要关注点。查看here http://www.enyosoft.com/en-US/Home/Products/EnyoMirror#HowItWorks ;)

(我希望链接没问题,在这种情况下,因为它是主题,否则我将其删除)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐