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

时间:2014-07-03 06:39:23

标签: transactions firebird firebird2.5

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

1 个答案:

答案 0 :(得分:1)

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

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

因此,如果删除了一条记录,但尚未进行垃圾回收(因为仍然有对它感兴趣的事务,或者因为垃圾收集器尚未访问该记录),那么它仍然是可能的对于具有足够技能和知识的Firebird内部结构的人来恢复记录。请注意,即使记录版本已被垃圾收集,数据本身也将在磁盘上,直到被另一个记录版本覆盖。

另见Firebird for the Database Expert: Episode 4 - OAT, OIT, & Sweep