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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Oracle 事务的完整流程的分析

oracle 客户端与服务端的连接

要想登录数据库并在数据库中真正做事情, 一定要先连接数据库, 根据连接的原理不同, 分为专用服务器连接(dedicated server 和共享服务器连接(shared server 。TCP/IP是网络上连接 Oracle 所用的主要网络协议

什么是专用服务器?

在登录 oracle 时, Oracle 总会为我创建一个新的进程。这通常称为专用服务器配置 , 因为这个服务器进程会在我的会话生存期中专门为我服务。对于每个会话,都会出现一个新的专用服务器,会话与专用服务器之间存在一对一的映射。按照定义,这个专用服务器不是实例的一部分。我的客户进程 (也就是想要连接数据库的程序会通过某种网络通道 (如 TCP/IP socket 与这个专用服务器直接通信,并由这个服务器进程接收和执行我的 SQL 。如果必要, 它会读取数据文件,并在数据库的缓存中查找我要的数据。也许它会完成我的更新语句,也可能会运行我的 PL/SQL代码。这个服务器进程的主要目标就是对我提交的 SQL 调用做出响应。

什么是共享服务器?

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

共享服务器连接和专用服务器连接之间有一个重大区别, 与数据库连接的客户进程不会与共享服务器直接通信,但专用服务器则不然,客户进程会与专用服务器直接通信。之所以不能与共享服务器直接对话,原因就在于这个服务器进程是共享的。为了共享这些进程,还需要另外一种机制,通过这种机制才能与共享服务器进程“对话” 。为此, Oracle 使用了一个或一组称为调度器(dispatcher ,也称分派器的进程。客户进程通过网络与一个调度器进程通信。这个调度器进程将客户的请求放入 SGA 中 UGA 中的请求队列(这也是 SGA 的用途之一。第一个空闲的共享服务器会得到这个请求, 并进行处理 (例如, 请求可能是 UPDATE T SET X =X+5 WHERE Y = 2 。完成这个命令后,共享服务器会把响应放在原调度器(即接收请求的调度器的响应队列中。调度器进程一直在监听这个队列,发现有结果后,就会把结果传给客户。

一 . oracle客户端与服务端的连接

首先一个用户进程发出一个连接请求 , 如果使用的是主机命名或者是本地服务命中的主机名使用的是机器名 (非 IP 地址 ,那么这个请求都会通过 DNS 服务器或HOST 文件的服务名解析然后传送到 ORACLE 监听进程 , 监听进程接收到用户请求后会采取两种方式来处理这个用户请求。

C:/Documents and Settings/Administrator>sqlplus sys/aibo@test as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on 星期一 8月 16 10:51:15 2010

Copyright (c 1982, 2007, Oracle. All Rights Reserved.

连接到 :

Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL>

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

TEST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP(HOST = 192.168.2.10(PORT = 1521

(CONNECT_DATA =

(SERVER = DEDICATED

(SERVICE_NAME = test

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

到哪里,他会与主机 (HOST = 192.168.2.10 在端口,打开一条 tcp/ip socket 连接;如果

服务端恰好配置了 oracle net ,并且有一个监听进程在 1521端口监听连接请求,就会受到这个连接请求。在网络环境中,我们会一个 tns 监听进程,就是这个监听进程可以让我们客户端与服务器物理连接。当他接受到这个请求后,会根据自己的配置文件处理这个请求连接,可能会拒绝请求(例如,因为没有这样的数据库,或者可能我们

的 IP 地址受到限制,不允许连接这个主机 ,也可能会接受请求,并真正建立连接。

专用服务器模式下 :监听进程接收到用户进程请求后,产生一个新的专用服务器进程, (在 UNIX 上,这是通过 fork(和 exec(系统调用做到的 (在 UNIX 中,要在初始化之后创建新进程,惟一的办法就是通过 fork( ; 在 Windows 上,监听器进程请求数据

库进程为连接创建一个新线程。一旦创建了这个线程,客户就会“重定向”到该线程,相应地就能建立物理连接。并且将对用户进程的所有控制信息传给此服务器进程, 也就是说新建的服务器进程继承了监听进程的信息,然后服务器进程给用户进程发一个 RESEND 包,通知用户进程可以开始给它发信息了,用户进程给这个新建的服

务器进程发一个 CONNECT 包,服务器进程再以

ACCEPT 包回应用户进程,致此, 用户进程正式与服务器进程确定连接 , 我们把这种连接叫做 HAND-OFF 连接,也叫转换连接 .

另一种方式是监听进程接收到用户进程的请求后产生一个新的专用服务器进程, 这个服务器进程选用一个 TCP/IP端口来控制与用户进程的交互,然后将此信息回传给监听进程,监听进程再将此信息传给用户进程,用户进程使用这个端口给服务器进

相关文档
最新文档