博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Commit后数据会被立即写进磁盘文件吗?
阅读量:5122 次
发布时间:2019-06-13

本文共 805 字,大约阅读时间需要 2 分钟。

《收货,不止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运行。

 

转载于:https://www.cnblogs.com/jingweiyoung/p/8322015.html

你可能感兴趣的文章
display:none和visiblity:hidden区别
查看>>
C#double转化成字符串 保留小数位数, 不以科学计数法的形式出现。
查看>>
SpringMVC学习总结(三)——Controller接口详解(1)
查看>>
牛的障碍Cow Steeplechase
查看>>
Zookeeper选举算法原理
查看>>
3月29日AM
查看>>
利用IP地址查询接口来查询IP归属地
查看>>
HTML元素定义 ID,Class,Style的优先级
查看>>
构造者模式
查看>>
http和https的区别
查看>>
Hbuild在线云ios打包失败,提示BuildConfigure Failed 31013 App Store 图标 未找到 解决方法...
查看>>
找到树中指定id的所有父节点
查看>>
今天新开通了博客
查看>>
AS3优化性能笔记二
查看>>
Java高阶回调,回调函数的另一种玩法
查看>>
ElasticSearch(站内搜索)
查看>>
4----COM:a Generative Model for group recommendation(组推荐的一种生成模型)
查看>>
UVA 11137 - Ingenuous Cubrency
查看>>
js阻止事件冒泡的两种方法
查看>>
Java异常抛出
查看>>