首页 > 技术文章 > Oracle 后台进程介绍

yutingliuyl 2017-05-26 18:43 原文

一 进程分类:
1、服务器进程(server process): 依据客户请求完毕工作。如接收和处理应用发送的SQL语句
2、后台进程(background process): 随数据库而启动,用于完毕各种维护任务。

如将块写到磁盘(DBWn)、
   维护在线重做日志(LGWR)、清理异常终止的进程等。
3、从属进程(slave process):类似于后台进程,只是它们要代表后台进程或server进程完毕一些额外工作。

 

二 主要讲一下后台进程:

来浏览一下主要进程:

SQL> select paddr, name, description
  2   from v$bgprocess
  3  where paddr <> '00'
  4  order by paddr desc
  5  /

 

PADDR                         NAME                    DESCRIPTION
---------------- ----- ----------------------------------------------------------------
0000000084C92190  CJQ0  Job Queue Coordinator
0000000084C8D050 SMCO  Space Manager Process
0000000084C8C010 QMNC  AQ Coordinator
0000000084C87F10 MMNL  Manageability Monitor Process 2
0000000084C86ED0 MMON  Manageability Monitor Process
0000000084C85E90 RECO  distributed recovery
0000000084C84E50 SMON  System Monitor Process
0000000084C83E10 CKPT  checkpoint
0000000084C82DD0 LGWR  Redo etc.
0000000084C81D90 DBW0  db writer process 0
0000000084C80D50 MMAN  Memory Manager

PADDR                       NAME              DESCRIPTION
---------------- ----- ----------------------------------------------------------------
0000000084C7FD10 DIA0  diagnosibility process 0
0000000084C7ECD0 PSP0  process spawner 0
0000000084C7DC90 DBRM  DataBase Resource Manager
0000000084C7CC50 DIAG  diagnosibility process
0000000084C7BC10 GEN0  generic0
0000000084C7ABD0 VKTM  Virtual Keeper of TiMe process
0000000084C79B90 PMON  process cleanup

 


 

1. DBWR进程

       该进程运行将缓冲区写入数据文件,是负责缓冲存储区管理的一个ORACLE后台进程。当缓冲区中的一缓冲区被改动,它被标志为“弄脏”。DBWR的主要任务是将“弄脏”的缓冲区写入磁盘。使缓冲区保持“干净”。因为缓冲存储区的缓冲区填入数据库或被用户进程弄脏,未用的缓冲区的数目降低。当未用的缓冲区下降到非常少,以致用户进程要从磁盘读入块到内存存储区时无法找到未用的缓冲区时,DBWR将管理缓冲存储区,使用户进程总可得到未用的缓冲区。

       ORACLE採用LRU(LEAST RECENTLY USED)算法(近期最少使用算法)保持内存中的数据块是近期使用的,使I/O最小。

 

触发DBWR进程的条件有:
              1).  DBWR超时,大约3秒
              2).  系统中没有多余的空缓冲区来存放数据
              3).  CKPT 进程触发DBWR
       在有些平台上。一个实例可有多个DBWR。在这种实例中,一些块可写入一磁盘,还有一些块可写入其他磁盘。

 

2. LGWR进程

       该进程将日志缓冲区写入磁盘上的一个日志文件,它是负责管理日志缓冲区的一个ORACLE后台进程。

 

触发LGWR进程的条件有:
  1). 用户提交
  2). 有1/3重做日志缓冲区未被写入磁盘
  3). 有大于1M的重做日志缓冲区未被写入磁盘
  4). 3秒超时
  5). DBWR 须要写入的数据的SCN大于LGWR记录的SCN。DBWR 触发LGWR写入。

       日志缓冲区是一个循环缓冲区。

当LGWR将日志缓冲区的日志项写入日志文件后。server进程可将新的日志项写入到该日志缓冲区。

LGWR 通常写得非常快,可确保日志缓冲区总有空间可写入新的日志项。

注意:有时候当须要很多其它的日志缓冲区时,LWGR在一个事务提交前就将日志项写出,而这些日志项仅当在以后事务提交后才永久化。

       ORACLE使用高速提交机制。当用户发出COMMIT语句时。一个COMMIT记录马上放入日志缓冲区,但对应的数据缓冲区改变是被延迟,直到在更有效时才将它们写入数据文件。当一事务提交时,被赋给一个系统改动号(SCN),它同事务日志项一起记录在日志中。因为SCN记录在日志中,以致在并行server选项配置情况下,恢复操作能够同步。

 

 3. PMON 进程监视进程
         PMON(the Process Monitor Process)进程负责监视数据库的处理情况,并负责清除死掉的进程。PMON还负责重新启动失败的调度进
程(dispatcher process)

 

4. SMON进程

       SMON是Oracle数据库至关重要的一个后台进程, 该进程实例启动时运行实例恢复。还负责清理不再使用的暂时段, 是一种用于库的“垃圾收集者”。在具有并行server选项的环境下。SMON对有故障CPU或实例进行实例恢复。SMON进程有规律地被呼醒,检查是否须要,或者其他进程发现须要时能够被调用。

 

它做的工作包含例如以下7件:

       (1)清理暂时表空间:伴随这“真正”的暂时表空间的出现。清理暂时表空间的杂事已经减轻了,但它还没全然消失。比如,当建立一个索引,在创建期间分配给索引的扩展区被标志为TEMPORARY。假设Create Index会话因某些原因异常中断。SMON负责清理他们。其它操作创建的暂时扩展区。SMON相同会负责。
       (2) 接合空暇空间:假设你正使用数据字典管理表空间,SMON负责把那些在表空间中空暇的而且互相是邻近的extent接合成一个较大的空暇扩展区。这发生仅在带有默认的pctincrease设置为非零的存储子句的字典管理表空间。


       (3) 把对于不可用文件的事务恢复成活动状态:它的角色类似在库启动期间。这时。由于文件不能用于恢复,SMON恢复在实例/崩溃恢复期间被跳过的故障事务。比如。文件可能已经在不可用或没装载的磁盘上。当文件变可用了,SMON将恢复它。


       (4)运行一个RAC中故障节点的实例恢复:在一个oracle RAC配置中。当群集中的一个库实例失败(比如。实例正运行的机器故障了),一些群集中的其它节点将开启故障的实例的重做日志文件,为故障实例运行全部数据的恢复。
       (5)清理OBJ$:OBJ$是一个包括库中差点儿每个对象(表,索引,触发器,视图等等)的记录的行级数据字典表。

很多次。这儿存在的记录代表已删对象,或代表不在这儿的对象,在oracle的信赖机制中被使用。SMON是删除这些不在被须要的行的进程。
       (6)收缩回滚段:SMON将运行回滚段的自己主动收缩到它的optimal尺寸,假设它被设置。
       (7)“脱机”回滚段:对于DBA来,让一个有active事务的回滚段,脱机或不可用。这事是可能的。Active事务正使用这脱机回滚段是可能的。

在这情况下,回滚不是真正的脱机。它被标志为“悬挂offline”。在后台进程中,SMON将周期性尽力让它真正脱机。直到成功。

 

       SMON做更多事情,譬如存在DBA_TAB_MONITORING视图中的监控统计数据的洗刷。在SMON_SCN_TIME表中发现的时间戳定位信息的SCN的洗刷。等等。SMON在期间能消耗非常多CPU,这应该被觉得是正常的。

SMON周期性的苏醒(或被其它后台进程叫醒)来运行这些管家的家庭杂事。

 

 

5.CKPT 检查点进程
       CKPT(the Checkpoint Process)进程负责向DBWR进程发送信号,要求运行一次检查点,并更新数据库的全部数据和控制文件。
CheckPoint(检查点),是指有DBWR进程将全部改动过的数据缓冲区写回数据文件。CKPT是可选的,假设没有CKPT进程,则有LGWR代
行这些任务。

 

 

6. ARCHn 归档进程
      ARCH(the Archiver Process )负责将再现重做日志拷贝到归档存储器。进档RDBMS执行在ARCHIVELOG模式时ARCH才有效,假设
系统没有执行在ARCHIVELOG模式。则系统失效后可能无法恢复。最后让系统执行在ARCHIVELOG模式下,此时归档进程可能有多个。


      SQL>archive log list          //查看是否为归档模式
      能够再数据库Mount 模式下开启归档
      SQL>alter database archivelog; //开启
      SQL>alter database noarchivelog;//关闭


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

 

------------------------------

By    Dylan.

推荐阅读