3

如果您需要跟踪对数据库中的记录所做的更改,则仅使用基于 microsoft 的技术(MS SQL Server、C#、EAB 等)您将使用哪种策略?触发器,DAL 上的 AOP,其他?以及如何显示收集到的数据?有没有关于它的模式?是否有工具或框架可以帮助实现这种解决方案?

4

3 回答 3

2

变更数据捕获的问题在于它对于真正的审计不够灵活。您无法添加所需的列。此外,默认情况下它每三天转储一次记录(您可以更改此设置,但我认为您不能永远存储),因此如果您需要保留数据,则必须将记录转储到真正的审计表中很长一段时间,这是典型的需要审计记录(我们从不转储审计记录)。

我更喜欢触发方法。编写触发器时必须小心,以确保在更改多条记录时它们将捕获数据。我们为每个审核的表准备了两张表,一张用于存储执行操作的用户或进程的日期时间和 ID,另一张用于存储新旧数据。由于我们做了很多多记录过程,这对我们来说至关重要。如果有人报告了一项不良记录,我们希望能够查看是否是一个进行更改的过程,如果是,其他哪些记录也可能受到影响。

在您创建审计过程时,创建脚本以将一组审计数据恢复为旧值。如果您已经进行了设置,那么当您迫不及待地修复问题时,这样做会容易得多。

于 2011-03-16T14:44:11.330 回答
2

Sql Server 2008 R2 有这个内置 - 在线书籍中查找更改数据捕获

于 2011-03-16T12:43:53.370 回答
1

这可能不是一个流行的观点,但无论如何我都会把它扔在那里。

我更喜欢所有数据库写入的存储过程。如果需要审计,它就在存储过程中。在代码之外没有发生任何神奇的事情,发生的一切都在写入发生时记录在案。

如果将来需要更改表,则必须转到存储过程进行更改。更新审核的需要记录在案。而且因为我们使用了存储过程,所以更简单地对表及其审计表进行“版本化”。

于 2011-03-16T15:11:18.200 回答