-
论坛徽章:
-
1
|
本帖最后由 蓦然princes 于 2014-04-12 00:02 编辑 oracle中讲到transaction时提到,只有commit之后才一个事物才算完成。例如 一条insert语句,如果不commit 则,数据一致在SGA中,并没有写入Redolog file中。只有commit之后才会将SGA中的数据写入Redolog file中 一个transaction才算完成。 问题:在讲到后台进程时说:DBWR进程是由checkpoint时间触发、或者data Buffer cache达到一定界值之后触发 那就是说,如果一个insert语句执行完了,不进行commit,此时checkpoint时间发生,或者data Buffer cache 达到一定界限值,又或是,日志切换发生,都将触发DBWR进程进行数据写操作,但是在DBWR进行之前会 触发LGWR进程。此时没有进行commit的数据自动从SGA中的Relog Buffer中写道Redolog file中。 请问:这样不是和transaction中说的如果没有commit事物就没有完成矛盾了吗????也就是说,即使没有commit 那insert这个transaction也可能完成。 也就是说,任何操作不用commit进行提交,等到LGWR进程启动时(如:redolog Buffer达到1/3满,每三秒等)Sga中的redolog Buffer会写入到redolog file中, 这样的话,对于一个transaction,没有commit,也很有可能由于LGWR启动,将 sga中的数据写入到日志了啊。。。。我不知道哪里理解错了,请高手们指点小弟一下!!!感激不尽啊!!! |
|
|
|
|
|
|
|
回复1#蓦然princes 不矛盾的,一般checkpoint的时候,脏数据会写入日志和数据文件,即使是没有提交commit也会写入数据文件,同时在日志文件中会有相关的信息描述,未提交commit和提交commit的数据都会在数据文件中,区别在于日志文件中记录的信息不同,一旦自动或者是手动执行rollback回滚操作的话,未提交commit的数据会被恢复为前映像的状态,不知道我的回答你是否满意? |
|
|
|
|
还不能确定你说的是不是正解,因为除了你没有其他人恢复啊?????为什么,难道是我问的问题没法回答吗????回复2#jackson198574 |
|
|
5#蓦然princes 我这段描述回头看有问题,不过既然你看过官方文档了,最好自己多安排一些精力在研究官方文档上。 |
|
|
|
8楼[报告]
发表于 2014-04-17 22:21
|
只看该作者
commit做了什么? commit的本质是把 log buffer里的日志数据块刷新到redo logfiles磁盘中,保证了数据部丢失。 |
|
|
原文链接:https://www.f2er.com/oracle/211136.html