Firebird DB 在提交后读取已删除的寄存器

问题描述 投票:0回答:1

我有一个 firebird 2.5 数据库,我想知道是否有办法回滚已提交的事务。真的,我问的是,可以访问 firebird 数据库文件的人是否可以读取在先前提交的事务中删除的数据。
我有一个删除一些寄存器并提交的进程(存储过程)。对于可以访问数据库文件的人来说,这个寄存器可以恢复吗?

transactions firebird firebird2.5
1个回答
1
投票

没有简单的方法来恢复/回滚已提交的事务,但是 Firebird 使用 MVCC(多版本并发控制)。删除(或更新)记录将添加新的记录版本并为记录的先前状态创建增量记录版本。

当没有事务对旧记录版本“感兴趣”时,它就有资格进行垃圾收集(这可能在另一个事务访问记录时或在后台协同完成)。但是,无法保证垃圾收集何时发生。

因此,如果一条记录被删除,但尚未被垃圾收集(要么因为仍然有对其感兴趣的事务,要么因为垃圾收集器尚未访问该记录),那么人们仍然有可能拥有足够的技能和对火鸟内部结构的了解来恢复记录。请注意,即使记录版本已被垃圾收集,数据本身也将保留在磁盘上,直到被另一个记录版本覆盖。

另请参阅 数据库专家的 Firebird:第 4 集 - OAT、OIT 和 Sweep

© www.soinside.com 2019 - 2024. All rights reserved.