oracle的主要进程

[size=small]oracle的主要进程
Oracle实例:
      Oracle实例包括一组后台进程以及这些进程所共享的内存,这些后台进程及其共享内存合起来就构成了Oracle实例.
Oracle数据库服务器:
      Oracle实例和数据库合起来又构成了Oracle数据库服务器.

[oracle@oratest archivelog]$ ps -ef|grep ora
oracle    5136     1  0 Dec15 ?        00:00:04 /u01/oracle/bin/tnslsnr tinadb -inherit
oracle    8292     1  0 Dec15 ?        00:00:08 ora_pmon_tinadb    --pmon进程
oracle    8294     1  0 Dec15 ?        00:00:08 ora_psp0_tinadb
oracle    8296     1  1 Dec15 ?        00:11:56 ora_vktm_tinadb
oracle    8300     1  0 Dec15 ?        00:00:01 ora_gen0_tinadb
oracle    8302     1  0 Dec15 ?        00:00:03 ora_diag_tinadb
oracle    8304     1  0 Dec15 ?        00:00:02 ora_dbrm_tinadb
oracle    8306     1  0 Dec15 ?        00:00:26 ora_dia0_tinadb
oracle    8308     1  0 Dec15 ?        00:00:04 ora_mman_tinadb
oracle    8310     1  0 Dec15 ?        00:00:02 ora_dbw0_tinadb    --dbwn进程
oracle    8312     1  0 Dec15 ?        00:00:10 ora_lgwr_tinadb    --lgwr进程
oracle    8314     1  0 Dec15 ?        00:00:11 ora_ckpt_tinadb    --ckpt进程
oracle    8316     1  0 Dec15 ?        00:00:02 ora_smon_tinadb    --smon进程
oracle    8318     1  0 Dec15 ?        00:00:00 ora_reco_tinadb    --reco进程
oracle    8320     1  0 Dec15 ?        00:00:11 ora_mmon_tinadb
oracle    8322     1  0 Dec15 ?        00:00:20 ora_mmnl_tinadb
oracle    8324     1  0 Dec15 ?        00:00:00 ora_d000_tinadb
oracle    8326     1  0 Dec15 ?        00:00:00 ora_s000_tinadb
oracle    8423     1  0 Dec15 ?        00:00:01 ora_arc0_tinadb    --ARCn进程
oracle    8425     1  0 Dec15 ?        00:00:00 ora_arc1_tinadb    --ARCn进程
oracle    8427     1  0 Dec15 ?        00:00:01 ora_arc2_tinadb    --ARCn进程
oracle    8429     1  0 Dec15 ?        00:00:00 ora_arc3_tinadb    --ARCn进程
oracle    8448     1  0 Dec15 ?        00:00:02 ora_smco_tinadb
root      9883  9838  0 10:25 pts/0    00:00:00 su - oracle
oracle    9884  9883  0 10:25 pts/0    00:00:00 -bash
oracle    9904     1  0 10:25 ?        00:00:01 oracletinadb (LOCAL=NO)  ---
oracle    9908     1  0 10:26 ?        00:00:00 oracletinadb (LOCAL=NO)
oracle    9937  9884  0 10:48 pts/0    00:00:00 sqlplus   as sysdba
oracle    9938  9937  0 10:48 ?        00:00:00 oracletinadb (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
root      9944  9854  0 10:50 pts/1    00:00:00 su - oracle
oracle    9945  9944  0 10:50 pts/1    00:00:00 -bash
root      9969  9870  0 10:51 pts/2    00:00:00 su - oracle
oracle    9970  9969  0 10:51 pts/2    00:00:00 -bash
oracle    9993     1  0 10:51 ?        00:00:00 ora_w000_tinadb
oracle   10004  9945  0 10:55 pts/1    00:00:01 rman target /
oracle   10009 10004  0 10:55 ?        00:00:00 oracletinadb (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle   10011 10004  0 10:55 ?        00:00:00 oracletinadb (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle   10012 10004  0 10:55 ?        00:00:00 oracletinadb (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle   10039     1  0 11:01 ?        00:00:00 ora_w001_tinadb

这些都是oracle后台进程,不同的进程有不同的任务,对应不同的日志。
一、命名规则:ora_进程名称_SID

二、简单归纳:
SMON     系统监控进程
CKPT     检查点进程
LGWR     写日志进程
PMON     程序监控进程
ARCH     归档日志进程
DBW0     数据写进程

三、进程详细作用:
1、 PMON (The Process Monitor) 进程监控器:
    PMON进程负责监视数据库的处理情况,并负责清除死掉的进程。PMON还负责重启失败的调度进
程(dispatcher process)

    主要负责连接非正常中断后的清除工作,PMON负责释放相应的资源。PMON将回滚没有提交的工作,释放锁,释放分配给这个失败进程的Free SGA资源。
除了清理失败的连接之外,PMON还负责监控所有其它的Oracle后台进程,在必要的时候恢复或撤销其他进程,释放资源。比如一个 shared server或者
一个dispatcher fail的话, PMON将跟进,重起另一个相应的进程。如我们kill 掉oracle日志写进程,PMON会及时监控到,并shutdown数据库。

    另一个作用是向Oracle TNS 监听器注册实例。实例启动时,PMON进程会询问公认的端口地址(除非直接指定),来查看是否启动并运行了一个监听器

2、 SMON (The System Moniter) 系统监控器
    SMON进程负责在实例启动时恢复实例,包括清除临时段以及恢复因系统崩溃而中断的事物。
SMON还可以通过合并空闲分区的方式清除数据库中的碎片

    主要负责其它进程不想处理的工作的进程,是数据库的一种“垃圾回收站”,主要包括:
2.1)临时空间的清除;
    比如创建索引失败时,SMON将负责清除在创建索引过程当中分配出来的Temporary extent.
2.2)崩溃恢复;
2.3)Coalescing free space;
    这个是在字典管理的表空间才会有的,SMON将表空间中连续的空闲的extent,合并成一个大的free extent.这只能发生在字典管理的表空间,
    并且pctincrease 被设置成非零的时候。  
2.4)Recovering transactions active against unavailable files;
2.5)OPS中失败节点的实例恢复;在OPS中,当一个节点Fail,其它节点将打开失败节点的重做日志,对失败节点执行恢复(注意:实例恢复和崩溃恢复的区别)。
2.6)清除OBJ$;
2.7)Shrinks 回滚段;如果设置了Optimal,那么SMON将执行自动 Shrink 回滚段到Optimal 大小。
2.8)脱机 回滚段;
    举个例子,比如在切换回滚表空间的时候,由于可能之前的回滚表空间中有活动的事务,所以回滚表空间中的一些回滚段可能并不是真正的脱机,而只是标志为" Pending offline",
    要等到活动事务提交或回滚之后,相应的回滚段才算真正的脱机,而SMON则周期性的在后台去真正的脱机回滚段,直到回滚段真正的脱机为止。

3、CKPT (Checkpoint Process)
   CKPT进程并不像它的名字暗示的那样会进行一个checkpoint事件,它只是更新数据文件头。
   Oracle 8.0之前,CKPT是一个可选进程,之后就总是开启的了,更新数据文件头在CKPT出现之前这是LGWR的任务,但是后来随着文件数量增大,
   这个LGWR的附加任务变得太大而成为负担。于是就出现了CKPT,由CKPT分担着这部分任务。

   进程负责向DBWR进程发送信号,要求执行一次检查点,并更新数据库的所有数据和控制文件。
   CheckPoint(检查点),是指有DBWR进程将所有修改过的数据缓冲区写回数据文件,以辅助真正建立检查点的进程(DBWn)

4、DBWn (Database Block Writer)
   DBWn是一个负责将dirty blocks写到磁盘的后台进程,通常将dirty blocks写到磁盘是为了腾空更多的空闲空间(为了其它数据的读而释放缓冲区),
或者advance 一个检查点事件(也就是在发生故障实例恢复时, 将联机重做日志中Oracle开始读取的位置前移以节省实例恢复的时间),Log Switch
会触发一个Checkpoint,Oracle需要advance这个Checkpoint以至于在实例恢复时不需要这个刚被填满的online redo log,假如在重用这个日志之前,
不能完成这个advance Checkpoint的操作,则我们在alert将发现"Checkpoint not Compelete"信息,并且必须等待这个事件的完成。

    当一个事务修改数据块中的数据以后,不需要立即将数据块写回磁盘。由于Oracle所采用的先进机制,修改后的数据可以不用立即写回,
并且及时出现故障也不会丢失。因此,DBWR可以采取更有效写回方式,而不用再事务提交完之后立即写回。DBWR通常定时写回数据,除非数据缓冲区
需要清空或已满。
    数据写回时,采用了最近最少使用原则(least-recently-used).对于支持异步I/O的系统,只需使用一个BWR进程即可,对不支持
异步IO的可以通过增加DBWR的个数来提升效率。


5、LGWR (Log Writer)
    LGWR负责将日志缓冲区中的数据Redo log buffer (位于SGA中)写入重做日志。由于COMMIT操作依赖于LGWR写回日志(commit操
作触发LGWR将日志缓冲区数据写入UNDO日志),因此系统性能容易受到LGWR的影响。

   下面几种情况将会触发LGWR写log buffer:
5.1每三秒会刷新输出一次;
5.2当用户commit时;
5.3当重做日志缓冲区 1/3满 或者包含1M 的缓冲数据时。
    由于上面的原因,使用一个大于3M的重做日志缓冲区是不实际的——Oralce永远无法完全使用它。与DBWn必须执行分散的I/O 不同,
    重做日志是以顺序写入的方式写入的,这样执行大量的批写入更加有效率。

6、ARCn (Archive Process)
   ARCH(the Archiver Process )负责将在线重做日志online redo log复制到归档存储器。这些归档日志可以用来处理Media Recovery.
   比如你的system01.dbf文件丢失,那么你可以利用你一周前的备份,Restore 该数据文件。然后请求数据库应用从备份开始后的所有的归档日志和在线
   日志文件,这样的话,该数据文件就可以“追”上数据库中的其它的数据文件,然后我们可以继续processing,而不会丢失数据。
   实际上,备份是baseline,而日志是一种数据流,指向到系统crash的点,两者共同使用才能回到当前点  

   进档RDBMS运行在ARCHIVELOG模式时ARCH才有效,如果
   系统没有运行在ARCHIVELOG模式,则系统失效后可能无法恢复。系统运行在ARCHIVELOG模式下,此时归档进程可能有多个。
   SQL>archive log list  //查看是否为归档模式
   可以再数据库Mount 模式下开启归档
   SQL>alter database archivelog; //开启
   SQL>alter database noarchivelog;//关闭 

7、RECO (Distributed Database Recovery)
   RECO (the Recovery Process)进程用于清除分布式数据库中的未决(pending)事务,它负责分布式事务中本地部分的提交与回滚

8、cjq0 Job Queue Processes
        用于对job的协调,管理
       (1)当配置job_queue_processes时,会有Jnnn和CJQ0进程;
       (2)Jnnn进程最多可有1000个;
       (3)Jnnn进程在job之间是共享的,但同时每个Jnnn只能执行一个job,并且它使用的内存是在UGA中;
       (4)物化试图的刷新一般要用到job;
       (5)streams一般用到AQ;
       (6)CJQ0,做为jnnn的coordinator,它来控制jnnn的启动和关闭;
       (7)Jnnn进程只会在有job需要处理时才会启动;

9、 MMON,MMNL,Mnnn:Manageability Monitors
       (1)用于AWR(autmatic workload repository);
       (2)MMNL负责将SGA中的统计信息写入到表中;
       (3)MMON监控数据库性能,进行自动调优;
       (4)Mnnn属于MMON的帮手,帮助进行调优工作。

10、QMNC and Qnnn Processes:Job Queue
       (1)用于AQ功能;
       (2)Qnnn处理每个message queue,QMNC做为Qnnn的coordinator;
       (3)如果配置了aq_tm_processes,就会启动QMNC和Qnnn进程,不论有没有queue要处理,Qnnn都会全部启动;

11、Pnnn 并行进程,启动了并存处理的时候会有(并行查询,并行dml,并行ddl,并行回滚)    
 

[/size]

你可能感兴趣的:(oracle的主要进程)