【发布时间】:2013-11-09 18:57:48
【问题描述】:
我们有一个使用变更数据捕获 (CDC) 功能的生产数据库来维护少数表的审计数据。但是由于性能影响以及需要对数据库结构进行更改(例如添加索引),但由于 CDC 无法做到这一点,我们现在想要禁用 CDC。
要求是从 Web 应用程序中为单个审计表中的一组表捕获所有插入、删除和更新操作。 举个例子,我必须在 TableB 中维护 TableA 的审核信息,以便通过 Web 应用程序 [in C#] 对 TableA 进行的每个 Add、Update 和 Remove 操作。
我目前正在更新每个存储过程,这可能会导致集合中每个表的这 3 个操作中的任何一个。但它太容易出错并且太费时了,因为我有大量的表格。
请提供一种更好的方法,在时间和性能方面都可以更有效地实现这一目标。
【问题讨论】:
-
捕获所有插入、删除和更新操作意味着触发器。采纳意见:weblogs.asp.net/jgalloway/archive/2008/01/27/…
-
我不认为我可以使用触发器,因为还有批处理过程也会更新这些表,我们不想通过它们来审计信息。只有通过 Web 应用程序执行的操作才需要进行审核。
-
我不了解 CDC,但可能在表中插入/更新/删除后使用存储库模式或工作单元(在 webapp 中),您可以插入审计表中,或者您可以在表的插入/更新/删除之后使用AOP,并且可以异步(后台任务)并且不会阻塞webapp请求的“流”...
-
然后执行另一个插入命令,每当用户在您的网页上使用影响您的数据库的控件时,该命令将数据插入到您的审计表中。 IE:你有一个按钮可以保存用户所做的更改。执行完更新命令后,对您拥有的审计表运行另一个插入命令。
-
在这种情况下,我投票结束您的问题。我们还没有通过 X 射线查看您的 C# 应用程序内部结构:它使用存储过程来管理数据?它使用EF?阿多?数据库上下文?你的 CRUD 模式是什么?等
标签: c# sql-server-2008 audit