oracle进程简述

oracle中的各个进程要完成某个特定的任务或一组任务,每个进程都会分配内部内存(PGA 内存)来完成它的任务。oracle实例主要有3类进程:

服务器进程(server process):这些进程根据客户的请求来完成工作。我们已经对专用服务器和共享服务器有了一定的了解,它们就是服务器进程。

后台进程(background process):这些进程随数据库而启动,用于完成各种维护任务,如将块写至磁盘、维护在线重做日志、清理异常中止的进程等。

从属进程(slave process):这些进程类似于后台进程,不过它们要代表后台进程或服务器进程完成一些额外的工作。

一、服务器进程

专用服务器(dedicated server)连接,采用专用服务器连接时,会在服务器上得到针对这个连接的一个专用进程。数据库连接与服务器上的一个进程或线程之间存在一对一的映射。

共享服务器(shared server)连接,采用共享服务器连接时,多个会话可以共享一个服务器进程池,其中的进程由oracle实例生成和管理。你所连接的是一个数据库调度器(dispatcher),而不是特意为连接创建的一个专用服务器进程。

这些服务器进程是干重活的进程。在很多情况下,你都会发现这些进程占用的系统CPU时间最多, 因为正是这些进程来执行排序、汇总、联结等等工作,几乎所有工作都是这些进程做的。

二、连接和会话

连接(connection):连接是从客户到oracle实例的一条物理路径。连接可以在网络上建立,或者通过IPC机制建立。通常会在客户进程与一个专用服务器或一个调度器之间建立连接。不过,如果使用oracle的连接管理器(Connection Manager,CMAN),还可以在客户和CMAN之间以及CMAN和数据库之间建立连接。

会话(session):会话是实例中存在的一个逻辑实体。这就是你的会话状态(session state),也就是表示特定会话的一组内存中的数据结构。提到“数据库连接”时,大多数人首先想到的就是“会话” 。你要在服务器中的会话上执行SQL、提交事务和运行存储过程。

连接是物理概念上的,会话是逻辑概念上的,会话是建立在连接之上的,如果会话没有连接它会重新建立一个连接。在一条连接上可以建立0个、一个或多个会话。各个会话是单独而且独立的,即使它们共享同一条数据库物理连接也是如此。也就是说在一个连接里面可以多个用户登录,或一个用户登录多次。
继续阅读oracle进程简述