前滚和回滚详细过程举例
1、前滚和回滚介绍
“前滚和回滚”是Oracle数据库实例发生意外崩溃,重新启动的时候,由SMON进行的自动恢复过程。
因为oracle是先把操作命令写到 SGA的log buffer中,然后修改 数据;因此发生故障时,日志中的对数据库修改的记录其实是已经生效的;因此 SMON进程会把日志中的数据重新检查:先前滚,从redo log中找到checkpoint,从checkpoint开始,把已经commit的数据,岸顺序重新加载;直到找到日志中有记录,但是没有commit提交到redo log中的数据(此时就是故障发生的时间点了),然后根据这些日志的获取undo记录,进行回滚;
//undo是针对那些你没有commit的东西进行回滚的
当数据库突然崩溃,而还没有来得及将buffer cache里的脏数据块刷新到数据文件里,同时在实例崩溃时正在运行着的事务被突然中断,则事务为中间状态,也就是既没有提交也没有回滚。这时数据文件里的内容不能体现实例崩溃时的状态。这样关闭的数据库是不一致的。
下次启动实例时,Oracle会由SMON进程自动进行实例恢复。实例启动时,SMON进程会去检查控制文件中所记录的、每个在线的、可读写的数据文件的END SCN号。
数据库正常运行过程中,该control file中的END SCN号始终为NULL,而当数据库正常关闭时,会进行完全检查点,并将检查点SCN号更新该字段。
而崩溃时,Oracle还来不及更新该字段,则该字段仍然为NULL。当SMON进程发现该字段为空时,就知道实例在上次没有正常关闭,于是由SMON进程就开始进行实例恢复了。
下面通过模拟实例和讲解介绍这个过程。
2、失败前场景说明
日志中记录过程如下:
1、事务A进行之后,结束commit。之后系统进行了一次checkpoint A;
2、Checkpoint之后,进行事务B,结束commit;
3、进行事务C,C事务量较大,其中进行了一定量的Redo Log文件写入。之后系统断电;
1、系统启动过程,进入实例恢复阶段
当实例意外中断的时候,各类型文件,包括控制文件、数据文件和日志文件上,会存在不一致的问题。这种不一致主要体现在SCN值的差异上。
实例在启动的时候,经过三阶段(nomount、mount和open)。在open之前,会进行这种不一致现象的检查,如果出现不一致,要启动SMON进程的恢复流程。
SMON是Oracle实例的一个后台进程,主要负责进行系统监控恢复。进行恢复的依据主要是Redo Log记录。
2、前滚进程
SMON首先找到最后SCN记录的Redo Log File。寻找最后一个打入的Checkpoint。
顺序找到CheckPoint A之后,表示A之前的所有事务都是完全写入到数据文件中,不存在不一致性问题。恢复过程从Checkpoint A开始,Oracle开始依据重做日志Redo Log的系列条目,进行推进。
首先遇到了事务B信息,由于事务B已经commit,所以事务B所有相关的Redo Log条目已经全都写入到Redo Log File中。所以,按照日志继续条目推进,完全可以重演replay,并且应用apply事务B的全部过程。
这样,事务B全部实现,最终将通过DBWn完全写入到数据文件中。所以,实例失败之前提交commit的事务B,完全恢复。
进入事务C的范畴,由于一部分事务C的Redo Log条目已经进入Redo Log File中,所以在进行前滚的时候,一定会replay到这部分的内容。不过,这部分内容中不可能出现commit的标记。
所以,前滚的结果一定是遇到实例突然中断的那个时点。此时replay的结果是,事务C没有提交。这样结束了前滚过程,进入回滚阶段。
3、回滚过程
对事务C,要进行回滚过程,释放所有相关资源。从Undo空间中寻找到旧版本SCN的数据块信息,来进行SGA中Buffer Cache数据块恢复。
4、说说恢复过程的损耗
很多时候,由于我们事务规模较大,当出现实例崩溃的时候,重启所需要的时间很多。有一种经验说法是,事务有多长,前滚和回滚所消耗的时间有多长×2。而且,如果不能完成SMON恢复过程,数据库是不能算作正常的Open的。
SMON的恢复过程是Oracle强制进行的一个过程,即使恢复中发生断电或者其他中断失败事件。Oracle在下一次启动的时候,还是会继续这个过程,只有耐心等待。
通过检查一些内部视图(X$视图),可以观察到恢复进程和速度,但是丝毫不能影响到最终恢复的过程。
这个过程虽然可以保证数据一致性,但是也带来了系统不能启动,影响生产环境的问题。我们可以通过两个方式进行缓解:
首先,我们在设计开发系统时,要保证事务规模的可控性,不要让事务规模在技术层面上过大。避免一旦发生崩溃,大规模强制回滚的发生;
其次,一旦出现了这个强制回滚,要注意对生产环境的影响。可以采用备库standby进行顶替,让主库安静的慢慢恢复;
前滚和回滚详细过程举例相关推荐
- 前滚和回滚的区别 .
http://blog.csdn.net/haiross/article/details/17003543 http://www.itpub.net/thread-1713569-3-1.html 经 ...
- 实例恢复(Instance Recovery)之前滚(Rolling Forward)和回滚(Rolling Back)
Oracle实例恢复(Instance Recovery)之前滚(Rolling Forward)和回滚(Rolling Back) 关于oracle实例恢复的一些理解,一直都有误区,今天通过查看相关 ...
- mysql dml回滚_mysql binlog回滚/闪回,前滚, 分析各表DML情况, 找出长事务与大事务...
简介 binlog_inspector通过解释mysql/mariadb binlog/relaylog实现以下三大功能: 1)flashback/闪回/回滚, 实现DML的回滚到任意时间或者位置. ...
- 【转】【MySQL】运行原理(四):重做日志(redo log),回滚日志(undo log),二进制日志(binlog)
MySQL中有六种日志文件,分别是:重做日志(redo log).回滚日志(undo log).二进制日志(binlog).错误日志(errorlog).慢查询日志(slow query log).一 ...
- SpringCloud 应用在 Kubernetes 上的最佳实践 — 线上发布(可回滚)
作者 | 长门 **导读:**本篇是<SpringCloud 应用在 Kubernetes 上的最佳实践>系列文章的第七篇,主要介绍了新功能上线时,如何尽快减少对线上用户的影响?发布系统需 ...
- 容器CICD实践:基于Helm实现应用交付自动回滚
打造开源云计算中国第一互动社区 内容专注于Linux.Kubernetes.OpenStack.容器.Ceph.Cloud Foundry...... 导读 随着容器的落地,交付的规模和速度都在快速增 ...
- 分布式事务Seata源码解析十:AT模式回滚日志undo log详细构建过程
文章目录 一.前言 二.准备undo log 0.undo log 样例 1)undo log表结构 2)rollback_info(回滚日志数据) 1.before image的构建 1)业务表元数 ...
- mysql 回滚 前滚_Oracle 实例恢复时 前滚 后滚说明
一. 什么时候需要实例恢复 在shutdown normal or shutdown immediate下,也就是所谓的clean shutdown,checkpoint也会自动触发, 一. 什么时候 ...
- 删库跑路?不可回滚?MySQL创建和管理表,修改清空表,MySQL8新特性DDL原子化,完整详细可收藏
文章目录 1.基础知识 2.创建和管理数据库 3.创建表 4.修改表 5.重命名表 6. 删除表 7.清空表 8.MySQL8新特性-DDL的原子化 1.基础知识 1.1 一条数据存储的过程 存储数据 ...
最新文章
- ESI最新计算机学科统计:中国78所跻身高被引100强,中南大学夺冠
- web API简介(二):客户端储存之document.cookie API
- 蓝牙HCI剖析(二)
- 华为有造车实力,却坚决不造整车,这背后有着怎样的无奈与思考?
- Apache Kylin 与 ClickHouse 的对比
- android 简易时间轴(实质是ListView)
- 每天一点Linux --- 在Linux终端下调用当前目录下的可执行文件时需要加上./的原因...
- Webstorm全版本汉化包
- 国内O2O运营模式逐渐改变我们生活方式
- 推导手机QQ聊天记录db文件加密IMEI值
- C++基础(C++Primer学习)
- 英特服务器的spec整数性能,主流基准测试TPC与SPEC解读
- 特征:什么是特征和特征选择?
- Ubuntu搜狗拼音输入法安装教程(常识)
- css图片动画主要知识点
- Unity高频面试题总结
- 计算机信息管理专业论文初稿,学生信息管理系统论文-初稿.doc
- ROS(Noetic)学习笔记 创建机器人URDF模型并在rviz中显示过程中遇到的一些问题
- 根据系统的业务需求,数据库设计可以设置三张表,分别为客户信息表、账号表、交易日志记录表,其表的具体设置如下:
- 计算机专业英语教程第四版宋德富课后翻译,计算机专业英语教程(第4版)(普通高等学校计算机专业特色教材)...
热门文章
- CountDownLatch与CyclicBarrier使用与理解
- oracle创建微博所需要(练习)
- 大哥,割草机借我用一下,我修整一下草坪。 ---- 谈谈this与JavaScript函数调用的不解之缘...
- Excel单元格如何增加下拉选项(类似于web中的select选项框)
- 黑白,照片滤镜,通道混合器,阈值,渐变映射,可选颜色,阴影高光,去色,匹配颜色
- 为 macOS 10.15 开启 HiDPI,让 2K 显示器更舒适
- 如何把一个对象的颜色设置成 ByLayer
- 一种简单高效的灰度图画圆方法——使用MATLAB实现每个像素点只计算一次就把圆画出来
- linux php curl 升级,ubuntu14.04升级php curl,支持http2发送APNs
- 麒麟980能运行Linux吗,麒麟980是否可以达到骁龙845或者A12的水准?