转载地址:http://blog.csdn.net/ronggangzhao/article/details/43418311

1.综述

Oracle数据存在两种连接模式,一种是一个会话建立一个连接的专用服务器模式;另外一种是多个会话共用一个连接的共享服务器模式。在不同的场景中,恰当的运用可以极大的提高应用访问效率和命令执行效率。

2.专用服务器

专用服务器,顾名思义,就是指该服务器连接只提供单个用户使用,不得与其他用户共用。当用户采取专用服务器方式请求连接时,服务器会专门为该用户创建一个连接进程提供服务。

当我们进行专用服务器方式连接数据库时,则会创建一个专门的进程来提供服务:

然后,我们通过pl/sql developer用 scott用户与实例建立两个专用服务器连接,再次查询数据库实例进程:

可以发现实例多了两个会话进程,从而得出实例为每个会话分配一个专门进程,会话与专用服务器一一对应。

专用服务器的原理图如下所示:

当用户登录时,总会创建一个进程来为会话提供专门的服务。每当一个新会话建立,监听程序会创建新的专用服务器来提供专门服务,会话与专门服务器一一对应。用户的客户进程会通过某种网络通道与专门服务器直接通信,来响应我们提交的SQL、PL/SQL调用。

3.共享服务器

共享服务器,可以理解为类似连接池原理,有众多的会话,但可供使用的连接数一定,通过资源调度来动态管理会话与实例建立连接,这些连接供所有的会话共享,可以有效的减少资源负载。

共享服务器的原理如下图所示:

由于共享服务器进程的共享,需要在客户进程与共享服务器通信之间建立一种调度机制——调度程序,来保障调度的有效性。用户提出连接请求,监听器接收到连接请求后,会从可调用的调度程序中选择一个,将连接端口等信息返回给用户,调度程序在相应的端口等待,客户进程将于该调度程序进行连接。与调度程序连接后,将用户请求转入SGA的请求队列中,第一个空闲的共享服务器会得到这个请求,并进行处理。待处理完成,共享服务器会将结果放在响应的队列中。调度程序一致在监听响应队列,一旦发现有结果了,就会把结果传给用户。

4. 使用场景

专用服务器与共享服务器的主要区别:

客户进程不会与共享服务器直接通信,而可以与专用服务器直接通信。在客户进程与共享服务器之间还有一层调度机制。

共享服务器方式比专用服务器方式能够更好的分配资源,均衡负载,但是调度机制在使用过程中对系统资源有一定的消耗,执行效率有所下降,所以需要慎重使用方式。

专用服务器使用环境:

1.       连接用户数少的情况下,并不超出共享进程的限定数,提高了连接效率。

2.       数据库为了实现数据仓库,则必须使用专用服务器,oracle的强制要求。

3.       当联机事务处理系统满足用户连接数大于共享进程的限定数,且处理的事务都是大,则专用服务相对于共享服务器更高效。

共享服务器使用环境:

1.       连接用户数比较多,事务都比较小,则共享服务器可以高效的配置资源调高效率。

2.       服务器内存的考虑,共享服务器可以再有效的资源下更加高效。

3.       例如:负载均衡等特性要求采用共享服务器。

ORACLE默认推荐使用的是专用服务器方式,而共享服务器带了优势:

1.       操作系统进程数减少,减少操作系统上下文切换的资源消耗,提高效率。

2.       有效的限制并发度,即将系统消耗现在一个合理的范围。

这两种模式有利有弊需要视情况使用。

5. 服务器模式设置

5.1 专用服务器

专用服务器这是ORACLE的默认启动选项,不需要额外的设置。

5.2 共享服务器

1.参数:SHARED_SERVERS

SHARED_SERVERS的值大于0,表示启动了共享模式。

共享服务器个数:

alter systemset shared_servers = 1 scope=both ;

最大共享服务器个数:

alter systemset max_shared_servers = 5 scope=both ;

2.参数:DISPATCHERS

alter systemset dispatchers=’ (PROTOCOL=TCP) (SERVICE=zrgXDB) ‘;

ORACLE文档上指出该参数为可选项,如果不配置将匹配任何协议和服务。但在测试将参数设置为控制,进行登录时,显示失败。

PROTOCOL表示连接的协议。

SERVICE表示允许共享服务器的服务。

3.在客户端的tnsnames.ora 的tns设置中,在 CONNECT_DATA 设置中将SERVER 的值 DEDICATED改为SHARED,即可使用共享服务器连接。

5.3 TNS配置

在客户端的TNS中配置如下:

根据监听器状态,服务zrgXDB.zrg.com可以配置共享服务器连接:

DBZRG =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST =192.168.199.134)(PORT = 1521))

(CONNECT_DATA =

(SERVER = SHARED)

(SERVICE_NAME = zrgXDB.zrg.com)

)

)

如果我们将SERVICE_NAME改为orcl.zrg.com或pdbzrg.zrg.com,则会出现ORA-12520: TNS: 监听程序无法找到需要的服务器类型的可用句柄

而专用服务器的连接可以配置为:

DBZRG =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST =192.168.199.134)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = zrgXDB.zrg.com)

)

)

专用服务器模式是数据库默认支持的所以无需配置,而共享服务器需要配置开启的,支持共享服务器模式的,也可以进行专用服务器模式连接。

我们也可以将SERVICE_NAME改用SID=epps代替,epps作为连接的实例,存在服务使用共享服务器,可以建立共享服务器连接,同时也可以建立专用服务器连接。

6. 服务器模式判断

判断当前是否启动了共享服务器可以从以下视图入手:

1.  V$session

可以看到我用PL/SQL DEVELOPER与实例建立了共享服务器方式:SERVER类型为SHARED,如果为NONE也表示了启用了共享服务器。还可以发现系统后台进程全部启动了专用服务器进程。

2. V$shared_server

启动共享服务器:

关闭共享服务器:

需要将已经建立的共享服务器的会话结束,该参数才会发生变化。

3.   V$circuit

有查询结果则表示启用了共享模式,否则不能做出判断。

4. 查看监听器状态

从以上信息,我们看到有一个服务zrgXDB.zrg.com使用的是共享服务器,有一个调度器“D000”;还有两个服务orcl.zrg.com,pdbzrg.zrg.com使用的是专用服务器。

7. 关闭共享服务器模式

将参数shared_servers的值设置为0,就可以禁用共享服务器模式了。

命令如下:

alter systemset shared_servers = 0 ;

ORACLE的连接模式——专用服务器和共享服务器相关推荐

  1. ftp无法与服务器建立连接_建立与Oracle数据库服务器连接的两种连接模式

    建立与Oracle数据库服务器连接的两种连接模式(专用服务器与共享服务器) 在建立Oracle数据库的时候,应该会在数据库建立助手向导上面看到这么一个选项,就是数据库的连接模式采用什么方式.在Orac ...

  2. Oracle数据库网络连接模式

    目录 一.概述 1.1.专用模式 1.2.共享模式 1.3.监听器的特点 二.专有服务器配置 2.1.服务器端监听器listener 2.2.客户端 2.3.客户端申请链接的过程 2.4.ORACLE ...

  3. Oracle 专用服务器与共享服务器的区别

    专用服务器:一个客户端连接对应一个服务器进程 共享服务器:多个客户端连接对应一个服务器进程,服务器端存在一个进程调度器来管理. Oracle缺省用的是专用服务器模式,Oracle可以同时支持共享服务器 ...

  4. ORACLE网络连接配置与文件:listener.ora、sqlnet.ora、tnsnames.ora

    [转自]http://www.chinaunix.net/jh/19/594396.html 最近看到好多人说到tns或者数据库不能登录等问题,就索性总结了下面的东东. 首先来说oracle的网络结构 ...

  5. quicksearch连接oracle,无法连接到数据库orcl

    Windows下,关于Oracle新建数据库之后,无法通过 / as sysdba 连接到orcl 问题 背景: oracle 学习阶段,是这创建了数据库,发现 oracle 的一个数据库就是一个数据 ...

  6. 理解oracle中连接和会话

    理解oracle中连接和会话 1.  概念不同:概念不同: 连接是指物理的网络连接. 在已建立的连接上,建立客户端与oracle的会话,以后客户端与oracle的交互都在一个会话环境中进行. 2.   ...

  7. Oracle的连接与会话

    连接并不是会话的同义词,在一条连接上可以建立0个.一个或多个会话.各个会话是单独而且独立的,即使它们共享同一条数据库物理连接也是如此.一个会话中的提交不会影响该连接上的任何其他会话.实际上,一条连接上 ...

  8. Oracle表连接深入浅出

    表的连接 表的连接是指在一个SQL语句中通过表与表之间的关联,从一个或多个表检索出相关的数据.如果一个SQL语句的关联表超过两个, 那么连接的顺序如何呢?ORACLE首先连接其中的两个表,产生一个结果 ...

  9. asp.net学习之ado.net(连接模式访问)

    ado.net框架支持两种模式的数据访问: 连接模式(Connected)和非连接模式(disconnected).这一节介绍如何使用连接模式访问数据库中的数据,利用ADO.NET中的Connecti ...

最新文章

  1. 基于图割优化的多平面重建视觉 SLAM(ISMAR2021)
  2. 编程之美-队列中取最大值操作问题
  3. Mysql基础知识:索引
  4. 电子设计竞赛(7)-2017年电赛A题:微电网模拟系统教程
  5. Android延时执行调用的几种方法
  6. java多线程教程_java 基础教程之多线程详解及简单实例
  7. idea数据库反向生成实体类_asp.net core 系列 21 EF现有数据库进行反向工程
  8. [LeetCode] Sum of Left Leaves 左子叶之和
  9. python解析接口_010 python接口 bs4解析html
  10. 作业01-Java基本概念
  11. vs 自动生成core dump文件
  12. java连接数据库实现一个简单的登陆界面
  13. 上位机软件定制开发,如何选择服务商
  14. springboot实现微信小程序二维码生成
  15. 高并发核心技术Redis系列(七)--------Jedis操作Redis
  16. UED设计流程及方法
  17. 如何引流至企业微信社群
  18. 1. 无线纳米传感器网络和纳米物联网络:背景、架构、特征
  19. 电弧故障断路器全国产化电子元件推荐方案
  20. android 区分 真机模拟器_Android模拟器和真机总结的九点区别 Android程序如何在手机上运行...

热门文章

  1. 首页被绑定为www.7939.com的手工解除方法
  2. FPGA分频电路实现(奇数,偶数,小数半分频,任意分频)
  3. 论文笔记 -- Communication Lower Bound in Convolution Accelerators 卷积加速器中的通信下界
  4. 网络云盘前端项目启动
  5. 《最好的告别》:如何优雅地走向生命终点
  6. 【量化交易】 量化因子 情绪类因子计算
  7. javafx 教程_新的JMetro JavaFX 11兼容版本
  8. 腾讯云TCP架构高级工程师认证考试大纲、考题下载及说明
  9. 全国宣传思想工作会议 讲话_会议一周后,我的思想得到了满足
  10. python多个if_Python之条件判断/if嵌套/如何写嵌套代码