oracle进程

http://blog.csdn.net/leshami/article/details/5529239  Oracle实例和Oracle数据库(Oracle体系结构)

几类进程:用户进程,服务进程,后台进程,其它可选进程
用户进程
           在用户连接数据库产生,请求oracle服务器连接,必须要先建立一个连接,不会直接和oracle服务器连接
服务进程
           当连接实例并建立用户会话时产生,独立服务器或者提供共享服务器都能产生
后台进程
           维持物理和内存之间的联系,用来管理数据库的读写,恢复和监视等工作。
           Server Process主要是通过他和user process进行联系和沟通,并由他和user process进行数据的交换。
           在Unix机器上,Oracle后台进程相对于操作系统进程,也就是说,一个Oracle后台进程将启动一个操作系统进程。
           在Windows机器上,Oracle后台进程相对于操作系统线程,打开任务管理器,我们只能看到一个ORACLE.EXE的进程,但是通过另外的工具,就可以看到包含在这里进程中的线程。
用户进程(User Process)、服务进程(Server Process)、后台进程(Background Processes)的启动
           用户进程: 数据库用户请求Oralce server会话时被启动
           服务进程:当用户会话启动后,连接到Oracle实例时该进程被启动
           后台进程:当Oracle实例被启动时,启动相关的后台进程
Server Process(服务进程)
           分为专用服务进程(Dedicated Server Process)和共享服务进程(MultiTreaded Server Process)
           专用服务进程:一个服务进程对应多个用户进程,轮流为用户进程服务。
必须要有的后台进程
       DBWn       -->数据库写进程
       PMON       -->程序监控进程
       SMON       -->系统监控进程
       LGWr       -->日志写进程
       CKPT       -->检查点进程
可选进程:
       ARCN       归档进程
       RECO
       Snnn
       pnnn

DBWn(数据库写进程)
       负责将修改过的数据块从数据库缓冲区高速缓存写入磁盘上的数据文件中
       写入条件:
       发生检查点
       脏缓存达到限制
       没有自由的缓存
       超时发生
       表空间离线
       表空间只读
       表被删除或者截断
       开始备份表空间
           可以修改数据写进程的数量
           alter system set db_writer_processes=3 scope=spfile;

PMON(程序监控进程)
       清除失效的用户进程,释放用户进程所用的资源。
       如PMON将回滚未提交的工作,释放锁,释放分配给失败进程的SGA资源。
       清除失败的进程
       回滚事务
       释放锁
       释放其他资源

SMON(系统监控进程)
       检查数据库的一致性,当启动失败时完成灾难恢复等
       实难恢复时,前滚所有重做日志中的文件,打开数据库为了用户能访问,回滚未提交的事务,释放临时表空间
       清除临时空间,聚结空闲空间,从不可用的文件中恢复事务的活动,OPS中失败节点的实例恢复
       清除OBJ$表
       缩减回滚段
       使回滚段脱机

LGWr(日志写进程)
       将重做日志缓冲区中的更改写入在线重做日志文件
       条件:
       提交的时候(commit)
       redo log buffer达到1/3满
       每隔3秒
       有大于1MB 重做日志缓冲区未被写入磁盘
       DBWR需要写入的数据的SCN号大于LGWR 记录的SCN号,DBWR 触发LGWR写入
       超时
       在dbwr进程写之前写日志

CKPT(检查点进程)
       DBWR/LGWR的工作原理,造成了数据文件,日志文件,控制文件的不一致,CKPT进程负责同步数据文件,日志文件和控制文件
       CKPT会更新数据文件/控制文件的头信息
       条件:
       在日志切换的时候
       数据库用immediate ,transaction ,normal选项shutdown数据库的时候
       根据初始话文件LOG_CHECKPOINT_INTERVAL、LOG_CHECKPOINT_TIMEOUT、FAST_START_IO_TARGET 的设置的数值来确定
       用户触发

ARCN(归档进程)
       在每次日志切换时把已满的日志组进行备份或归档
       条件:
       数据库以归档方式运行的时候

RECO
       负责解决分布事物中的故障。Oracle可以连接远程的多个数据库,当由于网络问题,有些事物处于悬而未决的状态。
       RECO进程试图建立与远程服务器的通信,当故障消除后,RECO进程自动解决所有悬而未决的会话。

 

 

查看oracle相关进程,用下面这条sql

select * from v$process;



[oracle@localhost dbs]$ sqlplus / as sysdba

执行上面这条命令后,会产生以下进程,以/u01开头的不属于这条命令所产生的。即442进程组,此时数据库是关闭的,所以没有后台进程和数据库相关进程。

[root@localhost ~]# ps -fu oracle

UID        PID  PPID  C STIME TTY          TIME CMD

oracle     442   441  0 14:53 pts/0    00:00:00 -bash

oracle    6949 27746 54 16:16 ?        00:00:04 /u01/app/oracle/product/11.2.0/dbhome_1/jdk/bin/java -server -Xmx384M -XX:MaxPermSize=400M -XX:MinHeapFreeRatio=20 -XX:MaxHeapFre

oracle    7015   442  0 16:16 pts/0    00:00:00 rlwrap sqlplus / as sysdba

oracle    7016  7015  0 16:16 pts/1    00:00:00 sqlplus   as sysdba

oracle    7017  7016  0 16:16 ?        00:00:00 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

oracle   20034     1  0 Jul09 ?        00:00:07 /u01/app/oracle/product/11.2.0/dbhome_1/bin/tnslsnr LISTENER -inherit

oracle   27746     1  0 Jul09 ?        00:00:12 /u01/app/oracle/product/11.2.0/dbhome_1/perl/bin/perl /u01/app/oracle/product/11.2.0/dbhome_1/bin/emwd.pl dbconsole /u01/app/orac

oracle   27799 27746  0 Jul09 ?        00:00:51 /u01/app/oracle/product/11.2.0/dbhome_1/bin/emagent



下面这条命令将会启动如下后台进程

这步依据参数文件的定义,尤其是关于内存分配和进程数的定义,开始分配SGA并启动oracle后台进程。

内存申请及后台进程启动完成后,oracle实例变为启动状态。

SQL> startup nomount

ORACLE instance started.



Total System Global Area 1603411968 bytes

Fixed Size                  2213776 bytes

Variable Size             956303472 bytes

Database Buffers          637534208 bytes

Redo Buffers                7360512 bytes



[root@localhost ~]# ps -fu oracle

oracle    7249     1  0 16:20 ?        00:00:00 ora_pmon_orcl

oracle    7251     1  0 16:20 ?        00:00:00 ora_vktm_orcl

oracle    7255     1  0 16:20 ?        00:00:00 ora_gen0_orcl

oracle    7257     1  0 16:20 ?        00:00:00 ora_diag_orcl

oracle    7259     1  0 16:20 ?        00:00:00 ora_dbrm_orcl

oracle    7261     1  0 16:20 ?        00:00:00 ora_psp0_orcl

oracle    7263     1  0 16:20 ?        00:00:00 ora_dia0_orcl

oracle    7265     1  6 16:20 ?        00:00:00 ora_mman_orcl

oracle    7267     1  0 16:20 ?        00:00:00 ora_dbw0_orcl

oracle    7269     1  0 16:20 ?        00:00:00 ora_lgwr_orcl

oracle    7271     1  0 16:20 ?        00:00:00 ora_ckpt_orcl

oracle    7273     1  0 16:20 ?        00:00:00 ora_smon_orcl

oracle    7275     1  0 16:20 ?        00:00:00 ora_reco_orcl

oracle    7277     1  0 16:20 ?        00:00:00 ora_mmon_orcl

oracle    7279     1  0 16:20 ?        00:00:00 ora_mmnl_orcl

oracle    7281     1  0 16:20 ?        00:00:00 ora_d000_orcl

oracle    7283     1  0 16:20 ?        00:00:00 ora_s000_orcl



alter database mount;

上面这条命令会多出下面这个进程

这步是根据参数文件打开控制文件

oracle    7688     1  0 16:26 ?        00:00:00 oracleorcl (LOCAL=NO)



alter database open;

上面这条命令会多出下面的进程,会替换掉上面的7688进程。

这步是根据控制文件打开数据文件与重做日志文件,即打开了数据库

oracle    8135     1  0 16:29 ?        00:00:00 ora_qmnc_orcl

oracle    8149     1  4 16:29 ?        00:00:00 ora_cjq0_orcl

oracle    8151     1 23 16:29 ?        00:00:00 ora_j000_orcl

oracle    8153     1  5 16:29 ?        00:00:00 ora_j001_orcl

oracle    8155     1  0 16:29 ?        00:00:00 ora_j002_orcl

 

oracle   27731     1  0 Jul06 ?        00:00:00 oracleflt (LOCAL=NO)

这种进程就是由客户端进程连接所创建的服务器进程,它们是相互独立的,其集合是程序全局区pga

你可能感兴趣的:(oracle)