我在提交事务之前更新了我的表中的数据我在关闭数据库时使用shutdown abort再次启动数据库时数据消失了
如何在oracle 11g中恢复未提交的事务?
答案 0 :(得分:0)
有两种可能的方法(除了一些解决方法):
缓存恢复 为了解决这一难题,Oracle数据库通常使用两个单独的步骤来成功恢复系统故障:使用重做日志(缓存恢复)向前滚动并使用回滚或撤消段回滚(事务恢复)。
联机重做日志是一组操作系统文件,用于记录对任何数据库块所做的所有更改,包括数据,索引和回滚段,无论更改是已提交还是未提交。对Oracle数据库块的所有更改都记录在联机重做日志中。
从实例或介质故障中恢复的第一步称为缓存恢复或前滚,并涉及将重做日志中记录的所有更改重新应用于数据文件。由于回滚数据也记录在重做日志中,因此前滚也会重新生成相应的回滚段。
前滚继续进行必要的重做日志文件,以便及时推进数据库。前滚通常包括联机重做日志文件(实例恢复或媒体恢复),可能包括归档重做日志文件(仅限介质恢复)。
向前滚动后,数据块包含所有已提交的更改。它们还可以包含未提交的更改,这些更改在发生故障之前保存到数据文件中,或者记录在重做日志中并在缓存恢复期间引入。
交易恢复 前滚后,任何未提交的更改都必须撤消。 Oracle数据库应用撤消块来回滚在故障之前写入或在缓存恢复期间由重做应用程序引入的数据块中未提交的更改。此过程称为回滚或事务恢复。 图12-2说明了前滚和后退,这是从任何类型的系统故障中恢复所需的两个步骤。
Oracle数据库可以根据需要同时回滚多个事务。在失败时处于活动状态的所有事务都标记为已终止。新事务可以自行恢复阻塞事务以获取所需的行锁,而不是等待SMON回滚已终止的事务。
来源链接here。
一个小小的补充,为案件阐明:
Oracle在实例失败后自动执行崩溃恢复和实例恢复。如果介质发生故障,数据库管理员(DBA)必须启动恢复操作。恢复备份涉及两个不同的操作:通过应用重做数据将备份前滚到更近的时间,并且将未提交的事务中所做的所有更改回滚到他们的原始状态。 通常,恢复是指恢复,前滚,和回滚备份所涉及的各种操作。备份和恢复是指保护数据库免受数据丢失和在发生丢失时重建数据库所涉及的各种策略和操作。
简而言之,无法恢复更新的数据,因为它应该回滚,以保持数据库的一致性。请记住,事务是原子的,因此它们应该是 COMMITTED 或 ROLLED BACK 。由于启动它的会话现已被终止(已停止),因此COMMIT
SMON
无法ROLLBACK
。
答案 1 :(得分:0)
在崩溃后实例启动时,将回滚未提交的事务。