微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

oracle中transaction是不是只有commit之后才能完成,不commit事物就完成不了???

数据库]oracle中transaction是不是只有commit之后才能完成,不commit事物就完成不了???[复制链接]
0 0

论坛徽章:
1
1[收藏(0)][报告]
发表于 2014-04-11 20:19 | 只看该作者 | 倒序浏览
本帖最后由 蓦然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中的数据写入到日志了啊。。。。我不知道哪里理解错了,请高手们指点小弟一下!!!感激不尽啊!!!

论坛徽章:
17
2[报告]
发表于 2014-04-15 16:10 | 只看该作者
回复1#蓦然princes


不矛盾的,一般checkpoint的时候,脏数据会写入日志和数据文件,即使是没有提交commit也会写入数据文件,同时在日志文件中会有相关的信息描述,未提交commit和提交commit的数据都会在数据文件中,区别在于日志文件中记录的信息不同,一旦自动或者是手动执行rollback回滚操作的话,未提交commit的数据会被恢复为前映像的状态,不知道我的回答你是否满意?

还不能确定你说的是不是正解,因为除了你没有其他人恢复啊?????为什么,难道是我问的问题没法回答吗????回复2#jackson198574


问答
  • 博客
  • 4[报告]
    发表于 2014-04-16 09:28 只看该作者
    本帖最后由 jackson198574 于 2014-04-16 09:32 编辑

    回复3#蓦然princes

    官方文档Concept:
    checkpoint
    1. A data structure that marks the checkpoint position,which is the SCN in the redo
    thread where instance recovery must begin.Checkpointsare recorded in the control
    file and each data file header,and are a crucial element of recovery.
    2. The writing of dirty data blocks in the database buffer cache to disk. The database
    writer (DBWn)process writes blocks to disk to synchronize the buffer cache with the
    data files.

    Checkpoint Process (CKPT)
    The checkpoint process (CKPT)updates the control file and data file headers with
    checkpoint information and signals DBWnto write blocks to disk. Checkpoint
    information includes the checkpoint position,SCN,location in online redo log to begin
    recovery,and so on. As shown in figure 15–4,CKPT does not write data blocks to data
    files or redo blocks to online redo log files.

  • 家境小康

    • 问答
    • 博客
    • 5[报告]
      发表于 2014-04-17 19:28 只看该作者
      高手,请问你的这段”不矛盾的,一般checkpoint的时候,脏数据会写入日志和数据文件,即使是没有提交commit也会写入数据文件,同时在日志文件中会有相关的信息描述,未提交commit和提交commit的数据都会在数据文件中,区别在于日志文件中记录的信息不同,一旦自动或者是手动执行rollback回滚操作的话,未提交commit的数据会被恢复为前映像的状态,不知道我的回答你是否满意?内容在联机文旦哪里能找到,我找不到这段内容在官方文档中的讲解位置。。。。感激不尽回复4#jackson198574


    问答
  • 博客
  • 6[报告]
    发表于 2014-04-17 20:20 只看该作者
    5#蓦然princes


    不是官方文档里的,你谷歌一下吧。
  • 问答
  • 博客
  • 7[报告]
    发表于 2014-04-17 20:22 只看该作者
  • 5#蓦然princes


    我这段描述回头看有问题,不过既然你看过官方文档了,最好自己多安排一些精力在研究官方文档上。
    问答
  • 好友
  • 博客
  • 消息
  • 论坛徽章:
    7
    8[报告]
    发表于 2014-04-17 22:21 | 只看该作者
    commit做了什么?
    commit的本质是把 log buffer里的日志数据块刷新到redo logfiles磁盘中,保证了数据部丢失。
    9[报告]
    发表于 2015-09-21 10:21 | 只看该作者
    2楼回答的很正确 闲来无聊 翻翻帖子

    原文地址:https://www.jb51.cc/oracle/211136.html

    版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

    相关推荐