在Oracle中,有哪些重要后台进程?
对于后台进程,首先需要掌握3个概念:后台进程、服务器进程和用户进程,它们之间的关系如下图:
图 3-10 Oracle的进程结构
1、USER PROCESS(用户进程)
用户进程指的是Oracle客户端进程,是连接到 Oracle DB的应用程序或工具。例如,常用的Oracle的SQL*Plus就是最常用的客户端进程。用户进程可以位于数据库服务器计算机上,也可以不位于该计算机上。
2、SERVER PROCESS(服务器进程)
服务器进程指的是与客户端连接的服务器端的后台进程。对于每个前台的用户进程,后台都有一个服务器进程与之对应。服务器主要是通过它和用户进程进行联系、沟通及进行数据的交换。
Oracle DB创建服务器进程以处理连接到实例的用户进程的请求。用户进程代表连接到Oracle DB的应用程序或工具。它可以与Oracle DB在同一台计算机上,也可以在远程客户机上利用网络来访问Oracle DB。用户进程首先与一个监听程序进程通信,在专用环境中该进程会创建一个服务器进程。所创建的代表每个用户的应用程序的服务器进程可以执行以下一项或多项操作:
l 对通过应用程序发出的SQL语句进行语法分析并运行语句。
l 从磁盘上的数据文件中将必要的数据块读取到SGA的共享数据库缓冲区中(如果这些数据块目前尚未在SGA中)。
l 返回结果,使应用程序可以处理信息后台进程。
可以通过命令“ps -ef|grep LOCAL”来查看所有的服务器进程,如下所示:
1[oracle@edsir4p1-PROD1 ~]$ ps -ef|grep LOCAL
2oracle 4306 1 0 08:10 ? 00:00:00 oraclePROD1 (LOCAL=NO)
3oracle 4466 4465 0 08:12 ? 00:00:00 oraclePROD1 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
4oracle 4685 4680 0 08:14 ? 00:00:00 oraclePROD1 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
5oracle 4698 1 2 08:14 ? 00:00:00 oraclePROD1 (LOCAL=NO)
6oracle 7314 1 0 03:00 ? 00:00:37 oraclePROD1 (LOCAL=NO)
7oracle 7973 1 0 03:00 ? 00:00:01 oraclePROD1 (LOCAL=NO)
8oracle 10762 1 0 03:34 ? 00:00:10 oraclePROD1 (LOCAL=NO)复制
查询结果分为LOCAL=NO和LOCAL=YES这两类,它们的含义如下所示:
LOCAL=NO:非本地连接,即网络连接,它是通过Listener连接到服务器的。客户端的应用程序通过用户进程向服务器的监听发送请求,服务器的监听接收后,再与数据库连接,执行相关操作,再把结果返回给客户端。这是通过监听的流程。
LOCAL=YES:本地连接。本地连接不走监听,所以,在服务监听没有启动的情况下,通过数据库服务器本地的sqlplus还是可以连上数据库的。
3、BACKGROUND PROCESSES(后台进程)
后台进程是Oracle的程序,在Oracle实例启动的时候启动,用来管理数据库的读写,恢复和监视等工作,例如PMON、SMON等进程。后台进程是Oracle实例的核心。后台进程可以通过命令“ps -ef|grep ora_”来查询。
服务器进程和后台进程可以统称为数据库进程,主要运行Oracle DB服务器代码。每个服务器进程和后台进程都具有自己的PGA。
4、守护程序和应用程序进程
守护程序和应用程序进程包括网络监听程序和Oracle守护程序,例如ohasd、ocssd、cssdagent、oraagent、orarootagent。
在UNIX操作系统上,Oracle的后台进程对应于操作系统进程,也就是说,一个Oracle后台进程将启动一个操作系统进程;在Windows操作系统上,Oracle的后台进程对应于操作系统线程,打开任务管理器,只能看到一个ORACLE.EXE的进程,但是通过另外的工具,就可以看到包含在ORACLE.EXE进程中的线程。
Oracle的后台进程较多,单实例数据库的基本后台进程如下图所示:
下面的表格中列出了一些常见的数据库后台进程及其作用。
表 3-11 Oracle中的常见进程
真题1、Note the following functionalities of various background processes:
1.Record the checkpoint information in data file headers.
2.Perform recovery at instance startup.
3.Cleanup unused temporary segments.
4.Free the resources used by a user process when it fails.
5.Dynamically register database services with listeners.
6.Monitor sessions for idle session timeout.
Which option has the correct functionalities listed for a background process?()
A、Archiver Process(ARCn):1,2,5B、System Monitor Process(SMON):1,4,5
C、Process Monitor Process(PMON):4,5,6D、Database Writer Process(DBWn):1,3,4
答案:C。
本题描述中的1,将检查点记录在文件头属于CKPT的作用,2中在数据库启动的时候执行恢复操作属于SMON的作用,3中清理未使用的临时段也属于SMON的作用,4中释放用户的资源属于PMON的作用,5中动态注册数据库属于PMON的作用,6中监控会话的空闲时间属于PMON的作用。
本题中,对于选项A,1和2不属于ARCn的作用。所以,选项A错误。
对于选项B,4和5不属于SMON的作用。所以,选项B错误。
对于选项C,4、5和6都是PMON的作用。所以,选项C正确。
对于选项D,1、3和4都不是DBWn的作用。所以,选项D错误。
所以,本题的答案为C。
真题2、PMON清理失败进程的频率是多长?
答案:PMON(Process Monitor Process)主要的作用有3点:①在进程失败后执行清除工作:回滚事务、释放锁、释放其它资源。②注册数据库。③检测会话的空闲连接时间。PMON负责处理异常结束的进程相关资源的释放。PMON周期性地被唤醒,这个间隔主要由隐含参数“_PKT_PMON_INTERVAL”进行控制,默认为50厘秒(cs即centisecond,表示百分之一秒,1秒=100厘秒)。例如,可以通过命令“alter system set "_PKT_PMON_INTERVAL"=5;”将该参数设置为5厘秒(cs)。另外,也可以通过查找出PMON进程的PID号,然后执行命令“oradebug wakeup orapid”来手动唤醒PMON进程。需要注意的是,这里的orapid是Oracle进程的PID,不是OS的PID。PMON进程的orapid一般为2,可以使用命令“SELECT PID, SPID FROM V$PROCESS P WHERE P.PROGRAM LIKE '%PMON%';”来查询。可以用事件“alter system set events '10246 trace name context forever,level 4';”来查看PMON的相关操作。
1 SYS@LHRDB> SELECT a.INDX,
2 2 a.KSPPINM NAME,
3 3 a.KSPPDESC,
4 4 b.KSPPSTVL
5 5 FROM x$ksppi a,
6 6 x$ksppcv b
7 7 WHERE a.INDX = b.INDX
8 8 and lower(a.KSPPINM) like lower('%¶meter%');
9Enter value for parameter: _PKT_PMON_INTERVAL
10old 8: and lower(a.KSPPINM) like lower('%¶meter%')
11new 8: and lower(a.KSPPINM) like lower('%_PKT_PMON_INTERVAL%')
12 INDX NAME KSPPDESC KSPPSTVL
13----- ---------------------- ------------------------------------ --------------------
14 61 _pkt_pmon_interval PMON process clean-up interval (cs) 50
15SYS@LHRDB > alter system set "_PKT_PMON_INTERVAL"=50;
16System altered.
17SYS@orclasm > ! oerr ora 10246
1810246, 00000, "print trace of PMON actions to trace file"
19// *Cause:
20// *Action:
21SYS@orclasm > SELECT PID, SPID FROM V$PROCESS P WHERE P.PROGRAM LIKE '%PMON%';
22 PID SPID
23---------- ------------------------
24 2 4014
25SYS@orclasm > oradebug wakeup 2
26Statement processed.复制
& 说明:
Oracle中还有一些其它的进程,具体分析可以参考我的BLOG:http://blog.itpub.net/26736162/viewspace-2121305