zoukankan      html  css  js  c++  java
  • Commit后数据会被立即写进磁盘文件吗?

    《收货,不止Oracle》读书笔记:

    首先内存中的数据,如果遇到断电,是会被清空的。如果我们update一条数据,没有commit,断电后数据库中的数据还是以前的值。

    所以要想彻底更新数据库中的值,一定要commit; 那么Commit操作一定会把内存中的数据刷到磁盘文件中吗???

    答案是: 不一定。

    commit无法左右数据库何时把数据从缓冲区刷入到数据区,Oracle根据一定的规则来促成这个动作,缓冲区的数据积累到一定程度,

    再批量刷入到磁盘中。那么如果在这之前,断电了,数据会不会就丢掉呢? ^^----------Oracle会根据日志来恢复的,在Commit指令提交时,

    会把操作日志刷入到磁盘文件,所以就算断电,如果日志已经刷入到磁盘了,那Oracle重启的时候,会根据日志恢复,你查询到的还是更新过的数据。

    先来介绍几个Oracle后台进程:

    DBWR:负责把数据缓冲区的数据刷入到磁盘文件中。

    LGWR:负责把操作日志从缓冲区输入到磁盘文件(REDO文件)。

    CKPT:该进程是负责调度DBWR的,Oracle根据系统参数(例:FAST START MTTR TARGET)调配CKPT在适当的时侯调用DBWR。

    但是DBWR并不总是听CKPT的话,在把数据刷到磁盘前,一定要等LGWR把对应的日志刷到磁盘文件后,才执行任务,如果LGWR

    出现故障,这时候DBWR有可能会罢工哦~

    这里重点说一下LGWR进程,它的运行,有5条规则:

    1、每隔3秒,LGWR运行一次。

    2、任何COMMIT触发LGWR运行一次。

    3、DBWR把数据从缓冲区写到磁盘,触发LGWR运行一次。

    4、日志缓冲区满三分之一或记录满1MB,触发LGWR运行一次。

    5、联机日志文件切换也会触发LGWR运行。

  • 相关阅读:
    Struts1简单开发流程梳理
    更改数据库字符集编码引起的问题、textarea标签输出内容时不能顶格(左对齐)输出
    FineReport基本使用
    Navicat for MySQL笔记1
    Hibernate(十)
    Elasticsearch NEST 控制字段名称命名格式
    ckeditor 敏感词标记显示处理方法
    Elasticsearch .Net Client NEST 多条件查询示例
    Elasticsearch .Net Client NEST 索引DataSet数据
    一个很简单的SqlServer生成常用C#语句工具的诞生
  • 原文地址:https://www.cnblogs.com/jingweiyoung/p/8322015.html
Copyright © 2011-2022 走看看