SQL Server - 仅在以后回滚特定事务

时间:2016-05-17 16:03:20

标签: sql-server tsql transactions rollback audit-tables

我有SQL Server 2014标准版。我们有几个表从中删除数据,然后在不同的主键下重新插入(以合并我们系统中实际相同的两个人的记录)。所有这些更改都是使用T-SQL事务执行的。

我理解事务和回滚是如何工作的,但我需要的更多是审计/回滚,因为我的用户可能只需要在以后回滚此事务(而不是恢复整个数据库或表)。 "改变数据捕获"不是一个选项,因为我只有标准版。

我真正的问题在于如何存储此审核信息。我想我将需要一个唯一的密钥来跟踪这是一个工作单元,因此就用户而言,所有这些表更改都绑定到同一组。但是,如果我有DELETE WHERE ID = @ID查询,例如,如何在删除之前存储所有这些已删除的记录,以便我可以在以后需要时重新插入它们?我甚至可以存储某种类型的大型回滚T-SQL脚本,我只是不确定如何生成INSERT脚本,我可以存储并运行以后我可以使用的数据删除。

我对任何想法持开放态度,我只需要一个足够通用的架构来处理多个表以及回滚删除和插入的能力。我更关心回滚能力,而不是保留一个漂亮的审计表。

1 个答案:

答案 0 :(得分:0)

即使使用完整日志记录,您也无法开箱即用,您可以将整个数据库回滚到某个时间点,而不是特定的事务。

您必须为未执行的事务编写代码,但我相信简单的审计触发器将为您提供实现它所需的数据。这是一篇很好的文章,可以帮助您入门。

https://www.mssqltips.com/sqlservertip/4055/create-a-simple-sql-server-trigger-to-build-an-audit-trail/