oracle 前滚与回滚

本贴最后更新于 247 天前,其中的信息可能已经渤澥桑田

实例恢复是使用联机日志文件(Online redo log)的内容,将数据库缓冲区缓存重新构建至崩溃之前的状态。这个重构过程将重演在崩溃时未被写至磁盘的数据块的相关 redo log 中提取出的所有变更。完成上述操作后,就能够打开数据库。此时,数据库仍然受到损坏,但是由于用户看到的实例已被修复,因此允许用户进行连接。实例恢复的这个阶段称为前滚,该阶段会取每条 redo log 将恢复所有变更(也就是针对已提交和未提交事务的数据块变更与撤消块变更),相应的数据块从数据文件载入数据库缓冲区缓存,并且应用相应的变更。随后,数据块会被写回磁盘。

向前回滚结束后,崩溃看上去似乎从未发生过。不过此时数据库中还存在未提交的事务,这些事务必须被回滚,Oracle 将在实例恢复的回滚阶段自动完成未提交事务的回滚操作。然而,上述操作则发生在数据库已被打开且使用之后。如果用户在连接时遇到某些需要回滚但是尚未回滚的数据,那么不存在任何问题。由于前滚阶段会填充保护未提交事务的撤消段,因此服务器能够以正常的方式回滚变更,从而实现读一致性。

让我们先来看看下面的场景:

用户 JOHN 启动了一个事务。JOHN 使用某些新值更新某个表的一行,其服务器进程则将旧值复制至一个撤消段。但是完成这些更新之前,服务器进程会将变更写入日志缓冲区。用户 ROOPESH 也启动了一个事务。两个用户都未提交事务,也没有在磁盘上写下任何数据。如果此时实例崩溃,那么不存在(甚至重做日志中也不存在)与任一个事务相关的记录。因此,两个事务都不会被恢复,但这并不是一个问题。因为都未被提交,所以不应当恢复这两个事务(未提交的工作绝不会被保存)。

随后,用户 JOHN 提交了自己的事务。这个提交操作会触发 LGWR 进程将日志缓冲区中的内容刷新到联机重做日志文件,也就是说,此时重做日志文件内存在:

1)JOHN 的事务对表和撤消段的更改

2)ROOPESH 的事务对表和撤消段的更改

3)JOHN 的事务的提交记录

只有在 LGWR 进程结束后,“commit complete(提交完成)”消息才会被返回给 JOHN 的用户进程。但是,数据文件中仍然不会写入任何数据。如果此时实例失败,那么前滚阶段会重新构造这两个事务(1,2,3),不过处理完所有重做后仍然不会得到针对 ROOPESH 的更新操作的提交记录,这将通知 SMON 进程回滚 ROOPESH 所做的变更(2),同时保留 JOHN 所做的变更。

缓冲区缓存中已更改的块由数据库写入器(DBWn)进程执行检查点操作。应用于这些块的变更向量已由 LGWR 进程写入重做流。DBWn 根据一个懒惰算法来写入,LGWR 根据一个主动算法写入,该主动算法接近实时执行,在执行 COMMIT 时是实时执行。

  • Oracle

    Oracle(甲骨文)公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989 年正式进入中国市场。2013 年,甲骨文已超越 IBM,成为继 Microsoft 后全球第二大软件公司。

    107 引用 • 127 回帖 • 335 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • GAE

    Google App Engine(GAE)是 Google 管理的数据中心中用于 WEB 应用程序的开发和托管的平台。2008 年 4 月 发布第一个测试版本。目前支持 Python、Java 和 Go 开发部署。全球已有数十万的开发者在其上开发了众多的应用。

    14 引用 • 42 回帖 • 838 关注
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    125 引用 • 585 回帖
  • CSS

    CSS(Cascading Style Sheet)“层叠样式表”是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。

    199 引用 • 543 回帖 • 7 关注
  • 小说

    小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。

    32 引用 • 108 回帖
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    26926 引用 • 112340 回帖 • 1 关注
  • JRebel

    JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。

    26 引用 • 78 回帖 • 689 关注
  • DevOps

    DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

    59 引用 • 25 回帖 • 2 关注
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    2 引用 • 14 回帖 • 1 关注
  • 快应用

    快应用 是基于手机硬件平台的新型应用形态;标准是由主流手机厂商组成的快应用联盟联合制定;快应用标准的诞生将在研发接口、能力接入、开发者服务等层面建设标准平台;以平台化的生态模式对个人开发者和企业开发者全品类开放。

    15 引用 • 127 回帖 • 1 关注
  • Chrome

    Chrome 又称 Google 浏览器,是一个由谷歌公司开发的网页浏览器。该浏览器是基于其他开源软件所编写,包括 WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。

    63 引用 • 289 回帖
  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 690 关注
  • Ant-Design

    Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。

    17 引用 • 23 回帖 • 14 关注
  • Pipe

    Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    134 引用 • 1128 回帖 • 110 关注
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 71 关注
  • H2

    H2 是一个开源的嵌入式数据库引擎,采用 Java 语言编写,不受平台的限制,同时 H2 提供了一个十分方便的 web 控制台用于操作和管理数据库内容。H2 还提供兼容模式,可以兼容一些主流的数据库,因此采用 H2 作为开发期的数据库非常方便。

    11 引用 • 54 回帖 • 677 关注
  • 开源中国

    开源中国是目前中国最大的开源技术社区。传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现、使用、并交流开源技术的平台。目前开源中国社区已收录超过两万款开源软件。

    7 引用 • 86 回帖
  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    188 引用 • 319 回帖 • 240 关注
  • 分享

    有什么新发现就分享给大家吧!

    249 引用 • 1799 回帖
  • GraphQL

    GraphQL 是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据支撑。

    4 引用 • 3 回帖 • 9 关注
  • Latke

    Latke 是一款以 JSON 为主的 Java Web 框架。

    71 引用 • 535 回帖 • 836 关注
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 616 关注
  • abitmean

    有点意思就行了

    38 关注
  • ngrok

    ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。

    7 引用 • 63 回帖 • 662 关注
  • Vue.js

    Vue.js(读音 /vju ː/,类似于 view)是一个构建数据驱动的 Web 界面库。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

    268 引用 • 666 回帖 • 1 关注
  • 链书

    链书(Chainbook)是 B3log 开源社区提供的区块链纸质书交易平台,通过 B3T 实现共享激励与价值链。可将你的闲置书籍上架到链书,我们共同构建这个全新的交易平台,让闲置书籍继续发挥它的价值。

    链书社

    链书目前已经下线,也许以后还有计划重制上线。

    14 引用 • 257 回帖
  • 音乐

    你听到信仰的声音了么?

    62 引用 • 512 回帖 • 1 关注
  • CongSec

    本标签主要用于分享网络空间安全专业的学习笔记

    1 引用 • 1 回帖 • 41 关注