ORACLE参数max_shared_servers空值与零的区别

ORACLE数据库中的参数max_shared_servers,这是一个DBA很熟悉的参数,但是这个参数max_shared_servers为空值与为0有区别吗?这个细节可能很多人都没有注意过。如下所示:

 

 
SQL> show parameter max_shared_servers
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers                   integer
SQL> 
 
SQL> show parameter shared  
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address             integer     0
max_shared_servers                   integer
shared_memory_address                integer     0
shared_pool_reserved_size            big integer 23488102
shared_pool_size                     big integer 0
shared_server_sessions               integer     100
shared_servers                       integer     1
SQL> 

 

 

检查一下参数shared_servers, 这个参数不能为0,否则下面测试,连接数据库就会报“ORA-12520:TNS: 监听程序无法为请求的服务器类型找到可以用的处理程序”错误。如果shared_servers为0,将其设置为1(也请留意参数shared_server_sessions影响测试结果)

SQL> alter system set shared_servers=1 scope=both;
 
System altered.
 
SQL> 

 

 

此时检查shared server process的数量,你会发现只有一个shared server 进程,如下所示

 

[oracle@DB-Server trace]$ ps -ef | grep ora_s00 | grep -v grep
oracle    6824     1  0 15:35 ?        00:00:02 ora_s000_gsp
[oracle@DB-Server trace]$ 

 

我们使用SQL Developer或PL/SQL Developer使用共享服务器模式连接到数据库,开启多个会话,每个会话执行一个类似下面的SQL语句,边开启新的会话,边检查shared server process的数量,如下所示,你会看到shared server process的数量会一直增加。

UPDATE TEST SET NAME='Kerry' WHERE ID= 1001;

 

 

我们将参数max_shared_servers设置为0,然后对比上面的测试来看看

 

SQL> alter system set max_shared_servers=0 scope=both;
 
System altered.
 
SQL> !
[oracle@DB-Server ~]$  ps -ef | grep ora_s00 | grep -v grep
oracle    6824     1  0 15:35 ?        00:00:02 ora_s000_gsp
[oracle@DB-Server ~]$ 

 

此时开启多个共享服务器连接模式的会话执行一些UPDATE语句,你会发现shared server process的数量不会变化。如下所示。

 

[oracle@DB-Server ~]$ ps -ef | grep ora_s00 | grep -v grep
oracle    8396     1  0 17:21 ?        00:00:00 ora_s000_gsp
[oracle@DB-Server ~]$ ps -ef | grep ora_s00 | grep -v grep
oracle    8396     1  0 17:21 ?        00:00:00 ora_s000_gsp
[oracle@DB-Server ~]$ ps -ef | grep ora_s00 | grep -v grep
oracle    8396     1  0 17:21 ?        00:00:00 ora_s000_gsp
[oracle@DB-Server ~]$ ps -ef | grep ora_s00 | grep -v grep
oracle    8396     1  0 17:21 ?        00:00:00 ora_s000_gsp
[oracle@DB-Server ~]$ 

 

 

如果你每个会话都执行同一个UPDATE语句, 还会遇到下面错误,当然max_shared_servers为空值的情况是不会遇到这种情况的。

UPDATE TEST SET NAME='Kerry' WHERE ID= 1001;

 

 

可以使用下面SQL语句将max_shared_servers参数重置为空值。不过需要重启实例

SQL> alter system reset "max_shared_servers" scope=spfile;
 
System altered.
 
SQL> shutdown immediate;
 
Database closed.
 
Database dismounted.
 
ORACLE instance shut down.

 

 

关于这个max_shared_servers参数为空值的情况,其实官方文档已经给出了详细描述:

 

MAX_SHARED_SERVERS specifies the maximum number of shared server processes allowed to be running simultaneously. Setting this parameter enables you to reserve process slots for other processes, such as dedicated servers.

When you want to reduce the range of shared servers, you can reduce MAX_SHARED_SERVERS before reducing SHARED_SERVERS. If MAX_SHARED_SERVERS is lower than SHARED_SERVERS, then the number of shared servers will not vary but will remain at the constant level specified by SHARED_SERVERS. If MAX_SHARED_SERVERS is not specified, then a shared server process may be spawned as long as the number of free process slots is greater than 1 / 8 the maximum number of processes, or 2 if PROCESSES is less than 24.

 

另外其它相关参数的描述如下所示,仅供参考。

  • SHARED_SERVERS: Specifies the initial number of shared servers to start and the minimum number of shared servers to keep. This is the only required parameter for using shared servers.

 

  • MAX_SHARED_SERVERS: Specifies the maximum number of shared servers that can run simultaneously.

 

  • SHARED_SERVER_SESSIONS: Specifies the total number of shared server user sessions that can run simultaneously. Setting this parameter enables you to reserve user sessions for dedicated servers.

 

  • DISPATCHERS: Configures dispatcher processes in the shared server architecture.

 

  • MAX_DISPATCHERS: Specifies the maximum number of dispatcher processes that can run simultaneously. This parameter can be ignored for now. It will only be useful in a future release when the number of dispatchers is auto-tuned according to the number of concurrent connections.

 

  • CIRCUITS: Specifies the total number of virtual circuits that are available for inbound and outbound network sessions.
时间: 2024-09-03 14:40:29

ORACLE参数max_shared_servers空值与零的区别的相关文章

Oracle数据库中 call 和 exec的区别_oracle

今天发现了一个小东西,觉得很有意思,查找了一些资料,跟大家分享一下: 在sqlplus中: 在第三方提供的工具(如:plsqldev) 总结: exec是sqlplus的命令,只能在sqlplus中使用. call是sql命令,任何工具都可以使用,call必须有括号,即例没有参数 call必须有括号,即例没有参数 idle> connect /as sysdba 已连接. sys@PO10> sys@PO10> create procedure p_test is 2 begin 3 n

【体系结构】Oracle参数介绍

[体系结构]Oracle参数介绍 1  BLOG文档结构图     2  前言部分 2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① Oracle中的各种参数介绍及其查询方法 ② Oracle中V$PARAMETER及V$PARAMETER2的区别 ③ 隐含参数的查询.重置.清除 ④ 会话参数和实例参数的查询 ⑤ 静态参数和动态参数.延迟参数 ⑥ V$PARAMETER视图的每列含义(重点) Tips: ① 

Oracle RMAN Catalog和Nocatalog有什么区别

nocatalog方式:用control file作为catalog,每一次备份都要往控制文件里面写好多备份信息,控制文件里面会有越来越多的备份信息,即RMAN的 备份信息写在本地控制文件里面. catalog方式:必须要首先要创建目录备份数据库(catalog,也称知识库),建立恢复目录,即数据库的备份信息写到恢复目录里面. 当通过rman nocatalog方式备份Oracle数据库,Oracle使用controlfile存放RMAN的备份信息.因此,当使用Rman nocatalog方式备

Oracle参数的修改

v$parameter Oracle参数的修改比较复杂,有些参数是可以在session级别修改,有些则必须在system级别修改, 有些参数修改后马上生效(不需要重启),有些参数则必须重启才能生效,那么我们如何知道这些信息 呢?可以查询动态视图v$parameter中的两列(如下所示)得知: 1. ISSES_MODIFIABLE 指示参数是否可以在session级别( Alter session set )修改(True or False) 2. ISSYS_MODIFIABLE 指示参数是否

java应用-oracle数据库和mysql数据库分页查询区别?

问题描述 oracle数据库和mysql数据库分页查询区别? oracle数据库和mysql数据库分页查询有什么区别?有何不同?具体,求教! 解决方案 oracle数据库分页用到rownum大小截取.mysql用limit.用法不一样 解决方案二: 语法上略有差别,但是大同小异,oracle借助行号函数来实现.http://blog.sina.com.cn/s/blog_8604ca230100vro9.html MySQL有limit函数http://qimo601.iteye.com/blo

Oracle 参数文件

--======================== -->Oracle 参数文件 --======================== /* 参数文件(10g中的参数文件)     主要用来记录数据库的配置文件,在数据库启动时,Oracle读取参数文件,并根据参数文件中的参数设置来配置数据库.     如内存池的分配,允许打开的进程数和会话数等.   两类参数文件:     pfile:文本文件的参数文件,可以使用vi,vim等编辑器修改,文件名通常为init<sid>.ora    

Oracle 参数文件(spfile和pfile)

 Oracle 参数文件(spfile和pfile) --======================== -->Oracle 参数文件 --======================== /* 参数文件(10g中的参数文件)     主要用来记录数据库的配置文件,在数据库启动时,Oracle读取参数文件,并根据参数文件中的参数设置来配置数据库.     如内存池的分配,允许打开的进程数和会话数等.   两类参数文件:     pfile:文本文件的参数文件,可以使用vi,vim等编辑器修改,

oracle中union和union all的区别

经常写sql的同学可能会用到union和union all这两个关键词, 可能你知道使用它们可以将两个查询的结果集进行合并, 那么二者有什么区别呢? 下面我们就简单的分析下. [ 比较 ] union: 对两个结果集进行并集操作, 不包括重复行,相当于distinct, 同时进行默认规则的排序; union all: 对两个结果集进行并集操作, 包括重复行, 即所有的结果全部显示, 不管是不是重复; 下面我们举一个简单的例子来证明上面的结论: 1. 准备数据: drop table studen

oracle参数文件的修改及sga pga参数的修改

1.参数文件的设置 (1)查看动态参数文件 select * from sys.props$ wherename='NLS_CHARACTERSET'; 动态参数文件:spfile:其中的动态参数修改能够立即生效 (2)修改动态参数 alter system set 参数=值 scope=<memory><spfile><both> #memory 仅当前生效:(适用于动态参数) #spfile: 当前不生效:重启后生效:(适用于动态,静态参数) #both: 当前生效