后台进程

时间:2023-03-09 19:11:27
<Oracle Database>后台进程

<Oracle Database>后台进程

进程监视器进程(PMON) 

这个进程负责在出现异常中止的连接之后完成清理。PMON会回滚未提交的工作,并释放为失败进程分配的SGA资源。PMON还负责监视其他的Oracle后台进程,并在必要时(如果可能的话)重启这些后台进程。PMON还会为实例做另一件事,这就是向Oracle TNS监听器注册这个实例。实例启动时,PMON进程会询问公认的端口地址(除非直接指定),来查看是否启动并运行了一个监听器。

系统监视器进程(SMON)

SMON进程要完成所有“系统级”任务。是一种数据库“垃圾收集器”。SMON所做的工作包括:

  1. 清理临时空间:例如,建立一个索引时,创建时为索引分配的区段标记为TEMPORARY。如果出于某种原因CREATE INDEX会话中止了,SMON就要负责清理。其他操作创建的临时区段也要由SMON负责清理。
  2. 合并空闲空间:如果你在使用字典管理的表空间,SMON要负责取得表空间中相互连续的空闲区段,并把它们合并为一个更大的空闲区段。
  3. 针对原来不可用的文件恢复活动的事务:这类似于数据库启动时SMON的作用:SMON会恢复一些失败的活动事务。
  4. 执行RAC中失败节点的实例恢复:在一个Oracle RAC配置中,集群中的一个数据库实例失败时,为该失败实例完成所有数据的恢复。
  5. 清理OBJ$:OBJ$是一个低级数据字典表,SMON进程删除这些不再需要的行。
  6. 收缩回滚段:如果有设置,SMON会自动将回滚段收缩为所设置的最佳大小。
  7. “离线”回滚段。

除此之外,它还会做许多其他的事情,如将DBA_TAB_MONITORING视图中的监视统计信息刷新输出,将SMON_SCN_TIME表中的SCN-时间戳映射信息刷新输出等。

检查点进程(CKPT)

检查点进程并不像它的名字所暗示的那样真的建立检查点,建立检查点主要是DBWn的任务。CKPT只是更新数据文件的文件首部,以辅助真正建立检查点的进程(DBWn)。

分布式数据库恢复(RECO)

RECO有一个很中心的任务:由于两段提交(two-phase commit,2PC)期间的崩溃或连接丢失等原因,有些事务可能会保持准备状态,这个进程就是要恢复这些事务。可疑的分布式事务可能导致写入器阻塞读取器(Oracle中只有此时会发生“写阻塞读”的情况)。

归档进程(ARCn)

ARCn进程的任务是:当LGWR将在线重做日志文件填满时,就将其复制到另一个位置。

日志写入器进程(LGWR)

LGWR进程负责将SGA中重做日志缓冲区的内容刷新输出到磁盘。如果满足以下某个条件,就会做这个工作:

  • 每3秒会刷新输出一次
  • 任何事务发出一个提交时
  • 重做日志缓冲区1/3满,或者已经包含1 MB的缓冲数据

数据库块写入器(DBWn)

负责将脏块写入磁盘的后台进程。DBWn会写出缓冲区缓存中的脏块,通常是为了在缓存中腾出更多的空间(释放缓冲区来读入其他数据),或者是为了推进检查点(将在线重做日志文件中的位置前移,如果出现失败,Oracle会从这个位置开始读取来恢复实例)。