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.
ORACLE参数max_shared_servers空值与零的区别的更多相关文章
- Oracle中执行存储过程call和exec区别
Oracle中执行存储过程call和exec区别 在sqlplus中这两种方法都可以使用: exec pro_name(参数1..); call pro_name(参数1..); 区别: 1. 但是e ...
- 【体系结构】Oracle参数介绍
[体系结构]Oracle参数介绍 1 BLOG文档结构图 2 前言部分 2.1 导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩ ...
- 各种oracle参数查询语句
各种oracle参数查询语句 1.show parameter:--显示各个系统参数配置 2.select * from v$parameter;--显示各个系统参数配置 2.show paramet ...
- Oracle中Union与Union All的区别(适用多个数据库)
Oracle中Union与Union All的区别(适用多个数据库) 如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字.union(或 ...
- Oracle中rank() over, dense_rank(), row_number() 的区别
摘自:http://www.linuxidc.com/Linux/2015-04/116349.htm Oracle 中 rank() over, dense_rank(), row_number() ...
- oracle的存储过程和函数有什么区别?
Oracle中的函数与存储过程的区别: A:函数必须有返回值,而过程没有. B:函数可以单独执行.而过程必须通过execute执行. C:函数可以嵌入到SQL语句中执行.而过程不行. 其实我 ...
- oracle唯一索引与普通索引的区别和联系以及using index用法
oracle唯一索引与普通索引的区别和联系 区别:唯一索引unique index和一般索引normal index最大的差异是在索引列上增加一层唯一约束.添加唯一索引的数据列可以为空,但是只要尊在数 ...
- Oracle中Blob和Clob类型的区别与操作
Oracle中Blob和Clob类型 1.Oracle中Blob和Clob类型的区别 BLOB和CLOB都是大字段类型,BLOB是按二进制来存储的,而CLOB是可以直接存储文字的.其实两个是可以互换的 ...
- [Oracle] 参数修改小结
v$parameter Oracle参数的修改比较复杂,有些参数是可以在session级别修改,有些则必须在system级别修改,有些参数修改后马上生效(不需要重启),有些参数则必须重启才能生效,那么 ...
随机推荐
- 用JAVA实现插值查询的方法(算近似值,区间求法)
插值查询:如果有这样一张表,有一列叫水位,有一列叫库容,比如下面的图. 我现在想做这么一件事情:对于这个测站而言,当我输入某一个水位或者库容的时候,想要查询到对应的水位或者库容呢? 而这个值不一定是存 ...
- C#异常处理的几个原则
转载来自:http://www.oecp.cn/hi/LiuBP/blog/2312 在开发应用程序的时候,异常处理是非常的重要的,我找到一些异常处理准则,将它共享出来,如有不同意见,欢迎提出来一起探 ...
- 非对称技术栈实现AES加密解密
非对称技术栈实现AES加密解密 正如前面的一篇文章所述,https协议的SSL层是实现在传输层之上,应用层之下,也就是说在应用层上看到的请求还是明码的,对于某些场景下要求这些http请求参数是非可读的 ...
- SQL 优化总结
SQL 优化总结 (一)SQL Server 关键的内置表.视图 1. sysobjects SELECT name as '函数名称',xtype as XType FROM s ...
- 在DirectShow中支持DXVA 2.0(Supporting DXVA 2.0 in DirectShow)
这几天在做dxva2硬件加速,找不到什么资料,翻译了一下微软的两篇相关文档.并准备记录一下用ffmpeg实现dxva2,将在第三篇写到.这是第二篇.,英文原址:https://msdn.microso ...
- ABP之模块分析
本篇作为我ABP介绍的第三篇文章,这次想讲下模块的,ABP文档已经有模块这方面的介绍,但是它只讲到如何使用模块,我想详细讲解下它模块的设计思路. ABP 框架提供了创建和组装模块的基础,一个模块能够依 ...
- 学习.NET是因为热爱 or 兴趣 or 挣钱?
看到最近园子里掀起了“.NET快不行了”.“.NET工资太低了”.“转行做XX”等一系列之风,不由得想说点什么,我只是基于自己的观点,你认同或者不认同,我就是这样认为,无所谓对与错,写文章就是为了交流 ...
- java-阻塞队列
阻塞队列与普通队列的区别在于,当队列是空的时,从队列中获取元素的操作将会被阻塞,或者当队列是满时,往队列里添加元素的操作会被阻塞.试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其他的线程往空的队列 ...
- 我与ADO.NET二三事
天气渐冷,闲来无事就把业余时间自己使用的数据访问库凉一凉.这个库本人自己使用了2年多,主要用于个人学习时需要操作数据库时使用,非组织和商业性质的使用.记得上学的时候,在网络上看到SqlServer ...
- Entity Framework 中的Code First 中引入数据库函数
1,在项目中添加CodeFirstStoreFunctions包: Install-Package EntityFramework.CodeFirstStoreFunctions 2,注册注册函数,F ...


