Oracle事务的完整流程的分析(精)

上传人:pu****.1 文档编号:477503825 上传时间:2023-05-02 格式:DOCX 页数:12 大小:106.46KB
返回 下载 相关 举报
Oracle事务的完整流程的分析(精)_第1页
第1页 / 共12页
Oracle事务的完整流程的分析(精)_第2页
第2页 / 共12页
Oracle事务的完整流程的分析(精)_第3页
第3页 / 共12页
Oracle事务的完整流程的分析(精)_第4页
第4页 / 共12页
Oracle事务的完整流程的分析(精)_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《Oracle事务的完整流程的分析(精)》由会员分享,可在线阅读,更多相关《Oracle事务的完整流程的分析(精)(12页珍藏版)》请在金锄头文库上搜索。

1、Oracle 事务的完整流程的分析oracle 客户端与服务端的连接 要想登录数据库并在数据库中真正做事情,一定要先连接数据库, 根据连接的原理不同,分为专用服务器连接(dedicated server和共享服务器连接(shared server。TCP/IP是网络上连接Oracle所用的主要网络协议什么是专用服务器?在登录 oracle 时, Oracle 总会为我创建一个新的进程。这通常称为 专用服务器 配置 , 因 为这个服务器进程会在我的会话生存期中专门为我服务。对于每个会话, 都会出现一个新的 专用服务器,会话与专用服务器之间存在一对一的映射。按照定 义,这个专用服务器不是实 例的一

2、部分。 我的客户进程 (也就是想要连接数据库的 程序会通过某种网络通道 (如 TCP/IP socket 与这个专用服务器直接通信,并由这个 服务器进程接收和执行我的 SQL 。如果必要, 它会读取数据文件,并在数据库的缓 存中查找我要的数据。也许它会完成我的更新语句,也可能会运行我的PL/SQL代 码。 这个服务器进程的主要目标就是对我提交的 SQL 调用做出响应。什么是共享服务器?Oracle还可以接受另一种方式的连接,这称为共享服务器(shared server ,正式的 说法是多线程服务器(Multi-ThreadedServer或MTS。如果采用这种方式,就不会对 每条用户连接创建另

3、外的线程或新的 UNIX 进程。在共享服务器中, Oracle 使用一 个“共享进程”池为 大量用户提供服务。 共享服务器实际上就是一种连接池机制 (例 如程序的连接池 。 利用共享 服务器,我们不必为 10000个数据库会话创建 10000个 专用服务器(这样进程或线程就太多 了,难于管理 ,而只需建立很少的一部分进程 /线 程,顾名思义,这些进程 /线程将由所有会 话共享。这样 Oracle 就能让更多的用户与 数据库建立连接,否则很难连接更多用户。如果让我的机器管理 10000个进程,这个 负载肯定会把它压垮,但是管理 100个或者 1 000个进程 还是可以的。 采用共享服 务器模式,

4、 共享进程通常与数据库一同启动, 使用 ps 命令可以看到 这个进程。共享服务器连接和专用服务器连接之间有一个重大区别, 与数据库连接的客户 进程不会 与共享服务器直接通信,但专用服务器则不然,客户进程会与专用服务器直 接通信。之所以 不能与共享服务器直接对话,原因就在于这个服务器进程是共享 的。为了共享这些进程,还 需要另外一种机制,通过这种机制才能与共享服务器进程 “对话”。为此,Oracle使用了一个或一组称为调度器(dispatcher ,也称分派器的进 程。客户进程通过网络与一个调度器进程 通信。这个调度器进程将客户的请求放 入 SGA 中 UGA 中的请求队列(这也是 SGA 的用

5、途之 一 。 第一个空闲的共享服务 器会得到这个请求, 并进行处理 (例如, 请求可能是 UPDATE T SET X =X+5 WHERE Y = 2 。完成这个命令后,共享服务器会把响应放在原调度器(即接收请求的 调度器的响应队列中。调度器进程一直在监听这个队列,发现有结果后,就会把结果 传给 客户。一 .oracle客户端与服务端的连接首先一个用户进程发出一个连接请求 , 如果使用的是主机命名或者是本地服务 命中的主机名使用的是机器名(非IP地址,那么这个请求都会通过DNS服务器或 HOST文件的服务名解析然后传送到0RACLE监听进程,监听进程接收到用户请 求后会采取两种方式来处理这个

6、用 户请求。C:/Documents and Settings/Administratorsqlplus sys/aibotest as sysdbaSQL*Plus: Release 1020.4.0 - Production on 星期一 8 月 16 10:51:15 2010Copyright (c 1982, 2007, Oracle. All Rights Reserved.连接到 :Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - ProductionWith the Partitioning, OLAP, D

7、ata Mining and Real Application Testing optionsSQLsys/aibo是用户名密码,test是TNS服务名,TNS代表透明网络底层 (Transparent Network Substrate , 这是 Oracle 客户端处理远程连接的 “基础” 软件, 有 了它才有可能建立对等通信。TNS连接串告诉Oracle软件如何与远程数据库连 接。一般地,你的机器上运行的客户软件会读取一个tnsnames.ora文件。这是一个 纯文本的配置文件,内容例如:TEST =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP(HOS

8、T = 192.168.2.10(PORT = 1521(CONNECT_DATA =(SERVER = DEDICATED(SERVICE_NAME = testOracle客户端软件可以从tns连接串TEST得到有用的信息,也就是主机名,主机 监听 的端口号,主机所连接的数据库服务名,服务名表示具有公共属性、服务级阈值 和优先级的 应用组。提供服务的实例数量对应用是透明的,每个数据库实例可以向 监听器注册,表示要提供多个服务。所以,服务就映射到物理的数据库实例,并允许 DBA为之关联阈值和优先级。现在oracle客户端通过tns连接串可以知道要连接 到哪里,他会与主机(HOST = 192

9、.168210在端口,打开一条tcp/ip socket连接;如果 服务端恰好配置了 oracle net ,并且 有一个监听进程在 1521 端口监听连接请求,就会 受到这个连接请求。在网络环境中,我们会一个tns监听进程,就是这个监听进程可 以让我们客户端与服务器物理连接。当他接受到 这个请求后,会根据自己的配置文 件处理这个请求连接,可能会拒绝请求(例如,因为没有 这样的数据库,或者可能我们 的 IP 地址受到限制,不允许连接这个主机 ,也可能会接受请 求,并真正建立连接。专用服务器模式下 :监听进程接收到用户进程请求后,产生一个新的专用服务器 进程,(在UNIX上,这是通过fork(和

10、exec(系统调用做到的(在UNIX中,要在初始化 之后创建新 进程,惟一的办法就是通过 fork( ; 在 Windows 上,监听器进程请求数据 库进程为连接创 建一个新线程。一旦创建了这个线程,客户就会“重定向”到该线程, 相应地就能建立物理连接。 并且将对用户进程的所有控制信息传给此服务器进程, 也就是说新建的服务器进程继 承了监听进程的信息,然后服务器进程给用户进程发 一个RESEND包,通知用户进程可以开始给它发信息了,用户进程给这个新建的服 务器进程发一个CONNECT包,服务器进程再以ACCEPT包回应用户进程,致此,用户进程正式与服务器进程确定连接,我们把 这种连接叫做HAN

11、D-OFF连接,也叫转换连接.另一种方式是监听进程接收到用户进程的请求后产生一个新的专用服务器进程, 这个服务器进程选用一个TCP/IP端口来控制与用户进程的交互,然后将此信息回传 给监听进程,监听进程再将此信息传给用户进程,用户进程使用这个端口给服务器进 程发送一个CONNECT包,服务器进程再给用户进程发送一个ACCEPT包,致此,用 户进程可以正式向服务器进程 发送信息了。这种方式我们叫做重定向连接。 HAND-OFF连接需要系统平台具有进程继承的 能力,为了使WINDOWS NT/2000 支持 HAND-OFF 必须在HKEY_LOCAL_MACHINESOFTWAREORACLEH

12、OMEX 中设置 USE_SHARED_SOCKET。共享服务器模式下 :只有重定向连接的方式, 工作方式是监听进程接收到用户 进程的请求后产生一个新的调度进程,这个调度进程选用一个TCP/IP端口来控制与 用户进程的交互, 然后将此信息回传给监听进程,监听进程再将此信息传给用户进程, 用户进程使用这个端口给调度进程发送一个CONNECT包,调度进程再给用户进程 发送一个 ACCEPT 包,致此,用户 进程可以正式向调度进程发送信息了。可以通过设置MAX_DISPIATCHERS这个参数来确定调度进程的最大数目,如 果调度进程 的个数已经达到了最大,或者已有的调度进程不是满负荷,监听进程将不

13、再创建新的调度进程,而是让其中一个调度进程选用一个TCP/IP端口来与此用户 进程交互。调度进程每接收一 个用户进程请求都会在监听进程处作一个登记, 以便 监听进程能够均衡每个调度进程的负荷, 所有的用户进程请求将分别在有限的调度 进程中排队,所有调度进程再顺序的把各自队列中 的部分用户进程请求放入同一个 请求队列,等候多个ORACLE的共享服务器进程进行处理(可以通过 SHARED_SERVERS参数设置共享服务器进程的个数,也就是说所有的调度进程共 享同 一个请求队列,共享服务器模式下一个实例只有一个请求队列,共享服务器进程 处理完用户进程的请求后将根据用户进程请求取自不同的调度进程将返回

14、结果放入不同的 响应队列,也 就是说有多少调度进程就有多少响应队列,然后各个调度进程从各自的 响应队列中将结果取 出再返回给用户进程。到目前为止,用户进程已经把需要执行的sql提交到oracle的服务进程,那oracle 是如 何处理这个进程的呢?oracle 服务进程如何处理用户进程的请求服务器进程在完成用户进程的请求过程中,主要完成如下 7个任务:0.sql 语句的解析1. 数据块的读入 db buffer2. 记日志3. 为事务建立回滚段4. 本事务修改数据块5. 放入 dirty list6. 用户 commit 或 rollback0.sql 语句的解析下面要讲 oracle 服务器

15、进程如可处理用户进程的请求,当一用户进程提交一个 sql时:update temp set a=a*2;首先oracle服务器进程从用户进程把信息接收到后,在 PGA中就要此进程分配所需内存,存储相关的信息,如在会话内存存储相关的登录 信息等;服务器进程把这个sql语句的字符转化为ASCII等效数字码,接着这个 ASCII码被传递给一个HASH函数,并返回一个hash值,然后服务器进程将到shared pool 中的 library cache 中去查找 是否存在相同的 hash 值,如果存在,服务器进程将使 用这条语句已高速缓存在SHARED POOL的library cache中的已分析过

16、的版本来 执行,如果不存在,服务器进程将在CGA中,配合UGA 内容对 sql ,进行语法分析,首先检查语法的正确性,接着对语句中涉及的表, 索引,视图等对象进行解析,并对照数据字典检查这些对象的名称以及相关结构,并 根据ORACLE选用的优化模式以及数据字典中是否存在相应对象的统计数据和是 否使用了存储大纲来生成一个执行计划或从存储大纲中选用一个执行计划,然后再 用数据字典核对此用户对相应对象的执 行权限, 最后生成一个编译代码。 ORACLE 将这条 sql 语句的本身实际文本、 HASH 值、编译代 码、与此语名相关联的任何 统计数据和该语句的执行计划缓存在SHARED POOL的library cache中。服务器 进程通过SHARED POOL锁存器(shared pool latch来申请可以向哪些共享PL/SQL 区中缓存这此内容,也就是说被SHARED POOL锁存器锁定的

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号