【发布时间】:2014-07-03 06:39:23
【问题描述】:
我有一个 firebird 2.5 数据库,我想知道是否有办法回滚已提交的事务。真的,我在问是否有人可以访问 firebird 数据库文件,是否可以读取在先前提交的事务中删除的数据。
我有一个删除一些寄存器并提交的过程(存储过程)。对于可以访问数据库文件的人来说,这个寄存器可以恢复吗?
【问题讨论】:
标签: transactions firebird firebird2.5
我有一个 firebird 2.5 数据库,我想知道是否有办法回滚已提交的事务。真的,我在问是否有人可以访问 firebird 数据库文件,是否可以读取在先前提交的事务中删除的数据。
我有一个删除一些寄存器并提交的过程(存储过程)。对于可以访问数据库文件的人来说,这个寄存器可以恢复吗?
【问题讨论】:
标签: transactions firebird firebird2.5
没有简单的方法来恢复/回滚已提交的事务,但是 Firebird 使用 MVCC (Multi Version Concurrency Control)。删除(或更新)记录将添加新的记录版本并为记录的先前状态创建增量记录版本。
当没有事务对旧记录版本“感兴趣”时,它就有资格进行垃圾收集(这可能在另一个事务访问记录时或在后台协同完成)。但是,无法保证何时会发生这种垃圾回收。
所以如果一条记录被删除,但还没有被垃圾回收(或者因为仍然有对它感兴趣的事务,或者因为垃圾回收器还没有访问过该记录),那么它仍然是可能的适合对 Firebird 内部结构有足够技能和知识的人来恢复记录。请注意,即使一个记录版本已被垃圾回收,数据本身也会在磁盘上,直到它被另一个记录版本覆盖。
另见Firebird for the Database Expert: Episode 4 - OAT, OIT, & Sweep
【讨论】: