为什么可以把未提交的数据写入数据文件?——通过DML操作举例解析
2013-11-15 22:20
483 查看
首先:
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操作举例解析
- 曲苑杂坛--DML操作中如何处理那些未提交的数据
- 前端通过AJAX提交数据,后台PHP处理数据实现异步操作基本流程
- 文件操作Excel解析(2)读取和写入Excel文件_根据积分获取奖品
- httpclient通过POST来上传文件,而不是通过流的形式,并在服务端进行解析(通过httpmime.jar来操作)
- PHP文件操作 之往一个文件写入数据
- Command不是也可以对数据库进行insert,update,delete操作吗,为什么还需要DataAdapter。我知道DataAdapter可以用来想AataSet中填充数据,Command不可以吗?
- 解析驾考json数据,将其写入word文件中
- Wcf服务引用报错数据包含无法解析的引用:没有终结点在侦听可以接受消息的 这通常是由于不正确的地址或者 SOAP 操作导致的
- 通过表单提交数据,完成文件上传代码
- 第三章数程序设计初步--控制结构综合项目4-2文件操作初体验练习4将数据写入文件
- C#通过流写入数据到文件的方法
- BootStrap Fileinput插件和Bootstrap table表格插件相结合实现文件上传、预览、提交的导入Excel数据操作步骤
- Kotlin通过Id操作View,Adapter和动态加载Xml文件也可以类似操作
- 表数据文件DBF的读取和写入操作
- 《项目经验》--通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中
- Dom4j解析xml文件-操作节点和属性及写入其他xml文件
- ios开发系列之文件的写入读取,NSUserDefaults存储数据,NSFileManager操作文件和文件夹
- 利用js提交数据给服务器 可以很秘密的提交数据到服务器 运行会访问 一个gif文件
- mount时,为什么数据文件可以脱机而…