每当数据库启动时,后台进程会自动启动,并且持续实例的整个生命周期。每个进程都有自己独特的任务,下面就对每个进程的任务和触发条件的详细讲解。

查看实例的后台进程命令:


windows:select program from v$session where program like 'ORACLE_EXR%'; 

 linux:ps -ef|grep ora_|grep -v grep

smon:数据块管理相关:


     库启动时实例恢复,rac下,一个节点smon通过访问另一个节点的redo对其进行实例恢复


     清理和释放临时段上的数据:排序,临时表 


     对字典管理表空间(DMT),合并连续空闲的extent


     维护回滚段的online,offline以及空间的回收



pmon:进程异常终止


     会话被杀掉


     事务超过空闲时间


     网络连接超时


     将实例信息注册到监听器 alter system register;


  清理工作:回滚未提交的事务,释放相关的资源


  具体:重置undo数据块上事务表的状态为inactive


       释放事务产生的锁


       从v$session中清除异常终止的会话id,(可能还能查到,但状态已经变为killed,因为资源还没释放掉)===如果还杀不掉,去操作系统下kill -9



DBWn:data blocks write 注意:由于数据块在磁盘上位置不连续,比lgwr耗时


      只写脏数据


     触发条件:当server process无法在buffer cache中找到buffer时(LRU)


              check point 


     通过设置多个DBWn进程加快写,通过参数设置db_writer_processes



CheckPoint:检查点之前的数据是安全的,可以理解为数据库在某个时间点的快照,此时内存和磁盘上数据是一致的


     减少数据库实例恢复的时间


     让内存中的脏数据及时写到磁盘上


     在安全关闭数据库时,保证所有脏数据及时落盘(错误理解)-》正确应该是所有提交的数据落盘


     但是checkpoint通知dbwn把数据写到磁盘上,并不管是否提交(redo来管),所以磁盘上会有没有提交的数据


   触发条件:


      1.database checkpoint(库级别):一致性关库;手工 alter system checkpoint;日志的切换,保证日志写到磁盘上(online redo log switch) ,alter database begin backup (8i时才使用,告诉数据库要开始备份了)


     2.tablespace and data file checkpoint(表空间级别):将表空间设成只读时;tablespace offline normal(表空间正常下线时);收缩数据文件(shrinking a data file),涉及数据块的移动;alter  tablespace begin backup (8i时才使用);


     3.incremental checkpoint,即增量checkpoint.



    流程:  control file <-ckpt->data file body/datafile header->dbwn<-db buffer cache


    说明:ckpt通知dbwn将buffer cache中脏数据落盘,ckpt负责更新文件头信息和控制文件信息。ckpt会在文件头上打上标签(时间戳),标签之前的数据都是安全的,另外更新控制文件信息用来比对标签是否正确 。


 


LGWR进程:负责将log buffer->online redo file,顺序写,比dbwn效率高


    触发条件:用户提交事务(commit);日志切换;3s;1/3满;1M;DBWn进程写之前




commit和checkpoint的区别:


  commit:提交的事务修改的数据产生的日志,必须立即写到磁盘上。从而保护数据。


  checkpoint:不能保护数据,而是将脏数据写到磁盘上,加快数据恢复时间,为data buffer提供空闲空间


          写到磁盘上的数据,并不一定是提交的


          数据写到磁盘之前,这部分数据对应的redo要先写


          如果是手工alter system checkpoint将只把commit的数据落盘


          安全关闭数据库,只是把commit的数据落盘



ARCn进程:负责将online redo file ->归档 ,如果是dg环境,负责将日志向standby服务器发送

     触发:在线日志切换


其它一些进程:


ASMB进程:asm实例核心后台进程,负责管理asm存储。


CJQ0:job任务协调进程,负责将job分发给真正执行的子进程。0表示可能有很多个。


Jnnn:job具体执行进程。


MMAN:内存管理进程,负责内存动态管理,分配和回收。11g下实现了内存自动管理。


Pnnn:(process)如果有并行执行,接受并行协调进程分配的任务,具体执行。类似Jnnn。


RBAL:asm的rebalance进程,负责asm数据的rebalance操作。


RECO:(recover)分布式事务的恢复进程,分布式:两台数据库通过blink连接。区别smon。

Snnn:MTS下共享进程。

...........