欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

OracleDB入门8:共享服务器模式配置

程序员文章站 2022-07-16 12:50:06
...

本文转载自ORACLE的连接模式——专用服务器和共享服务器,加了自己的一点点修改。

1.综述

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

2.专用服务器

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

[aaa@qq.com admin]$ ps -aux | grep oracle$ORACLE_SID
oracle     637  0.0  3.4 391252 68832 ?        Ss   11:04   0:00 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle     802  0.0  0.0   2936   444 ?        S+   11:38   0:00 grep --color=auto oracleorcl

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

OracleDB入门8:共享服务器模式配置

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

3.共享服务器

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

 

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

OracleDB入门8:共享服务器模式配置

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

         如上描述可知,共享服务器模式多了两种进程:调度进程、共享服务器进程用户进程连接监听器,监听器负责将链接派发到调度进程,这样,用户进程后面直接和调度进程链接。由此可知,调度进程也监听相关端口,此过程类似于TCP的连接过程,服务端的listen句柄负责派发连接,真正对服务端连接的进行是accept后的句柄。

OracleDB入门8:共享服务器模式配置

4. 设置共享服务器模式设置

专用服务器这是ORACLE的默认启动选项,不需要额外的设置,此外一些喜欢管理命令(如startup)等必须通过专用服务器链接。以下讲述共享服务器模式配置。

1.参数:SHARED_SERVERS

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

共享服务器个数:

alter systemset shared_servers = 10;

最大共享服务器个数(可选)

alter systemset max_shared_servers = 5 scope=both ;

2.参数:DISPATCHERS

alter systemset dispatchers=’ (PROTOCOL=TCP) (dispatchers=2) ‘;

PROTOCOL表示连接的协议。

dispatchers表示派发器数量。

3.客户端的tnsnames.ora 设置

在 CONNECT_DATA 设置中将SERVER 的值 DEDICATED改为SHARED(专用连接时填DEDICATED),即可使用共享服务器连接。

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

orcl=

  (DESCRIPTION =

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

    (CONNECT_DATA =

      (SERVER = SHARED)

      (SERVICE_NAME = orcl)

    )

  )

 

5. 服务器模式判断

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

1.  V$session

OracleDB入门8:共享服务器模式配置

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

6. 关闭共享服务器模式

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

命令如下:

 alter systemset shared_servers = 0 ;

 

相关标签: DataBases