(转帖) Oracle实例恢复(Oracle instance recovery)

当数据库实例失败,在下次重新启动时会执行实例恢复。通常实例失败是由于Instance异常关闭或执行了shutdown abort 、startup  force命令导致,实例恢复的工作由SMON进程自动完成,并不需要人工干预。
实例恢复主要经历三个阶段: cache recovery、open database、transaction recovery
数据在写出到数据文件之前,会保存在Buffer cache 中,这些记录的改变会同时记录在在线重做日志(redo log file)中。
那么就存在这种情况,
  • 我们知道数据库写数据并不是离散写的。即,当用户发出commit命令时,只是将重做信息写出到日志文件,可能并没有将数据写出。
  • 当buffer cache没有足够的空间,会将数据写出到数据文件,注意,此时事务可能并没有提交。

第一种情况,如果此时数据库异常关闭,因为我们已经有了redo信息,所以我们按照redo信息,重新构造在数据库崩溃前的buffer cache .这个过程称为 cache recovery ,即前滚。

第二种情况,当事务对数据进行修改时,会首先将修改数据的前镜像保存到回滚段,以便当事物回滚时恢复原来的数据。回滚段不会删除未提交的事物。如果 此时数据库异常关闭,那么我们可以应用回滚段的数据进行恢复,这个过程称为transaction recovery,即回滚。

这里可能还有一个疑问,在数据库崩溃的时候,如果回滚段的数据没有及时写出。我们依然会丢失数据。这个我们不必担心,因为在任何数据修改之前都会在回滚段构造一份之前的拷贝,而这个过程也是需要写入日志的。即,在修改数据之前,回滚段的相关修改已经写入了日志。

总结一下实例恢复的过程:首先将提交的事物前滚,将数据库恢复到实例失败时的状态。然后打开数据库,重新执行提交以及回滚的操作(即,该提交的提交,该回滚的回滚)。

转载于:https://www.cnblogs.com/pipisong/p/3608039.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值