oracle体系-3-进程-个人笔记

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字段为1background process,其余都是server process

三:backgroup process   后端进程

1.smon:系统监控进程

作用:①当实例崩溃之后,Oracle会自动恢复实例。②释放不再使用的临时段。

假如一个数据突然掉电,在内存块和磁盘正在交互时,内存块的数据未及时写入磁盘,已提交和未提交的数据全部丢失。再次开机启动时,通过实例回复再次把日志中的数据进行重写。这个实例回复的过程受到smon这个后台进程进行控制。所以当smon进程挂掉之后,数据库会直接瘫痪,再次重启数据库时可重新查看smon。

oracle体系-3-进程-个人笔记_第1张图片

 

 

 [root@oracle]#kill -9 2643  ##强杀smon进程之后,数据库所有后台进程均消失

 

 

 在数据库中查询表数据时报错

oracle体系-3-进程-个人笔记_第2张图片

------------------------------------

 

 

 2.pmon 进程监控

作用:

①当user process失败时,清理出现故障的进程。释放所有当前挂起的锁定。释放服务器端使用的资源

②监控空闲会话是否到达阈值

③动态注册监听

 

当用户发起请求userprocess连接到instance中时,分配给用户serverprocess和pga,pmon会定时刷新监听,监测到userprocess无存活状态时,会自动回收userprocess的所有资源提给给其他用户和会话连接。

在配置文件中修改pmon的连接时间,例如设置用户会话连接到数据库以后10分钟无任何操作,即自动释放userprocess资源给其他会话使用。在会话连接到数据库时,存在俩种状态,active和inactive(空闲)。active的状态可分为俩种,一种是on cpu(正在使用),另外一种是waiting(等待)。 设置配置文件中pmon的等待时间可进行调优使用。

---------------------------------

3.dbwn 数据写入进程(懒写)

oracle体系-3-进程-个人笔记_第3张图片

 

 

 作用:

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 写日志条目 (速写)

oracle体系-3-进程-个人笔记_第4张图片

 

 

 

作用:

 

1、将日志缓冲区中的日志条目写入日志文件。

 

2、不像DBWR可以有多个进程并行工作,LGWR只有一个工作进程

 

触发条件:

 

commit

 

②三分之一满(或1M满)(redolog buffer)

 

③先于dbwr写(先记后写,必须在dbwr写脏块之前写入日志,保证未提交数据都能回滚)(在脏buffer进行dbwr对应的动作之前的ddl和dml行为会记录日志及时记录在redologfiles中)

 

3(因为有③,则由DBWR3秒传导而来)

 

以上4个状况之一发生时, lgwr都会记日志

----------------------

5.ckpt 生成检查点(类似触发器,主要作用触发dbwr写出脏buffer)

oracle体系-3-进程-个人笔记_第5张图片

 

 作用:通知或督促dbwr写脏块

1、完全检查点:保证数据库的一致性。

2、增量检查点:不断更新控制文件中的检查点位置,当发生实例崩溃时,可以尽量缩短实例恢复的时间。

3、局部检查点:特定的操作下,针对某个表空间。

------------------------

 

 

 

6.others-arcn 归档当前日志 (一般需要将数据库设置为归档模式才有此功能)

 

归档模式下,发生日志切换时,把当前日志组中的内容写入归档日志,作为历史日志提供数据库的recovery

 

你可能感兴趣的:(oracle体系-3-进程-个人笔记)