Chinaunix首页 | 论坛 | 博客
  • 博客访问: 411010
  • 博文数量: 119
  • 博客积分: 1470
  • 博客等级: 上尉
  • 技术积分: 1258
  • 用 户 组: 普通用户
  • 注册时间: 2006-02-24 13:50
文章分类

全部博文(119)

文章存档

2018年(6)

2017年(11)

2016年(4)

2013年(8)

2012年(1)

2011年(2)

2010年(4)

2009年(37)

2008年(16)

2006年(30)

我的朋友

分类: Oracle

2008-10-21 17:26:46

执行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.执行块清理,清理块头保存的事务信息;

阅读(963) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~