【发布时间】:2016-05-17 16:03:19
【问题描述】:
我有 SQL Server 2014,标准版。我们有几个表,我们从中删除数据,然后将其重新插入到不同的主键下(合并我们系统中实际上相同的两个人的记录)。所有这些更改都是通过 T-SQL 事务执行的。
我了解事务和回滚的工作原理,但我需要更多的是审核/回滚,因为我的用户可能需要在以后仅回滚此事务(而不是恢复整个数据库或表)。 “更改数据捕获”不是一个选项,因为我只有标准版。
我真正的问题在于如何存储这些审计信息。我想我需要一个唯一的密钥来跟踪这是一个工作单元,因此就用户而言,所有这些表更改都与同一组相关联。但是,例如,如果我有一个 DELETE WHERE ID = @ID 查询,我如何在删除之前存储所有这些已删除的记录,以便以后可以在需要时重新插入它们?我什至可以存储某种大型回滚 T-SQL 脚本,但我只是不确定如何生成可以存储和稍后运行的 INSERT 脚本以用于我将要删除的数据。
我对任何想法都持开放态度,我只需要一个足够通用的架构来处理多个表以及回滚删除和插入的能力。我更关心回滚能力而不是保持漂亮的审计表。
【问题讨论】:
-
为什么不使用另一列来确定该行是否需要删除而不是实际删除它?
-
这是个好主意,但不幸的是我的老板说我们需要完全删除记录,而不是像你建议的那样标记它们:(
-
此外,我需要能够稍后删除插入的记录,甚至将更新的记录更改回原来的样子。仅在此事务/批处理中完成特定记录...不会将整个表或数据库恢复到某个时间点。
-
我的意思是,这个要求听起来有点疯狂......您需要完全删除该行,但您还需要能够在以后再次检索它?你的老板明白什么是“完全删除”吗?
-
@Lamak 是的,哈哈...我知道这个要求听起来很疯狂,但这就是他们所坚持的。而且不只是删除,这个事务也可以插入或更新。
标签: sql-server tsql transactions rollback audit-tables