【发布时间】:2011-01-20 21:32:28
【问题描述】:
我是 SQL 新手。我的生产数据库中有大量存储过程。我计划编写一个审计表,这些存储过程将使用它来跟踪更改(这些存储过程将写入这个审计表)。但问题是当事务回滚时,插入审计表的行也会回滚。有什么方法可以创建不受事务回滚影响的表。欢迎任何其他满足我要求的想法!!!
【问题讨论】:
标签: sql-server sql-server-2005 tsql transactions
我是 SQL 新手。我的生产数据库中有大量存储过程。我计划编写一个审计表,这些存储过程将使用它来跟踪更改(这些存储过程将写入这个审计表)。但问题是当事务回滚时,插入审计表的行也会回滚。有什么方法可以创建不受事务回滚影响的表。欢迎任何其他满足我要求的想法!!!
【问题讨论】:
标签: sql-server sql-server-2005 tsql transactions
您不能,一旦会话启动事务,该会话上的所有活动都包含在事务中。
您可以做的是打开一个不同的会话,例如作为普通客户端(不使用上下文连接)连接的 CLR 过程并从此连接进行审核。
但审核回滚操作有点不寻常,因为您从数据库的角度审核从未发生过的事情,审核记录和实际数据库状态会发生冲突。
【讨论】:
好的,如果你想知道回滚的内容就是你所做的:
让您现有的审计流程处理成功的插入。
将插入的值放入您的 sp 中的表变量中。重要的是它是一个表变量而不是临时表。现在在事务的 catch 块中执行回滚。这不会清除表变量。然后将表变量中的值插入到您的审计表中(向审计表添加一个字段,以便您可以将记录标记为回滚,并可能将一个字段标记为错误消息。)
我们不是专门为审计而这样做的,但我们这样做是为了记录错误。
【讨论】: