ITPub博客

首页 > 数据库 > Oracle > UPDATE操作和UNDO

UPDATE操作和UNDO

原创 Oracle 作者:shuangoracle 时间:2011-01-27 17:45:52 0 删除 编辑

UPDATE T SET COL='A' WHERE COL='B';

1、在SHARED POOL里解析,从而生成执行计划。

2、假如根据执行计划,得出COL='B'的记录放在10号数据文件的54号数据块里。

3、服务器进程在BUFFER CACHE里找到一个可用UNDO数据块,如果没有发 现,则到UNDO表空间找一个可用的UNDO数据块,并调入BUFFER CACHE。假如获得的UNDO数据块在10号表空间块号为24号。

4、将改变前的值B放入24号数据块里。

5、由于UNDO块发生了变化,需要产生重做记录,假设重做记录号位120:

行号 事务ID FILE# BLOCK# VALUE

120 T1 11 24 B

6、在BUFFER CACHE找到54号数据块,如果没有,则到UNDO表空间调入。

7、将改变后的值也就是A放入54号数据块。

8、由于数据块发生了变化,于是产生重做记录,假设重做记录号为121:

行号 事务ID FILE# BLOCK# VALUE

121 T1 10 54 A

9、控制权返回给用户。

10、当用户发出COMMIT命令时,触发LOGWR进程,将120和121这两个重做 记录写入联机日志文件,并将54号数据块和24号数据块的头部所记录的 事务状态标志为已提交。然后控制权返回给用户。

11、此时,54和24号数据块里UNDO块并不一定被DBWN写入数据文件。只有 在脏数据块的数量达到一定程度才会被写入。

12、事务只要被提交或回滚,那么该事务所使用的UNDO块就可以被覆盖。

事务只要被提交或回滚,那么事务所使用的UNDO块数据就可以被覆盖。对于上面的例子来说,当第10步,用户发出COMMIT命令后,11号UNDO块里的数据就可以被其它事务所覆盖。

[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24496749/viewspace-1045267/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: UNDO三大最用
请登录后发表评论 登录
全部评论

注册时间:2010-08-25

  • 博文量
    84
  • 访问量
    242685