一、Oracle进程概述

在oracle中进程分为用户进程(User Process)、服务器进程(server process)和后天进程3种。

1.用户进程:当用户连接到数据库执行一个应用程序是,会创建一个用户进程来完成用户所指定的任务。

与用户进程相关的概念有:连接:是指用户进程与数据库实例之间的一条通信路径。

会话:是指用户到数据库的指定连接。

2.服务器进程:是有oracle自身创建,用于处理连接到数据库实例的用户进程所提出的请求。用户进程只有通过服务器进程才能实现对数据库的访问和操作。

服务器进程的主要任务有  解析并执行用户提交的SQL语句和PL/SQL程序。

对数据的操作

将用户改变数据库的信息写入日志缓冲区

将查询或执行后的结果数据返回给用户进程

3.后台进程:为了保证oracle数据库在任意一个时刻都可以处理多用户的并发请求,oracle启动了一些相互独立的附加进程。

后台进程的主要作用:在内存与磁盘之间进行I/O操作

监视各个服务器的进程状态

协调各个服务器进程的任务

维护系统性能和可靠性

二、oracle服务器进程

oracle数据库服务器进程分为专用服务器进程(Dedicated server Processes)和共享服务器进程(Shared Server Process)两种。

专用服务器进程专门为一个用户进程提供服务,而共享服务器进程为多个用户进程提供服务。另外在oracle11G中又增加了一个新服务器结构叫数据库驻留连接池。

1.专用服务器结构:各个专用服务器之间是相互独立的,它们之间没有数据共享。

有些情况下需要指明使用专用服务器进程:

在进行批处理和大任务操作时。

使用RMAN进行数据库备份、恢复及执行数据库启动和停止时

专用服务器进程的工作过程:

用户进程向数据库实例发出连接请求-——>位于服务器中的Oracle监听程序探测到用户进程请求后,验证用户名和口令,通过后设立一个专用服务器进程-——>用户提交一个SQL语句

专用服务器进行首先判断去SQL工作区(共享池中)是否存在类似的SQL语句。如果不存在就分配新空间,然后进行解析,包括验证语法等。同时将语句的私有数据和信息保存到PGA中的私有SQL工作区——>

解析完成后,服务器开始在高速缓冲区中寻找SQL语句中请求的数据,如果没有存在高速缓冲区中,还需要从数据文件中读取到高速缓冲区中——>如果SQL语句对数据进行更改,尽在高速缓冲区中对数据进行更改,并且将生成的重做记录保存在重做日志缓冲区中

将来有LGWR写入到重做日志中,由DBWR将脏缓存块的数据写入到数据文件中——>专业服务器进程返回结果给用户进程。

2.共享服务器进程:即一个服务能为多个用户进程共享。

共享服务器进程的工作原理是:监听程序监听到一个用户进城后,首先检查该请求是否可以使用共享服务器进程,如果可以监听程序将符合条件的负载最小的调度进程,然后用户进程直接与该调度进程通信。当用户请求被

调度进程放入SGA中的一个先进先出的请求队列中。当有空闲的服务器进程时,该服务器进行从请求队列中取出一个“请求”进行处理,将处理的结果放到一个响应队列中,这其中一个调度进程对应一个响应队列。

最后调度进程从自己的队列中取出结果返回给用户进程。

工作流程:

用户进程连接数据库——>oracle监听程序对验证用户名和口令,验证通过后分配一个调度进程,用户进程与调度进程直接进行通信。——>用户提交一条SQL语句,调度进程将SQL语句放入请求队列当中,同时也将调度进程ID也存入到请求队列——>

当某个服务器进程空闲的时候,从请求队列中取出一个处理后的SQL语句,并对语句进行解析和处理,得到它锁请求的数据。——>共享服务器进行将请求结果放入到响应队列中。——>调度进程定期检查自己的响应队列,如果有发现自己处理啊的结果,

它通过放入到队列中的调度进程ID来判断是否是自己处理的结果——>如果是,就将结果返回给用户进程。

3.共享服务器进程设置于管理

(1)

可以用过设计数据初始化参数文件中的下列参数或在数据运行时动态设置下列参数,是数据库工作在共享服务器模式下:

SHARED_SERVERS:启动共享服务器进程的最小数量

MAX_SHARED_SERVERS:能够同时运行的共享服务器进行的最大数量

SHARED_SERVER_SESSIONS:共享服务器模式下能够同时运行的用户会话数

DISPATCHERS:配置共享服务器模式下的调度进程

MAX_DISPATCHERS:共享服务器模式下调度进程最大数量

CIRCUITS:所有网络会话使用的虚拟线路数量

首先SHARED_SERVERS参数,如果初始化文件中没有SHARED_SERVERS参数或者SHARED_SERVERS=0则数据库启动后运行的是专用服务器进程模式,如果需要运行共享服务器进程模式则需要设置SHARED_SERVERs大于0的值。

可以使用alter system set SHARED_SERVERS=3;alter system set SHARED_SERVERS=0;在这里如果将SHARED_SERVERS设置为0的话,数据库服务器并不能马上进入专用服务器进程模式,需要等待当前的共享服务器进程全部连接结束

后才启用。如果将MAX_SHARED_SERVERS也设置0,那么将马上进入专用模式。

如果SHARED_SERVERS大于0,而且没有配置DISPATCHERS时数据库将自动创建一个基于TCP协议的调度进程。

(2)确定数据库服务器的运行模式

只要查询相关设置参数就可以确定。

例如

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers integer
shared_servers integer 3

  

SQL> show parameter dispatchers;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
dispatchers string (PROTOCOL=TCP) (SERVICE=orclXD
B)
max_dispatchers integer

  (3)查询数据库中共享服务器的数量

通过查询动态性能视图可以查看服务器进程的状态。例

SQL> select * from V$SHARED_SERVER;

NAME PADDR            STATUS             MESSAGES      BYTES     BREAKS
---- ---------------- ---------------- ---------- ---------- ----------
CIRCUIT IDLE BUSY IN_NET OUT_NET REQUESTS
---------------- ---------- ---------- ---------- ---------- ----------
S000 000007FF944D7D00 WAIT(COMMON) 0 0 0
00 118258 0 0 0 0 S001 000007FF944E0080 WAIT(COMMON) 0 0 0
00 59605 1 0 0 0 S002 000007FF944E2160 WAIT(COMMON) 0 0 0
00 59603 0 0 0 0

  (4)查询数据库中调度进程

SQL> select NAME,NETWORK from V$DISPATCHER;

NAME
----
NETWORK
--------------------------------------------------------------------------------

D000
(ADDRESS=(PROTOCOL=tcp)(HOST=PC-20130419GRER)(PORT=57564))

  (5)改变共享服务器进程数量

SQL> alter system set shared_servers=5;

  这个共享服务器的进程数量应该通过检查共享服务器的使用情况来决定

SQL> select NAME,(BUSY/(BUSY+IDLE)) from V$SHARED_SERVER;

NAME (BUSY/(BUSY+IDLE))
---- ------------------
S000 0
S001 9.3207E-06
S002 0
S003 0
S004 0

  (6)增加调度进程数量

SQL> alter system set dispatchers="(PROTOCOL=TCP)(DISP=4)(PROTOCOL=IPC)(DISP=2)";

  (7)关闭调度进程

SQL> alter system shutdown immediate 'D002';

系统已更改。

  查看用户进程请求道服务器的类型

SQL> select  sid,username,server from v$session ;

       SID USERNAME                       SERVER
---------- ------------------------------ ---------
1 DEDICATED
2 DEDICATED
3 DEDICATED
4 DEDICATED
8 DEDICATED
10 SYS DEDICATED
63 SYSTEM DEDICATED
64 DEDICATED
65 DEDICATED
66 DEDICATED
70 DEDICATED

 (9)修改用户的连接类型

tnsnames.ora文件
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)

  

4.数据库驻留连接池

(1)基本概念:数据库驻留连接池(DRCP)是为典型的web应用提供到数据库服务器的连接,这些连接的时间通常比较短。数据库驻留连接池等价于数据库服务器进程与数据库会话的结合。

(2)合适使用数据库驻留连接池

数据服务器内存小,而客户端连接数巨大

客户端应用比较类似,能够共享或者重用会话。

客户端的连接时间很短

会话不需要跨客户端进行

5.数据库驻留连接池的管理

(1)启动数据库驻留连接池

Oracle包含一个默认的驻留连接池SYS_DEFAULT_CONNECTION_POOL,该连接池初始状态下并没有启动的,需要显示的启用。

可以查询数据字典DBA_CPOOL_INFO查看连接池的状态。

SQL> select connection_pool,status from dba_cpool_info;

CONNECTION_POOL
-------------------------------------------------------------------------------- STATUS
----------------
SYS_DEFAULT_CONNECTION_POOL
INACTIVE

  启用第一步

execute dbms_connection_pool.start_pool;

如果是专用服务器连接,则SERVER=DEDICATED,如果是DRCP连接,则SEVER=POOLED。如果在tnsnames.ora中指定了SERVER=POOLED,但并没有在实例中启动DRCP,则当客户请求连接时,DB会报ORA-12520错误。如果要指定客户端请求到DRCP,则客户端的tnsnames.ora中的连接字符串必须指定连接类型是POOLED,配置方式如下所示:
dhcp11g =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.5.26)(PORT = 1521))
(CONNECT_DATA =
(SERVER = POOLED)
(SERVICE_NAME = dbtest)
)
)

停用DRCP

执行exec dbms_connection_pool.stop_pool();

6.使用DBCA配置数据服务器工作模式

使用datebase configuration assistant

点击 下一步选择配置数据库选件,下一步

选择专业服务器进程

三、oracle后台进程

oracle实例的后台进程包括写入进程(DBWR)日志写入进程(LGWR)检查点进程(CKPT)系统监控进程(SMON)进程监控进程(PMON)归档进程(ARCH)恢复进程(RECO)所进程(LCKn)调度进程(Dnnn)

其中写入进程(DBWR)日志写入进程(LGWR)检查点进程(CKPT)系统监控进程(SMON)进程监控进程(PMON)是必须的。

1.DBWR:负责将更改的数据从数据库缓冲区高速缓存写入数据文件,保证了数据高速缓存区有更多的空闲缓存块,提高了缓存命中率。

当满足一下条件的时候DBWR进程将启动,将高速缓冲区中的脏数据写入数据文件

服务器搜索了一个数量的缓存块后还是没有搜索到可用的空闲缓存块,此时DBWR将会启动

检查点发生时

当数据高速缓存区中的LRU列表长度达到初始化参数DB_BLOCK_WRITE_BATCH指定值的一半

2.LGWR:负责将日志缓冲区中的数据写入重做日志,由于COMMIT操作依赖于LGWR写回日志(commit操作触发LGWR将日志缓冲区数据写入重做日志),因此系统性能容易受到LGWR的影响。应该是DBWR通知LGWR先完成相关工作,然后DBWR才开始工作。

当满足一下条件的时候LGWR进程将启动

用户通过commit语句提交当前事务

重做日志缓冲区写满1/3

DBWR进程开始写脏缓存块写入数据文件

oracle数据库对事务的提交采用快速提交和组提交两种机制

快速提交:当用户发出commit语句的时候,LGWR进程会立即将一条提交记录写入重做日志文件中,然后开始写入与该事务相关的重做信息。此时的脏缓存块并不会立即写到数据文件。

子提交:如果数据库中存储多个事务,则LGWR进程一次性奖重做日志缓存区的写入重做日志文件中,而不管事务是否已经提交

3.CKPT 检查点进程:负责向DBWR进程发送信号,要求执行一次检查点,并更新数据库的所有数据和控制文件。CheckPoint(检查点),是指有DBWR进程将所有修改过的数据缓冲区写回数据文件。CKPT是可选的,如果没有CKPT进程,则有LGWR代行这些任务。

它的作用:更新控制文件与数据文件的头部,使其同步。 触发DBWR进程

检查点的级别:数据库检查点

表空间检查点

时间检查点

4.SMON:系统监控进程,负责在实例启动的时候恢复实例。如果由于某种原因数据库崩溃了,那么没有来得及将写入磁盘的数据都将丢失,这样的话会造成已经提交的数据没有真正写入数据文件而丢失。

SMON恢复实例的步骤:

(1)执行前滚,将重做日志里已经写入到重做日志文件但数据还没有写到数据文件的已经提交的数据写入数据文件。

(2)在前滚完成后,立即打开数据库

(3)回滚没有提交的事务。

5.PMON:进程监控进程。主要工作负责清除死掉的进程。PMON还负责重启失败的调度进程。释放资源。

这些原理学习的时候很头疼,看了很多遍,希望自己也能好好的想想,理理通。慢慢消化



 

Oracle数据库体系结构(3)数据库进程的更多相关文章

  1. Oracle数据库体系结构、启动过程、关闭过程

    一.Oracle数据库体系结构体系结构由下面组件组成:1.Oracle服务器(Server):由数据库实例和数据库文件组成,另外在用户建立与服务器的连接时启动服务器进程并分配PGA(程序全局区) (1 ...

  2. Oracle数据库------体系结构

    ORACLE体系结构包括:实例(Instance),数据库文件,用户进程(User process),服务器进程以及其他文件. 1.ORACLE实例(instance)     1).要访问数据库必须 ...

  3. Oracle学习笔记--第2章 oracle 数据库体系结构

    第2章 oracle 数据库体系结构 目录: ————————————— 2.1物理存储结构 2.1.1数据文件 2.2.2控制文件 2.1.3重做日志文件 2.1.4其他文件 2.2逻辑存储结构 2 ...

  4. Oracle数据库体系结构(2)数据库实例

    Oracle实例的概念: 实例(Instance):就是数据库管理系统,处于用户与物理数据库之间的一个中间层软件,由一系列内存结构和后台进程组成. 用户操作数据库的过程实质上与数据库实例建立连接,然后 ...

  5. oracle数据库体系结构

    一.oracle数据库体系结构 基本组成: Oracle server:一般情况下是一个instance和一个database组成 一般:1个instance只能对应一个数据库. 特殊:1个数据库可以 ...

  6. Oracle数据库体系结构-Shared Pool

    Oracle数据库简单介绍 对象关系型数据库 重点:一致性+性能 一致性优于性能 处理模型:C/S模型 Client:用户和用户进程             Server:服务器进程,实例,数据库本身 ...

  7. Oracle数据库基本操作(一) —— Oracle数据库体系结构介绍、DDL、DCL、DML

    一.Oracle数据库介绍 1.基本介绍 Oracle数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/ ...

  8. Oracle 12c 读书笔记(二):Oracle数据库体系结构

    以11g来分析 数据库实例包括:SGA和一系列后台管理.监控简称 数据库包括三种文件:数据文件.控制文件.重做日志文件 数据库实例和数据库是Orale数据库体系的核心部分 Oracle服务器和实例 实 ...

  9. Oracle数据库体系结构(6)数据库归档重做日志文件管理

    归档重做日志文件的概念和选择 Oracle数据库能够把已经写满了的重做日志文件保存到一个或多个指定的离线位置,这种保存的文件为归档重做日志文件.通常情况下一个归档重做日志时一个被LGWR写满的重做日志 ...

随机推荐

  1. my_interface

    import flask,osserver=flask.Flask(__name__) #当前这个python文件,当做一个服务 @server.route('/error',methods=['ge ...

  2. Objective-C中的关联(objc_setAssociatedObject,objc_getAssociatedObject,objc_removeAssociatedObjects)

    关联的概念 所谓的关联,字面意思是把两个相关的对象放在一起,实际也是如此.把两个对象相互关联起来,使得其中的一个对象成为另外一个对象的一部分,这就是关联. 关联的作用 使用Category,我们可以给 ...

  3. C# 使用UUID生成各种模式方法

    UUID简单说明 常见的方式.可以利用数据库也可以利用程序生成,一般来说全球唯一. 优点: 1)简单,代码方便. 2)生成ID性能非常好,基本不会有性能问题. 3)全球唯一,在遇见数据迁移,系统数据合 ...

  4. winform对话框拖拽显示文件路径的问题

    allow drop=true; dragEnter dragDrop vs管理员账户拖拽会失败

  5. 【优才原创】Android的拖放机制

    优才网 [优才原创]Android的拖放机制 2016-04-18 优才学院 优才网 一.拖放机制概述 ² 拖放操作是手指触摸屏幕上的某一对象.然后拖动该对象.最后在屏幕的某个位置释放该对象并运行某种 ...

  6. lua table库

      整理自:http://www.cnblogs.com/whiteyun/archive/2009/08/10/1543139.html 1.table.concat(table, sep,  st ...

  7. LCD屏背光驱动调试心得---血的教训

    开发板:明远智睿MY-IMX6-EK140 内核源码:linux-3.14.52 背光驱动IC:MP3202 调光原理:通过开发板的核心板PWM4引脚控制MP3202的EN脚,输出不同的占空比从而达到 ...

  8. python pytest

    之前一直用unittest ,现在学习pytest 看看那个好 1. 安装 pip install -U pytest py.test --version 2. 只需要按照下面的规则: 测试文件以te ...

  9. 本地虚拟机LNMP环境安装

      首先上传源码包到linux中(本人上传到根目录中),随意上传能找到即可 一.配置YUM源(如果已经配好就不许要重新配置) 挂载光驱要挂载到/mnt下  Mount /dev/cdrom /mnt ...

  10. 一站式WPF--依赖属性(DependencyProperty)

    2009-10-20 11:32 by 周永恒, 22441 阅读, 24 评论, 收藏, 编辑 书接上文,前篇文章介绍了依赖属性的原理和实现了一个简单的DependencyProperty(DP), ...