在SQL Server中创建不受事务回滚影响的审计表

时间:2010-02-25 07:15:08

标签: sql-server sql-server-2005 tsql transactions

我是SQL的新手。我的生产数据库中有大量存储过程。我计划编写一个审计表,这些存储过程将使用它来跟踪更改(这些存储过程将写入此审计表)。但问题是当事务回滚时,插入审计表的行也会回滚。有没有办法创建一个不受事务回滚影响的表。欢迎任何其他满足我要求的想法!!!

2 个答案:

答案 0 :(得分:3)

一旦会话启动事务,您就无法在该事务中包含该会话的所有活动。

您可以做的是打开另一个会话,例如作为普通客户端(不使用上下文连接)连接的CLR过程和来自此连接的审核。

但是回滚的审计操作有点不寻常,因为您从数据库的角度审计从未发生的事情并且审计记录和实际的数据库状态将发生冲突。

答案 1 :(得分:1)

好的,如果你想知道你在这里回滚了什么:

让您现有的审核流程处理成功的插入。

将插入的值放入sp中的表变量中。重要的是它是一个表变量而不是临时表。现在,在事务的catch块中执行回滚。这不会清除表变量。然后将表变量中的值插入审计表中(将字段添加到audt表中,以便将记录标记为已回滚,可能还有一个用于显示错误消息。)

我们不会专门为审计做这件事,但我们这样做是为了记录错误。