Commit后数据会被立即写进磁盘文件吗?

Posted jingweiyoung

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Commit后数据会被立即写进磁盘文件吗?相关的知识,希望对你有一定的参考价值。

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

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

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

答案是: 不一定。

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

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

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

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

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

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

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

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

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

以上是关于Commit后数据会被立即写进磁盘文件吗?的主要内容,如果未能解决你的问题,请参考以下文章

Windows7磁盘清理中的设置日志文件能清理吗?

c语言中如何读取一个文件word.txt(10M),并把读取的文件写进磁盘中的word1.txt.求代码急急。。。

表删除后回收磁盘空间

Redis 立即保存到磁盘,即使配置为不

fsync和fdatasync

文件删除后 磁盘空间的容量没有释放出来 怎么回事