每当数据库启动时,后台进程会自动启动,并且持续实例的整个生命周期。每个进程都有自己独特的任务,下面就对每个进程的任务和触发条件的详细讲解。
查看实例的后台进程命令:
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下共享进程。
...........