update的内部原理

用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.youkuaiyun.com/guoyJoe

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

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

答案在:http://blog.youkuaiyun.com/guoyjoe/article/details/8624392

Oracle@Paradise  总群:127149411

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

Oracle@Paradise No.2群:121341761

Oracle@Paradise No.3群:140856036



### DeepSeek 内部架构和工作原理 DeepSeek 是一种先进的智能搜索助手,旨在提供专业的技术支持和服务。为了实现这一目标,DeepSeek 的设计采用了多层架构来处理不同的功能需求。 #### 架构概述 DeepSeek 的核心架构由以下几个主要部分组成: 1. **输入解析模块** 输入解析模块负责接收用户的查询请求并对其进行预处理。这包括自然语言的理解、关键词提取以及语义分析等功能,从而确保后续处理阶段能准确理解用户意图[^1]。 2. **知识库管理模块** 知识库管理模块存储了大量的技术文档、案例研究和其他相关信息资源。该模块不仅支持静态数据的维护,还具备动态更新能力,可以持续学习新的知识点和技术趋势。 3. **推理引擎** 推理引擎基于已有的知识库执行逻辑推断操作。它利用复杂的算法模型对收集到的信息进行综合评估,并据此生成合理的解决方案建议或回答。此过程涉及机器学习、深度神经网络等多种先进技术的应用。 4. **输出生成器** 输出生成器将来自推理引擎的结果转换成易于理解和使用的格式返回给用户。这部分特别注重用户体验的设计,力求使最终呈现的内容既专业又友好。 ```python class InputParser: def __init__(self, user_query): self.query = user_query def preprocess(self): # 实现具体的预处理逻辑 pass class KnowledgeBaseManager: def update_knowledge_base(self, new_data): # 更新知识库的方法 pass class InferenceEngine: def infer_solution(self, parsed_input): # 使用复杂算法得出结论 pass class OutputGenerator: def format_output(self, inference_result): # 将结果格式化为适合展示的形式 pass ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值