惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
Netflix TechBlog - Medium
博客园 - 三生石上(FineUI控件)
Martin Fowler
Martin Fowler
博客园 - 【当耐特】
雷峰网
雷峰网
宝玉的分享
宝玉的分享
IT之家
IT之家
J
Java Code Geeks
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Jina AI
Jina AI
博客园 - 叶小钗
V
Visual Studio Blog
Engineering at Meta
Engineering at Meta
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
月光博客
月光博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
云风的 BLOG
云风的 BLOG
美团技术团队
爱范儿
爱范儿
T
The Blog of Author Tim Ferriss
L
LangChain Blog
U
Unit 42
有赞技术团队
有赞技术团队
博客园_首页

博客园 - pipisong

Caused by: org.apache.catalina.LifecycleException错误的处理 (转帖)HTTP协议 (转帖)网站微信登录-python 实现 (转帖)工程師的缺德行為:叫朋友去學C/C++ (转帖)修改 Linux 主机名 (转帖)oracle 10g中的几个概念(sid/db_name/server_name) (转帖)rman中改变控制文件的备份路径 (转帖)修改ORACLE自动归档目录 (转帖) oracle是否归档模式及修改模式 硬盘分区表知识——详解硬盘MBR(转) 关于RAID与SCSI的一些基本概念(转) USB安裝XP的方法<转> SATA光驱GHOST系统的解决办法《转帖》 snmputil是个很有意思的东东 更新一下 Windows XP自动登录设置 06年国庆长假最后一天有感 06年6月17日子夜有感 <转贴>使用NTFS的连接点移动Document and Setting
(转帖) Oracle实例恢复(Oracle instance recovery)
pipisong · 2014-03-18 · via 博客园 - pipisong

当数据库实例失败,在下次重新启动时会执行实例恢复。通常实例失败是由于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,即回滚。

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

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