为什么可以把未提交的数据写入数据文件?——通过DML操作举例解析
来源:互联网 发布:php mysql事务处理 编辑:程序博客网 时间:2024/05/16 18:48
首先:
1.transaction是否commit跟DBWn何时把脏块儿写入datafile没有任何直接关系;
2.无论DBWn何时写入,LGWR都会先于它记录下来
许多的原因都会促使dbwn进程写入数据,如检查点,数据缓冲区空间不够等等。而且是不管数据是否提交。
写入已提交的数据就不说了,下面有两种情况:
1.数据已经提交,但是还没有写入数据文件,不过commit后会写redo buffer,是有记录的;
2.数据没有提交,但是已经被写入数据文件,不过DBWn写入之前会触发LGWR写redo buffer,也是有记录的
这里的有记录,其实就是记录了你是否提交,这就很好理解“为什么可以把未提交的数据写入数据文件”。
下面举个例子可以加深理解:
事务进行时的DML操作修改data buffer cache的一个数据块,新值换旧值。这里还需要另一个 某undo 中的可用数据块。
会经历下面步骤(没写出跟锁有关的步骤):
1.首先生成重做,即在 redo buffer 中写下两个变更向量,这两个变更向量分别用于两个数据块儿的变更;
2.存有新值的变更向量让data buffer cache中的数据块变更为新值,存有旧值的变更向量让 undo 中的数据块变更为旧值
3.同时在redo buffer和undo中对该事务都有一个是否提交的标记。两者的默认状态都是active的,即没有提交时刻处于激活状态
4.commit成功后,redo buffer信息全部写入redo file,同时修改两者中的事务提交标识为inactive。未commit的话,事务依旧是active,所以数据即使被写入了数据文件也没关系。
- 为什么可以把未提交的数据写入数据文件?——通过DML操作举例解析
- 未提交的数据写入磁盘
- 把apk提交腾讯应用市场的时候审核失败—未通过原因:拉取应用审核信息失败
- 把数据通过C#写入数据库的模板
- Oracle 视图可以DML操作的条件
- 通过读取串口数据,把数据写入MySQL
- MYSQL——DML : 数据操作语句 (insert update delete)
- 通过Spark Streaming的foreachRDD把处理后的数据写入外部存储系统中
- 通过Spark Streaming的foreachRDD把处理后的数据写入外部存储系统中
- 通过Spark Streaming的foreachRDD把处理后的数据写入外部存储系统中
- MySQL表数据的DML操作
- JDBC连接oracle11g数据的DML操作
- EEPROM的写入操作解析
- HIVE 数据操作 DML
- DML-数据操作语言
- 数据操作语言 DML
- 通过POI组件把数据写入到Excel文件中
- 事务的提交与数据的写入
- java内部类 匿名内部类
- 01--初识java及我的第一个小程序
- cocos2d-x节点(CCActionPageTurn3D)API
- Android ANR 分析解决方法
- 结合例子理解排他(exclusive)锁和共享(shared)锁
- 为什么可以把未提交的数据写入数据文件?——通过DML操作举例解析
- 关于使用中文分词工具ICTCLAS2013 Java版本乱码的问题
- 网络攻防学习笔记
- GDB常用调试命令
- find&grep查找工具
- C++显示类型转换
- JSP用户安全退出【清除浏览器缓存中页面】
- 守护进程的创建方法和步骤
- cocos2d-x节点(CCActionProgressTimer.h)API