一、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. 微软同步发行Windows 10和Windows 10 Mobile系统更新

    微软今天同步公布了新的 Windows 10 Redstone PC 和 Windows 10 Mobile 预览版. PC 版本是 Build 14271.Mobile 版本是 Build 1426 ...

  2. 基于多输出有序回归的年龄识别(CVPR_2016)

    作为学习记录,将所做PPT摘录如下: 网络结构: 网络结构描述: 网络工作流程: 损失函数计算: 亚洲人脸数据集: 参考代码:

  3. intelligent_cam

    https://github.com/shengkaisun/intelligent_cam/tree/772fe0e4d315f83ba01134389c6b618b1ce40aaf intelli ...

  4. Windows下静态库、动态库的创建和调用过程

    静态库和动态库的使用包括两个方面,1是使用已有的库(调用过程),2是编写一个库供别人使用(创建过程).这里不讲述过多的原理,只说明如何编写,以及不正确编写时会遇见的问题. //注:本文先从简单到复杂, ...

  5. .Vue 文件 ES6 语法 webstorm 中的一个识别Bug

    webstorm 2017 版本中即使安装了vue template file 设置了 js 语言为 es6 语法仍旧会出现识别不了划线的情况,苦寻很久,最后解决方式如下 <script typ ...

  6. rsync客户端命令使用简介

    rsync是linux下很流行的增量备份工具,也支持本地文件(夹)复制至远程,而且支持只传输增量部分,也是一个代码(程序)发布的好工具. 基本用法如下: rsync [一堆选项] 源文件(夹) 目标文 ...

  7. 第四篇: Ansible 常用模块使用

    一. command | shell 模块 该模块为:执行命令模块 (由于命令模块较为强大,可根据自身对操作系统的熟练程度而增加.所以这里不再介绍类似可以实现同功能模块,比如service模块,需要重 ...

  8. 【Python + selenium】之BSTestRunner:NameError: name 'unicode' is not defined

    参考文章:<python3.6 :NameError: name 'unicode' is not defined>

  9. CentOS 没有可用软件包 libmcrypt

    [1]安装libmcrypt 提示:没有可用软件包 解决办法: 1.安装第三方yum源 1.1 wget http://www.atomicorp.com/installers/atomic 1.2 ...

  10. memcache 使用方法

    Memcache::add // 添加一个值,如果已经存在,则返回falseMemcache::addServer // 添加Memcache地址Memcache::close // 关闭一个Memc ...