7
|
Yauheni Sivukha · 技术社区 · 15 年前 |
![]() |
1
5
这可能是一个广泛的话题。首先:使用的是什么SQL Server版本? 如果您使用的是SQL 2008 更改数据捕获 是选择的工具 此新功能使您能够监视 每个 对SQL 2008中的数据库所做的更改。这包括 DDL变化 以及 对数据的更改 . 查看简介 here . 如果您使用的是旧版本的SQL 2008,并且允许您 修改DDL 数据库的 选项3 将是(你曾经描述过的)选择之一。不过,我不建议这么做,因为还有其他事情要考虑,比如 事务回滚 或者什么时候 批量插入时触发器被停用 例如? 在所有这些情况下,让您的解决方案正常工作将是一个安静的挑战。 另一种方法是看 事务日志 文件。这条路是目前为止最好的,但是 最复杂的方式 因为几乎没有关于专有日志格式的文档。它还绑定到特定版本的SQL Server。这将导致 无冲击 监视所选数据库。 另一种方法是创建 数据的副本 这将受到监控,并定期检查是否存在差异。 这样做的好处是 未更改源数据库 一定要做。以及摆脱事务或批量插入问题。因为最迟在下次监视运行时,您将能够发现更改。 性能影响相当小,因为它只需要对要监视的表进行主索引连续读取。这是迄今为止与数据库交互的最优化方式。 然而,这种方法将需要相当多的开发工作。我必须知道,因为这是我过去几年的主要工作。检查 here ;) (我希望链接是可以的,在这种情况下,因为它的主题,否则我删除它) |
![]() |
2
0
不要回顾使用SQL事件探查器的可能性。使用筛选器,您只能选择更新操作,然后选择写入日志。 |
![]() |
3
0
您可以使用sqldependency类的开源实现- SqlDependencyEx . 它使用数据库触发器和本机ServiceBroker通知来接收有关表更改的事件。这是一个使用示例:
使用sqldependecyex,您可以只监视insert或delete,避免更新。希望这有帮助。 |
![]() |
John D · 需要为NULL或NOT NULL的WHERE子句 5 月前 |
![]() |
Marc Guillot · 记录值时忽略冲突 6 月前 |
![]() |
Fachry Dzaky · 正确使用ROW_NUMBER 6 月前 |
![]() |
TriumphTruth · 从满足特定条件的数据集中选择1行 6 月前 |