/**PageBeginHtml Block Begin **/ /***自定义返回顶部小火箭***/ /*生成博客目录的JS 开始*/ /*生成博客目录的JS 结束*/

【Shared Server Mode】测试调整shared_servers参数对数据库的影响

本文来源于:secooler  的 《【Shared Server Mode】测试调整shared_servers参数对数据库的影响

关于Shared Server模式的配置方法请参见文章《【Shared Server Mode】“专有服务器模式”调整为“共享服务器模式
  shared_servers参数是个可以动态调整的参数,我们观察一下这个参数调整对系统后台Shared Server进程启动的影响以及对数据库的影响。

1.调整shared_servers参数之前后台Shared Server进程启动情况

  1 sys@secdb> show parameter shared_servers
  2 NAME                                     TYPE                 VALUE
  3 ---------------------------------------- -------------------- -----------
  4 max_shared_servers                       integer
  5 shared_servers                           integer              0
  6 secdb@secdb1 /home/oracle$ ps -ef | grep ora_s0 | grep -v grep
  7 #此处没有任何返回内容,表明服务器上没有启动任何Shared Server进程


2.在数据库中调整shared_servers参数调整为10


  1 sys@secdb> alter system set shared_servers=10;
  2 System altered.
  3 sys@secdb> show parameter shared_servers
  4 NAME                                     TYPE                 VALUE
  5 ---------------------------------------- -------------------- -----------
  6 max_shared_servers                       integer
  7 shared_servers                           integer              10


3.调整shared_servers参数之后后台Shared Server进程启动情况

  1 secdb@secdb1 /home/oracle$ ps -ef | grep ora_s0 | grep -v grep
  2 oracle    1596     1  0 13:41 ?        00:00:00 ora_s000_secdb
  3 oracle    1598     1  0 13:41 ?        00:00:00 ora_s001_secdb
  4 oracle    1600     1  0 13:41 ?        00:00:00 ora_s002_secdb
  5 oracle    1602     1  0 13:41 ?        00:00:00 ora_s003_secdb
  6 oracle    1604     1  0 13:41 ?        00:00:00 ora_s004_secdb
  7 oracle    1606     1  0 13:41 ?        00:00:00 ora_s005_secdb
  8 oracle    1608     1  0 13:41 ?        00:00:00 ora_s006_secdb
  9 oracle    1610     1  0 13:41 ?        00:00:00 ora_s007_secdb
 10 oracle    1613     1  0 13:41 ?        00:00:00 ora_s008_secdb
 11 oracle    1615     1  0 13:41 ?        00:00:00 ora_s009_secdb


可见,此时后台进程随即启动了10个后台Shared Server进程。

4.再次将shared_servers参数调整为0,观察后台Shared Server进程是否会自动关闭


  1 sys@secdb> alter system set shared_servers=0;
  2 System altered.
  3 
  4 
  5 # 调整参数过程中可以使用如下脚本监控后台Shared Server进程启动情况
  6 $ while :; do ps -ef | grep ora_s0 | grep -v grep; sleep 1; done
  7 # 观察大约结果16秒左右的时间,后台Shared Server进程同时退出,不再有输出信息。
  8 


5.试问,这个参数可以无限的调大么


答案当然是否定的!这里与数据库最大可以启动的最大进程数相关,也就是与数据库processes参数的大小相关。数据库的总启动进程数不能超过processes参数值。


  1 #测试如下。
  2 #1)尝试将shared_servers调整为200
  3 SQL> alter system set shared_servers=200;
  4 System altered.
  5 #2)当系统后台Shared Server进程陆续启动到ora_s099_secdb时,alert警告日志中记录了如下错误
  6 Sun May 22 17:59:11 2011
  7 Process S174 died, see its trace file
  8 failed to start shared server, er=0
  9 #3)重启数据库时的报错信息
 10 sys@secdb> shutdown immediate;
 11 Database closed.
 12 Database dismounted.
 13 ORACLE instance shut down.
 14 sys@secdb> startup;
 15 ORA-24324: service handle not initialized
 16 ORA-24323: value not allowed
 17 ORA-00020: maximum number of processes (%s) exceeded
 18 #4)此时alert警告日志内容
 19 Sun May 22 18:05:42 2011
 20 Process S185 died, see its trace file
 21 failed to start shared server, er=0
 22 #这里提示的内容是当Oracle尝试启动第185个Shared Server进程时出现了错误。
 23 #5)此时查看一下服务器后台进程的总数
 24 secdb@secdb1 /home/oracle$ ps -ef | grep ora_ | grep -v secgc | grep -v grep | wc -l
 25 198
 26 #此时与secdb实例有关的数据库后台进程已经启动了198个。
 27 #导致此故障的原因浮出水面:此时数据库实例中processes参数设置的值是200,当Shared Server进程过大导#致总进程数超过了这个限制,最终导致了这个故障的发生。

6.故障处理方法


故障处理策略:通过调整pfile间接调整spfile的方法调整错误设置的shared_servers参数内容。

  1 #1)此时尝试immediate方式停止数据库是无法完成的
  2 secdb@secdb1 /home/oracle$ sqlplus / as sysdba
  3 SQL*Plus: Release 10.2.0.1.0 - Production on Sun May 22 18:22:06 2011
  4 Copyright (c) 1982, 2005, Oracle.  All rights reserved.
  5 Connected.
  6 NotConnected@> shutdown immediate;
  7 ORA-24324: service handle not initialized
  8 ORA-24323: value not allowed
  9 ORA-00020: maximum number of processes (%s) exceeded
 10 #2)只能通过abort方式强制终止数据库实例
 11 secdb@secdb1 /home/oracle$ sqlplus / as sysdba
 12 SQL*Plus: Release 10.2.0.1.0 - Production on Sun May 22 18:25:55 2011
 13 Copyright (c) 1982, 2005, Oracle.  All rights reserved.
 14 Connected.
 15 NotConnected@> shutdown abort;
 16 ORACLE instance shut down.
 17 #3)连接到数据库生成pfile
 18 secdb@secdb1 /home/oracle$ sqlplus / as sysdba
 19 SQL*Plus: Release 10.2.0.1.0 - Production on Sun May 22 18:32:02 2011
 20 Copyright (c) 1982, 2005, Oracle.  All rights reserved.
 21 Connected to:
 22 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
 23 With the Partitioning, OLAP and Data Mining options
 24 sys@secdb> create pfile from spfile;
 25 File created.
 26 #4)调整pfile中错误设置的参数
 27 secdb@secdb1 /home/oracle$ vi $ORACLE_HOME/dbs/initsecdb.ora
 28 ……省略其他内容……
 29 *.processes=200
 30 ……省略其他内容……
 31 *.shared_servers=200
 32 ……省略其他内容……
 33 将上面的shared_servers参数调整为“0”
 34 #5)生成spfile并启动数据库
 35 secdb@secdb1 /home/oracle$ sqlplus / as sysdba
 36 SQL*Plus: Release 10.2.0.1.0 - Production on Sun May 22 18:38:19 2011
 37 Copyright (c) 1982, 2005, Oracle.  All rights reserved.
 38 Connected to an idle instance.
 39 NotConnected@> create spfile from pfile;
 40 File created.
 41 NotConnected@> startup;
 42 ORACLE instance started.
 43 Total System Global Area  314572800 bytes
 44 Fixed Size                  1219184 bytes
 45 Variable Size             104859024 bytes
 46 Database Buffers          205520896 bytes
 47 Redo Buffers                2973696 bytes
 48 Database mounted.
 49 Database opened.
 50 #故障处理完毕。


7.小结


  本文给出了测试调整shared_servers参数对数据库的影响,重点给出了由于shared_servers参数设置过大导致数据库无法启动的故障。对数据库的管理和维护是一个系统工程,需要DBA全面衡量和探究后给出优化策略。
Good luck.
secooler
11.05.22
-- The End --

posted @ 2017-10-21 16:00  一品堂.技术学习笔记  阅读(700)  评论(0编辑  收藏  举报