用户要想使用Oracle数据库,首先要与数据库建立连接。针对数据库连接,Oracle提供了两种解决方式:专用连接和共享连接。

大部分情况下,我们使用专用连接方式。对专用连接来说,用户在客户端启动了一个应用程序,比如SQL*Plus,于是就在客户端本地启 动了一个用户进程。与Oracle服务器成功建立连接以后,就会在数据库服务器端生成一个对应的服务器进程,该服务器进程作为用户进程 的代理 进程,也叫影子进程,从而代替客户端去执行各种命令并将结果返回。也就是说,用户在客户端输入的各种命令,都是通过位于客 户端的用 户进程发送到服务器端对应的服务器进程,并由服务器进程代替用户进程去执行具体的命令及返回结果。用户进程是不能直接访 问数据库的 。在专用连接模式下,用户进程与服务器进程一一对应,用户进程一旦终止,服务器进程也随之终止。

另外,我们还有一种连接方式,叫共享连接。在共享连接情况下,DBA可以定义服务器进程的个数。在启动数据库时,Oracle会预先在 实例 中建立指定个数的服务器进程。这时,用户进程不再与服务器进程产生一对一的关系,而是一对多的关系。也就是一个用户进程可以 对应多 个服务器进程,多个服务器进程都可以处理同一个用户发出的不同命令。共享连接比较少见,因此我们不多讨论。以下只要没有特 殊说明, 都是指专用连接。

当用户成功的建立连接以后,会在服务器端生成对应的服务器进程,同时创建一个会话(session)。所谓session就是一段内存空间, 该空 间里记录了用户采用了什么应用程序连接到数据库、客户端机器的名称、以哪个用户名登录等信息。

这里需要解释Oracle中的两个容易混淆的概念:连接(connection)和会话(session)。

所谓连接,指的是物理概念。也就是从客户端到服务器端的通信通道。有以下三种连接类型。

本机登录:直接从数据库所在的服务器上登录到数据库。这时采用内部通信机制进行连接。

C/S模式:客户机和服务器都在同一个局域网内,而终端用户从客户端登录数据库,并借助Oracle的网络组件,通过网络设备与数据 库服 务器建立连接。

B/S模式:也叫三层模式。客户端不具有Oracle网络组件,通过浏览器与应用服务器建立连接,然后在应用服务器上预先建立的连接 池中 挑选连接通道。

我们以本机登录为例,来看一下用户进程与服务器进程的概念。我们启动SQL*Plus,并登录到数据库实例。

[oracle@book ~]$ sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on Wed Oct 10

13:34:12 2007

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

SQL> connect / as sysdba

Connected.

我们到操作系统里查询该进程(假设当前只有一个用户在使用sqlplus命令登录数据库)。

[oracle@book ~]$ ps -ef|grep sqlplus

oracle    3036  2841  0 13:27 pts/1    00:00:00

sqlplus

oracle    3070  3041  0 13:29 pts/2    00:00:00

grep sqlplus

可以看到sqlplus进程的进程号为3036,该进程就是我们启动的进程,也就是用户进程。继续查询:

[oracle@book ~]$ ps -ef|grep 3036

oracle    3036  2841  0 13:27 pts/1    00:00:00

sqlplus

oracle    3037  3036  0 13:27          00:00:00

oracleora10g

(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

oracle    3074  3041  0 13:29 pts/2    00:00:00 grep 3036

可以看到3036号进程衍生出了一个进程,也就是3037号进程,这个进程就是Oracle为用户进程(进程号为3036)创建的服务器进程。从 该服 务器进程的描述信息中可以看到, LOCAL=YES表明该进程由于与数据库本身在同一个服务器上运行的另一个进程而启动,也就是本机 登录。 PROTOCOL=beq说明采用的是bequeath协议登录,而不是采用tcp协议。

一旦用户与数据库服务器建立连接,就可以发出各种命令,开始使用Oracle数据库了。