SQL Server单表单行删除事务回滚时数据临时存储位置咨询
SQL Server事务回滚数据恢复相关问题解答
核心结论
- 事务执行期间被删除的临时数据,存储在*事务日志(Transaction Log)*中
- 执行
ROLLBACK TRANSACTION回滚时,SQL Server直接从该事务对应的事务日志记录中恢复被删除的数据
详细原理说明
SQL Server所有数据修改操作都会遵循预写日志(WAL)机制,先写入事务日志,再修改实际的数据页。执行
DELETE操作时事务日志会生成两类关联记录:
- 操作本身的执行记录,标记对应数据行已删除
- 该操作对应的撤销(undo)记录,完整保存被删除行的全部原始数据(也叫数据前镜像),用于后续可能的回滚操作
你在未提交事务时查询不到被删除的行,是因为SQL Server默认的读提交隔离级别下,读操作会跳过未提交事务修改的数据页,并非数据已经被永久移除。
触发回滚时,SQL Server会读取该事务对应的所有undo记录,反向执行已完成的修改操作:针对DELETE操作,就会把日志中存储的原始行数据重新插回原数据表对应位置,完成数据恢复。
内容的提问来源于stack exchange,提问作者sam
相关产品推荐
相关产品推荐

