
下图显示了一个案例,hr有一个连接,但是这个连接有两个session

产生一个 SQL的 autotrace报告可以重现上图这种情况。
例子:一个连接拥有两个session
SQL> SELECTSID, SERIAL#, PADDR FROM V$SESSION WHERE USERNAME = USER;
SID SERIAL# PADDR
--- ---------------
90 91 3BE2E41C
SQL> SETAUTOTRACE ON STATISTICS;
SQL> SELECTSID, SERIAL#, PADDR FROM V$SESSION WHERE USERNAME = USER;
SID SERIAL# PADDR
--- ---------------
88 93 3BE2E41C
90 91 3BE2E41C
SQL> DISCONNECT
这个DISCONNECT命令,实际上只是中断了session,而不是连接(connection),打开一个新的中断,然后通过不同用户连接到这个实例,然后通过如下的查询,可以看到上面的connect(连接)依然是active的
SQL> CONNECTdba1@inst1
Password: ********
Connected.
SQL> SELECTPROGRAM FROM V$PROCESS WHERE ADDR = HEXTORAW('3BE2E41C');
PROGRAM
------------------------------------------------
oracle@stbcs09-1(TNS V1-V3)
Overview of Server Processes(服务进程的概述)
Oracle数据库创建一个server进程去处理client进程的请求。一个client进程总是通过一个单独的serverprocess来访问数据库。
一个数据库应用对应的服务进程可以执行下面一或多个任务:
·解析和执行通过应用发布的SQL,包括创建和执行query plan(执行计划的一种)
·执行PL/SQL代码
·从数据库文件中读取数据块到buffer cache(DBWn后台进程是将脏快写入磁盘)
·对应用程序返回结果,应用可以处理这些信息
Dedicated Server Processes(专有服务进程)
在专有连接模式,client连接关联且只关联一个服务进程。在LINUX,20个client进程连接到instance,那么就有20个服务进程伺候它们。
每个client进程和服务进程直接通信。这个服务进程在客户端进程里session的整个周期中,都是专有的。server 进程存储该进程特有的信息以及UGA到它自己的PGA中。
Shared Server Processes(共享服务进程)
在共享服务连接模式中,客户端应用通过网络连接到一个dispatcher process(调度进程),而不是一个server进程。举个例子,20个client进程可以连接到一个单独的 dispatcher进程。
Dispatch进程将接受连接到它的client发出的请求,然后把请求发布到large pool的请求队列。第一个可用的shared server进程从队列中获取这个请求,然后处理它。处理完后,shared server进程把结果放到dispatcher response(响应)队列。Dispatcher 进程监听着这个队列,而且将结果传送回client(客户端)
和专有连接模式一样,shared server进程也有它自己的PGA。然而,一个session的UGA则是在SGA中,这样任何一个shared server进程都可以访问这个session数据。
Overview of Background Processes(后台进程概述)
一个多进程数据库会使用一些额外的进程,这些进程叫background 进程(后台进程),后台进程执行数据库操作需要的维护工作以及提供给多用户最大化的性能。
每个后台进程都有自己单独的任务,不过会和其他进程配合工作。举个例子,LGWR进程把redo log buffer中的数据写到 online redo log文件中。当文件写满后可以归档了,LGWR会发信号给别的进程来归档这个文件。
Oracle数据库在实例启动时会自动创建后台进程。一个实例可以有很多后台进程,在不同的数据库配置中,并不是所有的后台进程都会存在的。
下面查询将列出有哪些后台进程在你的数据库中运行:
SELECT PNAME
FROM V$PROCESS
WHERE PNAME IS NOT NULL
ORDER BY PNAME;
本节包含一下几个主题:
·Mandatory Background Processes
·Optional Background Processes
·Slave Processes
Mandatory Background Processes(强制后台进程)
Mandatory background processes是在标准数据库配置中,都会存在的。当实例使用最低限度的参数配置来启动实例时,它们都会默认运行。
这个小节描述了下面这些强制后台进程:
·Process Monitor Process (PMON)
·System Monitor Process (SMON)
·Database Writer Process (DBWn)
·Log Writer Process (LGWR)
·Checkpoint Process (CKPT)
·Manageability Monitor Processes (MMON and MMNL)
·Recoverer Process (RECO)
Process Monitor Process (PMON)(进程监控器)
Process monitor(PMON)这个监控器会监控其他进程,以及在server或dispatcher进程非正常结束时,回收它们。PMON的职责是清理client 进程曾经使用的buffer cache和将资源释放。举个例子,PMON会重新设置 transaction table 中相关事务的状态(如置为非action),释放不再需要的锁,以及从active process列表中移除process ID。
PMON同样要将instance(实例)和dispatcherprocess的信息注册到Oracle Net listener(监听)。当一个实例启动,PMON轮询监听,来判断监听是否运行。如果监听运行,那么PMON将有关参数传送给它。如果监听没有运行,那么PMON会周期性的去尝试联系它
System Monitor Process (SMON)(系统监控进程)
System monitor process(SMON)负责各种系统级的清理工作。分配给SMON的工作包括:
·执行instance recovery,如果需要的话,在实例启动的阶段。在Oracle RAC中,一个实例的SMON可以为一个故障实例执行 instance recovery。
·在instance recovery期