【问题标题】:Creating an audit table in SQL Server not affected by Transaction rollbacks在不受事务回滚影响的 SQL Server 中创建审计表
【发布时间】:2011-01-20 21:32:28
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    您不能,一旦会话启动事务,该会话上的所有活动都包含在事务中。

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

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

    【讨论】:

      【解决方案2】:

      好的,如果你想知道回滚的内容就是你所做的:

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

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

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

      【讨论】:

        猜你喜欢
        • 2022-01-27
        • 1970-01-01
        • 2011-11-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-24
        • 2014-08-16
        • 1970-01-01
        • 2018-11-02
        相关资源
        最近更新 更多