代码之家  ›  专栏  ›  技术社区  ›  Prescott

是否有一种简单的方法来跟踪SQL 2005数据库中的所有更改?

  •  0
  • Prescott  · 技术社区  · 15 年前

    我的任务是将我们的产品与另一个第三方产品挂钩。我需要做的一件事是,在添加新的“项目”时,模仿第三方的一些产品功能——这可以接触到几个数据库表。是否有任何方法可以向数据库添加某种全局挂钩,以记录对数据所做的所有更改?

    我想添加钩子,使用第三方应用程序创建一个项目,然后检查所有表都受到了什么影响。

    我知道这不仅仅是新行,我还遇到了许多计数字段,这些字段在新项目中看起来是递增的,我担心在新项目插入时可能会有其他记录被修改,而不仅仅是新行被添加。

    谢谢你的帮助 普雷斯科特

    2 回复  |  直到 15 年前
        1
  •  0
  •   Raj More    15 年前

    我可以考虑以下方法来跟踪更改

    1. 事件探查器 它将捕获服务器上运行的所有查询。您可以通过数据库、模式或一组表等来过滤这些内容。
    2. 使用A 第三方事务日志读取器 . 这是一个非常不具侵入性的过程。必须确保将数据库设置为完全恢复。
        2
  •  0
  •   Remus Rusanu    15 年前

    确保日志不会被重用:

    • 数据库处于完全恢复模式(真正完整,带有初始备份)
    • 日志备份维护任务在测试期间被挂起。

    然后:

    • 写下当前数据库LSN
    • 运行第三方项目创建
    • 检查新添加的日志信息 select * from ::fn_log(oldcurrentLSN, NULL);

    所有的写操作都将出现在日志中。从物理操作(分配单元ID)可以得到逻辑操作(对象ID)。

    既然这样说了,如果您打算直接在数据库级别与第三方模式和数据模型进行交互,那么您应该对第三方模式和数据模型有一个相当好的理解。如果您计划更新第三方工具,而您甚至不知道要更新哪些表,那么您很可能最终会损坏其数据。