免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1138 | 回复: 0
打印 上一主题 下一主题

Oracle实例恢复(Oracle instance recovery) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-22 08:53 |只看该作者 |倒序浏览
当数据库实例失败,在下次重新启动时会执行实例恢复。通常实例失败是由于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,即回滚。

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

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

 

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP