用户进程与服务器进程
进程在Windows平台上通常可以看作一个可执行的程序或者是服务,可以通过Windows操作系统的任务管理器查看当前操作系统上运行的进程;在Linux系统中,可以使用 ps -ef 命令来查看当前活动的进程。这些进程有的是后台进程,随实例启动,有的是服务器进程,每当有会话连入Oracle数据块时,就会开始一个服务器进程。对于专用服务器连接来说,一个用户会有一个专门的服务器进程,而对于共享服务器来说,则只会具有一个或多个调度器进程。
在Oracle中,进程可以理解为如下几类:
- 用户进程:一般指客户端上运行的Oracle应用程序或工具创建的进程;
- 服务器进程:当客户端向服务器端发送操作请求时,Oracle会创建一个相应的服务器进程,它代表客户会话完成工作的进程,应用程序向数据库发送的SQL语句最后就要由这些进程接收并执行;
- 后台进程:这些进程随数据库而启动,用于完成各种维护任务,比如数据库写入进程 DBWn 、日志写入进程 LGWR 、检查点进程 CKPT 等,都属于后台进程。用户可以通过 v$bgprocess 查询关于后台进程的信息;
- 从属进程:用于为后台进程或服务器进程提供额外的执行任务。
进程的结构取决于操作系统及数据库配置为专用服务器还是共享服务器连接,在共享服务器体系结构中,一个运行数据库代码的服务器进程可能为多个客户端提供服务,Oracle实例与进程间的组成结构如图所示,这个图也可以看作时整个Oracle数据库的体系结构图。

用户进程可能位于网络上的其他位置,它们通过 Oracle Net 与Oracle服务器进程通信,每当一个用户进程连接到Oracle,Oracle就会产生一个相应的服务器进程,只有实例的服务器进程才能够访问SGA,比如使用 SQL*Plus连接到Oracle,在Oracle服务器上使用 ps -ef 命令可以查询到一个使用相应的服务器进程。
注意:数据库连接与数据库会话是两个不同的概念,连接是用户进程与Oracle实例间的通信通道,会话是用户通过用户进程与Oracle实例建立的连接,比如启动 SQL*Plus并输入用户名密码后,就与Oracle实例建立了一个会话。
Oracle数据库根据用户进程的连接来创建服务器进程,以处理连接到实例的客户端进程的请求。服务器进程可以执行一个或多个下列任务:
- 解析