繁体   English   中英

记录所有用户请求操作的最佳方法是什么:(在Sql Server 2008中插入,更新,删除?

[英]What is the best way to log all user request operations: (inserts, updates, deletes in Sql Server 2008?

我有一个包含50个表的数据库,我想记录用户请求,例如数据库中所有表的插入,更新或删除。 我还可以为每种请求类型创建一个触发器。

从性能角度来看,最好的方法是什么?还是有更好的方法来跟踪这个?

如果您有Enterprise Edition,请查看Change Data Capture 如果您没有Enterprise并且对捕获更改列的历史值不感兴趣,请查看“ 更改跟踪”

请参阅比较更改数据捕获和更改跟踪以了解两者之间的差异。

您还可以创建由触发器填充的审计表(并且允许比更改数据捕获更灵活)。 关键组件是捕获数据集而不是逐行工作。 它确实增加了一些开销,但是如果你正确地编写了触发器,那就不是那么多了。 确保捕获谁(包括哪个应用程序,如果您有多个应用程序命中数据库)以及何时以及旧值和新值。 为每个要审计的表设置一个审计表(如果只使用一个审计表,则锁定太多)。 在设置系统时,编写代码以从错误的事务或事务集中获取数据。 这样可以在出现问题时更容易恢复,并且需要恢复。 我们使用每个表审计的两个表,一个包含有关执行更改的进程的信息(应用程序的名称,日期,用户等等和auditid),另一个包含有关更改内容的详细信息(旧值和新值) ,受影响的记录的ID和受影响的列)。 我们的结构使我们能够为每个被审计的表使用相同的结构,并允许更改表而无需更改审计表,并允许我们轻松编写新表的审计表脚本。 我们也很容易看到哪些记录在同一时间或同一过程中被更改,或者找出触及我们数据库的许多应用程序中的哪一个负责坏数据以及告诉我们谁特别负责对于糟糕的数据。 这有助于我们跟踪应用程序错误,并找出数据在某些情况下的更改方式。 它还使我们更容易追踪受破坏过程影响的所有数据,而不仅仅是我们所知道的数据。

假设所有插入,更新和/或删除数据的请求都通过某个中间层数据访问层,我建议您在那里进行日志记录。 这就是我们所做的一切。 它比尝试从SQL Server中提取实际的插入/删除/更新语句简单得多。

如果要对数据进行审核,可以查看更改数据捕获(CDC) 但这需要企业版。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM