Oracle后台进程介绍
一 进程分类:
1、服务器进程(server process): 根据客户请求完成工作。如接收和处理应用发送的sql语句
2、后台进程(background process): 随而启动,用于完成各种维护任务。如将块写到磁盘(dbwn)、
维护在线重做日志(lgwr)、清理异常终止的进程等。
3、从属进程(slave process):类似于后台进程,不过它们要代表后台进程或服务器进程完成一些额外工作。
二 主要讲一下后台进程:
来浏览一下主要进程:
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将日志缓冲区的日志项写入日志文件后,服务器进程可将新的日志项写入到该日志缓冲区。lgwr 通常写得很快,可确保日志缓冲区总有空间可写入新的日志项。
注意:有时候当需要更多的日志缓冲区时,lwgr在一个事务提交前就将日志项写出,而这些日志项仅当在以后事务提交后才永久化。
oracle使用快速提交机制,当用户发出commit语句时,一个commit记录立即放入日志缓冲区,但相应的数据缓冲区改变是被延迟,直到在更有效时才将它们写入数据文件。当一事务提交时,被赋给一个系统修改号(scn),它同事务日志项一起记录在日志中。由于scn记录在日志中,以致在并行服务器选项配置情况下,恢复操作可以同步。
3. pmon 进程监视进程
pmon(the process monitor process)进程负责监视数据库的处理情况,并负责清除死掉的进程。pmon还负责重启失败的调度进
程(dispatcher process)
4. smon进程
smon是oracle数据库至关重要的一个后台进程, 该进程实例启动时执行实例恢复,还负责清理不再使用的临时段, 是一种用于库的“垃圾收集者”。在具有并行服务器选项的环境下,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.