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