用ORACLE内部原理描述以下过程:
1、sqlplus user/passwd@orcl
2、update t set a=1 where b='ss';
3、commit;
4、exit

1、sqlplus user/passwd@orcl
(1)、客户端SQLPLUS连接监听
(2)、监听收到连接请求,Fork一个Oracle进程,作为服务器进程,同时分配一小块PGA内存。
(3)、服务器进程和客户端建立连接。
(4)、服务器进程(以下简称进程)查询USER$、PROFILE$等数据字典,校验用户是否可以登录。
(5)、如果可以登录,连接创建完成。

2、update t set a=1 where b='ss';
(一)、如果B列上无索引
(1)、查询SEG$等数据字典,找到T表段头
(2)、从段头读出Extent Map,开始全扫描
(3)、找到第一个满足条件的行,进行修改
(4)、查找同一块中剩下的行,先构造一个CR块,在CR块中继续查找,如果又找到满足条件的行,在Xcur块中修改。

(二)、如果B列上有索引,且版本不是11GR1(10G、11GR2),则不需要构造CR块

(三)、B列无论是否有索引,在11GR1下都需要构造CR块。

(四)、如果A列上有索引,增加索引维护步骤:
(1)、先在原索引块中删除要修改的原值
(2)、再将新值插入

(五)、任何块的修改,都有以下步骤(非IMU)
(1)、在PGA中生成UNDO段头事务表的后映像(5.2)
(2)、在PGA中生成UNDO块的后映像(5.1)
(3)、在PGA中生成DataBlock块的后映像(11.9)
(4)、将前三个Redo矢量做为一条Redo Recorder写入Log buffer
(5)、修改UNDO段头的事务表,事务正式开始。
(6)、修改UNDO块,写入DataBlock的前映像。
(7)、修改DataBlock,将新值“1”写入Buffer cache。

(六)、任何块的修改,都有以下步骤(IMU)
(1)、在PGA中生成DataBlock块的后映像(11.9)
(2)、在PGA中生成UNDO段头事务表的后映像(5.2)
(3)、在PGA中生成UNDO块的后映像(5.1)
(4)、将前三个Redo矢量做为一条Redo Recorder写入Shared pool中的Private strand。
(5)、将DataBlock中的前映像值,写入Shared pool中的Imu pool。
(6)、修改UNDO段头的事务表。
(7)、修改UNDO块,写入DataBlock的前映像。
(8)、修改DataBlock,将新值“1”写入Buffer cache。

3、commit;
(一)、非IMU下(按最常见的快速提交):
(1)、在PGA中生成Commit的Redo 信息(编号5.4),另做为一条Redo recorder,写入Log buffer
(2)、修改事务表相应Slot,声明事务已提交。
(3)、修改DataBlock,在ITL Slot中写入快速提交标志和SCN。每行上的行锁不清0。
(4)、通知Lgwr,将Log buffer写入Redo file。
(5)、收到Lgwr通知,写入完成。
(6)、向用户发收提交完成信息。

(一)、IMU下(按最常见的快速提交):
(1)、在PGA中生成Commit的Redo 信息(编号5.4),传入Shared pool中的Private strand,追加在事务之前的Redo recorder之后。
(2)、修改事务表相应Slot,声明事务已提交。
(3)、修改DataBlock,在ITL Slot中写入快速提交标志和SCN。每行上的行锁不清0。
(4)、将Private Strand中的Redo数据写入Log buffer。
(5)、通知Lgwr,将Log buffer写入Redo file。
(6)、收到Lgwr通知,写入完成。
(7)、向用户发收提交完成信息。

4、exit
(1)、断开连接,中止服务器进程,释放PGA

只是个提纲,没有锁、Latch、Mutex等
也不是太完善,SQL解析部分没怎么提

update A where id=1;
update A where id=2;
commit;

非IMU下:
----------------第一条Redo recoder 开始-----------------
事务开始
update A where id=1对应UNDO的Redo
update A where id=1对应数据块的Redo
----------------第一条Redo recoder 结束-----------------

----------------第二条Redo recoder 开始-----------------
update A where id=2对应UNDO的Redo
update A where id=2对应数据块的Redo
----------------第二条Redo recoder 结束-----------------

----------------第三条Redo recoder 开始-----------------
Commit 事务结束
----------------第三条Redo recoder 结束-----------------

在非IMU下,一共会生成3条Redo recoder,也就是redo entries会增加3。

而在IMU下,是这样的:
----------------第一条Redo recoder 开始-----------------
update A where id=1对应数据块的Redo
事务开始
update A where id=2对应数据块的Redo
Commit 事务结束
update A where id=1对应UNDO的Redo
update A where id=2对应UNDO的Redo

----------------第一条Redo recoder 结束-----------------

**********本博客所有内容均为原创,如有转载请注明作者和出处!!!**********
Name:    guoyJoe

QQ:        252803295

Email:    oracledba_cn@hotmail.com

Blog:      http://blog.csdn.net/guoyJoe

ITPUB:   http://www.itpub.net/space-uid-28460966.html

OCM:     http://education.oracle.com/education/otn/YGuo.HTM
 _____________________________________________________________
加群验证问题:哪些SGA结构是必需的,哪些是可选的?否则拒绝申请!!!

答案在:http://blog.csdn.net/guoyjoe/article/details/8624392

Oracle@Paradise  总群:127149411

Oracle@Paradise No.1群:177089463(已满)

Oracle@Paradise No.2群:121341761

Oracle@Paradise No.3群:140856036

转载于:https://blog.51cto.com/guoyjoe/1429077

update的内部原理相关推荐

  1. oracle update 数据库恢复,ORACLE update 操作内部原理

    对于oracle的update操作,在数据块中具体是如何出来,是直接更新原来值,还是通过插入新值修改指针的方法实现.下面通过证明: 模拟表插入数据 SQL> create table t_xif ...

  2. git gui fetch不到文件_Git内部原理剖析,有比这还详细的吗?

    1.1. 为什么写这篇文章 写这篇文章的本意有二: 工作安排原因,常有同事询问我一些关于 Git 的问题,总觉得自己解释的不够透彻,因此觉得有必要深入了解一下. 目前中文的 Git 教程往往本末倒置, ...

  3. 这才是真正的Git——Git内部原理揭秘!

    本文作者:lzaneli,腾讯 TEG 前端开发工程师 本文以一个具体例子结合动图介绍了Git的内部原理,包括Git是什么储存我们的代码和变更历史的.更改一个文件时,Git内部是怎么变化的.Git这样 ...

  4. commit分拆多个 git_这才是真正的Git——Git内部原理

    本文以一个具体例子结合动图介绍了Git的内部原理,包括Git是什么储存我们的代码和变更历史的.更改一个文件时,Git内部是怎么变化的.Git这样实现的好处等等. TL;DR 本文以一个具体例子结合动图 ...

  5. git object 很大_这才是真正的Git——Git内部原理

    本文以一个具体例子结合动图介绍了Git的内部原理,包括Git是什么储存我们的代码和变更历史的.更改一个文件时,Git内部是怎么变化的.Git这样实现的好处等等. TL;DR 本文以一个具体例子结合动图 ...

  6. Mongodb存储特性与内部原理

    前言 本文重点叙述下mongodb存储特性和内部原理, 下一篇文章咱们一起来搭建下Replica Sets+Sharded Cluster的集群 存储引擎 wiredTiger引擎 1.3.0新增引擎 ...

  7. 内部存储_Mongodb存储特性与内部原理

    前言 本文重点叙述下mongodb存储特性和内部原理, 下一篇文章咱们一起来搭建下Replica Sets+Sharded Cluster的集群 存储引擎 wiredTiger引擎 1.3.0新增引擎 ...

  8. git tag怎么使用_这才是真正的Git——Git内部原理揭秘

    本文作者:lzaneli,腾讯 TEG 前端开发工程师 本文以一个具体例子结合动图介绍了Git的内部原理,包括Git是什么储存我们的代码和变更历史的.更改一个文件时,Git内部是怎么变化的.Git这样 ...

  9. Paging内部原理

    Paging内部原理 下拉刷新内部逻辑 1.PagingDataAdapter.reresh()代码逻辑 2. PagingDataAdapter.submitData()代码逻辑 加载更多(预加载) ...

最新文章

  1. MyBatis1:MyBatis入门
  2. 王者荣耀6月23服务器维护,王者荣耀6.23维护到什么时候?6月23日长枪掠火版本异常介绍...
  3. 这个R包自动注释单细胞数据的平均准确率为83%,使用后我的结果出现了点问题|附全代码...
  4. 用户视图切换为Linux视图,视图_ITPUB博客
  5. SqlServer查询出数据库中所有的表及其字段属性
  6. 《TCP IP 详解卷1:协议》阅读笔记 - 第十四章
  7. cisco链路聚合配置
  8. 百度地图做电子围栏总结
  9. JAVA设计模式1 ---- 简单工厂模式 (以汽车工厂为例)
  10. 基于Python的“书怡”在线书店系统的设计与实现毕业设计源码082332
  11. Matlab 常用快捷键
  12. VMware VSphere Client克隆虚拟机
  13. 第一个STM8项目的记录
  14. 装饰器+依赖注入开发node后台接口
  15. 深度解析:电商直播基地运营及盈利模式
  16. 【随手记】有趣的面试题 —三人三鬼过河
  17. 适合婚礼上唱的歌曲 流行情歌大串烧
  18. 关于家庭收纳:请好好运用二维码!
  19. C# (江湖熟手)- Cefsharp 的使用(几行代码写个浏览器)
  20. cv曲线面积的意义_关于粒径及粒度分布的定义及其在粉末涂料生产中的指导意义...

热门文章

  1. VTK:可视化之SideBySideViewports
  2. VTK:IO之GenericDataObjectReader
  3. C语言链表是否为循环表的算法(附完整源码)
  4. 经典C语言程序100例之十八
  5. C++普通引用和常引用
  6. 加上项目路径 spring security忽略不生效_Spring 常见面试题「收藏」
  7. android按钮点击后闪退_CAD如何恢复自动崩溃、闪退的文件?
  8. mongodb中的副本集搭建实践(转自:http://www.cnblogs.com/visionwang/p/3290435.html)
  9. Hibernate中的一段批量插入功能的代码
  10. python安装时发生严重错误是怎么回事_安装python3.5时出现严重错误无法完成安装,请问这个是什么情况?怎么解决??...