• 实例崩溃恢复原理--检查点队列的作用


    实例崩溃恢复原理

      数据库中存在着buffercache,buffercache有很多的块,其中包括脏块

      数据库运行期间有很多的脏块,这些脏块是还未写入磁盘,这时,如果数据库存在的服务器突然断电死机,出现故障,这些未写入磁盘的脏块的数据就会丢失。

      数据丢失分为两种情况

        1.可以丢失的数据

          对于Oracle数据库来讲,未提交的事务所修改的数据块可以丢失

        2.不可以丢失的数据

          已经提交的事务所对应的数据块不可以丢失

      数据崩溃的瞬间,这两种脏块时都存在的

      Oracle崩溃以后,有些数据是要通过日志来找回的

      数据库崩溃瞬间,块类型包括:

        1.脏块对应的日志已经写入磁盘------说明块对应的事务已经提交,可以通过日志将脏块构造出来

        2.脏块对应的日志在logbuffer中-----说明块对应的修改了的事务还未提交,对于数据库来讲,说明这个块是可以丢失的。丢失的话,也就意味着对于数据的修改没有进行

      数据库非正常关闭的情况下,是要启动实例崩溃恢复的

    实例崩溃恢复

      使用磁盘上的日志,将数据库崩溃的瞬间所对应的脏块构造出来,也就是说,将buffercache恢复到了数据库崩溃的瞬间。

      Oracle使用日志恢复的时候,只能恢复到磁盘上的最后一个日志

      Oracle数据库非正常关闭或者服务器死机,断电等等一些原因导致oracle实例崩溃。导致脏块丢失,Oracle就可以使用redolog里面的日志将我们所有需要的脏块构造出来。

    实例恢复时,会用到哪些日志呢?日志的起点与终点

      redolog中的日志,使用到最后一条,将所有日志跑完,

      终点是current日志的最后一条,问题是起点是谁呢?

      起点:LRBA地址

    实例崩溃恢复的过程:

          1.Oracle发现数据库实例关闭崩溃,需要做实例恢复

          2.Oracle在控制文件中找到检查点队列的LRBA地址,根据LRBA地址找到日志起点,从日志起点跑到日志终点,整个过程中,Oracle中已经提交事务的脏块以及未提交事务的脏块全被构造出来,而未提交的事务已经在undo中进行记录了。

        Oracle在此后的操作中,会自动将崩溃前未提交事务,自动进行回滚。

        前滚----跑日志,将丢失脏块构造出来

        回滚----会自动将崩溃前未提交事务,自动进行回滚。

    检查点队列的作用:

            1.确定日志起点

            2.加快Oracle数据库实例崩溃恢复速度

         

        

        

      

        

  • 相关阅读:
    MySQL与SQLServer的语法区别
    Linux系统ELK环境搭建
    springboot_yml配置, 以及 properties 和yml转换示例
    mybatis-plus的 mapper.xml 路径配置问题
    Windows下 启动redis
    Mysql 创建库,删除库 命令,脚本
    mybatis中传入多个参数时,接口调用报错Parameter '*****' not found ...
    构建启动Vue项目
    HyperLedger/Fabric区块连网络-编译启动单节点
    HyperLedger/Fabric区块连网络 死磕fabric
  • 原文地址:https://www.cnblogs.com/KAJIA1/p/12106013.html
Copyright © 2020-2023  润新知