oracle进程大体上可以分为三类:user process、serverprocess、backgroupprocess
一:userprocess 客户端进程
客户端的process,访问数据库可以分为三种形式:sqlplus、用于程序APP、web方式(oem)
sqlplus可执行sql和plsql请求(本地连接和远程连接)
linux环境下使用ps -ef 可以查看进程
app一般和java环境相关联查看进程环境(java程序直接嵌套sql语句,或调用Oracle存储过程)
oem一般通过web程序调用oracle程序
[root@oracle]$ emctl start dbconsole
二:serverprocess 服务端进程
服务器端的进程,userprocess不能直接访问oracle,需要通过相应的serverprocess访问实例,进而访问数据库。
[oracle@prod ~]$ps -ef |grep LOCAL
一般来说,专用链接是一个userprocess对应一个serverprocess,同时会分配一个pga,通过serverprocess在sga中通过shared pool进行语义分析筛选,形成执行计划,在databasebuffercache中读取数据,同时在redologbuffer中立即记录,速写到redologfiles中。当databasebuffercache中没有再进物理读,通过serverprocess回传pga,在userprocess即可看到数据。
在linux下看到的server process, (LOCAL=YES)是本地连接,(LOCAL=NO)是远程连接。
可以在oracle查看V$process视图,它包括了当前所有的后台进程和服务器进程。
SQL> select pid,program,background from v$process;
background字段为1是background process,其余都是server process
三:backgroup process 后端进程
1.smon:系统监控进程
作用:①当实例崩溃之后,Oracle会自动恢复实例。②释放不再使用的临时段。
假如一个数据突然掉电,在内存块和磁盘正在交互时,内存块的数据未及时写入磁盘,已提交和未提交的数据全部丢失。再次开机启动时,通过实例回复再次把日志中的数据进行重写。这个实例回复的过程受到smon这个后台进程进行控制。所以当smon进程挂掉之后,数据库会直接瘫痪,再次重启数据库时可重新查看smon。
[root@oracle]#kill -9 2643 ##强杀smon进程之后,数据库所有后台进程均消失
在数据库中查询表数据时报错
------------------------------------
2.pmon 进程监控
作用:
①当user process失败时,清理出现故障的进程。释放所有当前挂起的锁定。释放服务器端使用的资源
②监控空闲会话是否到达阈值
③动态注册监听
当用户发起请求userprocess连接到instance中时,分配给用户serverprocess和pga,pmon会定时刷新监听,监测到userprocess无存活状态时,会自动回收userprocess的所有资源提给给其他用户和会话连接。
在配置文件中修改pmon的连接时间,例如设置用户会话连接到数据库以后10分钟无任何操作,即自动释放userprocess资源给其他会话使用。在会话连接到数据库时,存在俩种状态,active和inactive(空闲)。active的状态可分为俩种,一种是on cpu(正在使用),另外一种是waiting(等待)。 设置配置文件中pmon的等待时间可进行调优使用。
---------------------------------
3.dbwn 数据写入进程(懒写)
作用:
1、将变更的数据缓冲区的脏buffer写入数据文件中。(定期刷新脏buffer到data files中,一般是由ckpt进程触发dbwr写脏buffer)
2、释放数据缓冲区空间。
3、触发条件:
①ckpt发生
②脏块太多时(阈值) (例如阈值设定为db-buffer大刀25%时,即需要写出脏buffer)
③db_buffer自由空间不够时(当需要写一张大表时,databasebuffercache中的块不够用,需要及时清除块中的脏buffer,把脏buffer变成clean,大表才能不造成淤堵,进行写。)
④3秒
⑤表空间设置为read only/offline/backup模式等
以上5个状况之一发生时,dbwn都会被触发
--------------------------
4.lgwr 写日志条目 (速写)
作用:
1、将日志缓冲区中的日志条目写入日志文件。
2、不像DBWR可以有多个进程并行工作,LGWR只有一个工作进程
触发条件:
①commit
②三分之一满(或1M满)(redolog buffer)
③先于dbwr写(先记后写,必须在dbwr写脏块之前写入日志,保证未提交数据都能回滚)(在脏buffer进行dbwr对应的动作之前的ddl和dml行为会记录日志及时记录在redologfiles中)
④3秒(因为有③,则由DBWR的3秒传导而来)
以上4个状况之一发生时, lgwr都会记日志
----------------------
5.ckpt 生成检查点(类似触发器,主要作用触发dbwr写出脏buffer)
作用:通知或督促dbwr写脏块
1、完全检查点:保证数据库的一致性。
2、增量检查点:不断更新控制文件中的检查点位置,当发生实例崩溃时,可以尽量缩短实例恢复的时间。
3、局部检查点:特定的操作下,针对某个表空间。
------------------------
6.others-arcn 归档当前日志 (一般需要将数据库设置为归档模式才有此功能)
归档模式下,发生日志切换时,把当前日志组中的内容写入归档日志,作为历史日志提供数据库的recovery