oracle数据库后台进程详解 总结

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

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

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下共享进程。

...........

你可能感兴趣的:(oracle数据库后台进程详解 总结)