admin管理员组

文章数量:1599281

1 进程结构总体框架

1.1 Oracle多进程架构简述

        Oracle是典型的多进程数据库。oracle实例运行起来后,会同时启动很多进程,由不同的进程负责不同的操作。

进程类别:

  • 后台进程 --> 是oracle实例运行起来后自动运行的进程,完成oracle的基本功能。
  • 前台进程 --> 用户连接,在数据库中创建的进程,用于执行用户操作。
  • 监听进程 --> 也叫守护进程,是独立于oracle之外的进程。监听进程不依赖于oracle实例存在,是独立于oracle实例之外的进程,实例的启停并不会影响监听进程,监听进程只跟内核对接,然后将数据包转发给实例。监听进程只是实例和linux内核之间的桥梁。和实例也没什么关系。监听不依赖于实例存在。监听进程进程仅服务于实例,但不属于实例。
  • GI进程 --> grid集群管理软件运行的进程,是独立于oracle实例之外的进程。

        守护进程:GI(Grid Infrastructure)进程和监听进程都是为oracle实例提供服务,但是不属于实例,是独立于实例之外的进程,这种进程就叫做守护进程。

Linux 和 UNIX 系统上的 Oracle Grid Infrastructure 进程包括:

• ohasd: Oracle 高可用性服务守护程序,负责启动 Oracle Clusterware 进程

• ocssd:集群同步服务守护程序

• diskmon:磁盘监视守护程序,负责监视 HP Oracle Exadata Storage Server 的输入和输出

• cssdagent:启动、停止和检查 CSS 守护程序 ocssd 的状态

• oraagent:扩展集群件以支持 Oracle 特有的要求和复杂资源

• orarootagent:一种专用的 Oracle 代理进程,可帮助管理 root 用户所拥有的资源(如网络)

1.2 进程的类型

        数据库实例包含或与多个进程交互。这些进程可以分为:

  • 客户端进程(client process,也叫用户进程)运行应用或者Oracle工具代码;
  • Oracle进程是运行Oracle数据库代码的执行单元。在多线程架构中,一个Oracle进程可以是一个操作系统级别的进程,也可以是操作系统进程内的一个线程。Oracle进程可以分为以下三类:

        Oracle数据库的进程架构取决于操作系统和数据库配置选择。比如,为用户配置专用服务器连接或者共享服务器连接。在使用共享服务器连接时,每个服务器进程都能为多个客户端进程提供服务。

        下图展示了使用专用服务器连接时的SGA和后台进程。对于每个用户连接来说,都有一个客户端进程运行应用。每个客户端进程都对应着一个服务器进程,其中包含了它的PGA。

图1 Oracle进程和SGA

        视图 V$PROCESS 包含了连接到数据库实例的每个Oracle进程的一行信息,比如系统进程ID和线程ID。

SQL> col SPID format a8
SQL> col STID format a8
SQL> select SPID, SID, PROGRAM from v$PROCESS order by SPID;

1.2.1 客户端进程

        当有用户运行 ProC 或者 SQLPlus 程序时,操作系统会创建一个客户端进程(也称为用户进程)来运行用户应用。客户端应用会链接到Oracle数据库的程序库(libraries),从而能够使用其中的APIs来与数据库通信。

1.2.1.1 客户端和服务器进程

        客户端进程不能直接读写SGA,但是为客户端进程提供服务的Oracle进程可以。客户端进程可以在数据库主机以外的其他主机上运行,但是Oracle进程只能在数据库所在的主机上运行。

        假设有一个用户在客户端主机通过SQL Plus连接到另一台主机上的数据库sample(数据库实例未启动):

SQL> connect sys@inst1 as sysdba

        在客户端主机上,只能看到sqlplus的客户端进程:

% ps -ef | grep -e sample -e sqlplus | grep -v grep clientuser 29437 29436 0 15:40 pts/1 00:00:00 sqlplus

在数据库主机上,只能看到一个非本地连接的服务器进程:

% ps -ef | grep -e sample -e sqlplus | grep -v grep
clientuser  29437 29436  0  15:40  pts/1  00:00:00  sqlplus
1.2.1.2 连接和会话

        数据库连接(connection)是一个客户端进程与一个数据库实例之间的物理通信路径。连接的通信路径是由可用的进程间通信机制或者网络软件创建的。连接一般发生在客户端进程与服务器进程或者调度器(dispatcher)之间,也可以发生在客户端进程与Oracle连接管理器(Oracle Connection Manager, CMAN)之间。

        数据库会话(session)是数据库实例内存中的一个逻辑实体,代表了一个当前用户登录到数据库的状态。例如,当用户使用密码通过数据库身份认证时,一个会话就会被创建给该用户。会话一直从用户通过数据库认证持续到用户断开连接或者退出数据库应用。

        单个连接可以拥有零个、1个或多个会话。单个连接的多个会话之间相互独立,一个会话中提交的事务不会影响其他会话中的事务。

        单个用户可以同时拥有与一个数据库的多个连接。在专用服务器连接中,数据库为每个连接都创建一个服务器进程。只有导致专用服务器被创建的客户端进程才能使用该服务器进程。而在共享服务器连接中,多个客户端进程访问同一个共享服务器进程。

图2 单个连接对应单个会话

图3 单个连接对应多个会话

        下面的例子中,用户通过SQL Plus连接到数据库之后开启了跟踪,因此创建了一个新的会话:

SQL> 

本文标签: 进阶第二章架构进程数据库技术