zoukankan      html  css  js  c++  java
  • [转] 执行commit时oracle做哪些工作

    COMMIT是一个非常快的操作,当我们发布commit命令时,真正困难的动作已经完成,在数据库中已经执行了数据更改,所以已经完成了99%的任务。

    例如:下列操作已经产生: 

    1.在SGA(Buffer Cache)中已经生成了undo块;

    2.在SGA(Buffer Cache)中已经生成了产生改变的数据块和索引块;

    3.在REDO LOG BUFFER生成了前面两项的redo信息;

    4.依赖于前三项产生的数据量大小以及操作需要的时间,buffer中的数据可能已经有一部分输出到了磁盘;

    5.所有需要的锁已经获得;     

    当执行COMMIT命令时,只执行如下操作:     

    1.为事务生成SCN:SCN是ORACLE数据库的一种计时信息,用以保证事务的顺序性,同时还用于失败恢复和保证数据库的读一致性和检查点,无论何时何人提交,SCN自动加1;

    2.将事务相关的未写入redo log file中的redo信息从redo log buffer写入到redo log file,这才是真实的COMMIT,这步操作完成,说明我们已经完成COMMIT,事务从V$TRANSACTION中移除;

    3.V$LOCK中记录的SESSION关于该事务的锁会释放,其他需要这些锁的事务被唤醒;

    4.执行块清理,清理块头保存的事务信息。

  • 相关阅读:
    大数减法模板
    扩展kmp模板
    poj2185(kmp)
    poj3167(kmp)
    kuangbin专题K(next数组)
    kuangbin专题16I(kmp)
    kuangbin专题16H(next数组)
    kuangbin专题16D(next求最小循环节)
    kuangbin专题16B(kmp模板)
    Java集合--TreeSet
  • 原文地址:https://www.cnblogs.com/Cqiang/p/2949466.html
Copyright © 2011-2022 走看看