ITPub博客

首页 > 数据库 > Oracle > [20231013]共享服务器的问题.txt

[20231013]共享服务器的问题.txt

原创 Oracle 作者:lfree 时间:2023-10-23 21:10:32 0 删除 编辑

[20231013]共享服务器的问题.txt

--//前一段时间遇到1台数据库服务器机器无法登陆的问题,出现ora-04030错误。
--//参考链接:[20230809]ora-04030问题分析整理.txt
--//问题在于中间件配置的连接串没有(SERVER = DEDICATED)设置,导致全部连接使用共享模式,而估计10g版本存在某种bug,
--//导致共享服务的s00X进程占用的内存空间.而且还使用了大量的swap内存.

--//主要问题还是dispatchers配置有问题,我当时没有修改这个参数,仅仅探究看看。
SYS@192.168.100.41:1521/icare> @ ver1
PORT_STRING         VERSION    BANNER
------------------- ---------- ----------------------------------------------------------------
x86_64/Linux 2.4.xx 10.2.0.4.0 Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi

SYS@192.168.100.41:1521/icare> show parameter disp
PARAMETER_NAME   TYPE     VALUE
---------------- -------- ---------------
dispatchers      string   (PROTOCOL=TCP)
max_dispatchers  integer
--//奇怪,dispatchers参数没有任何配置(service=.....)
--//我当时想因为dispatchers参数没有显式写(servie=....),而连接串没有(SERVER = DEDICATED)设置,导致全部连接使用共享模式。
--//我当时的做法就是要同事修改连接串,加入(SERVER = DEDICATED),杀死全部s00N相关进程。

--//今天例行检查,我发现还是有一些连接使用共享服务模式。我必须测试dispatchers加入(servie=icareXDB)后,是否可以彻底解决问
--//题。测试不能在生产系统做这项工作,在测试环境演示看看。

1.环境:
SYS@book> @ ver1
PORT_STRING         VERSION    BANNER
------------------- ---------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

SYS@book> show parameter dispatchers
PARAMETER_NAME   TYPE      VALUE
---------------- --------- --------------------------------
dispatchers      string    (PROTOCOL=TCP) (SERVICE=bookXDB)
max_dispatchers  integer

SYS@book> show parameter service
PARAMETER_NAME TYPE    VALUE
-------------- ------- ---------------
service_names  string  BOOK, BOOKSHARE

$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 23-OCT-2023 10:12:54

Copyright (c) 1991, 2013, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=0.0.0.0)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                24-APR-2023 08:58:39
Uptime                    182 days 1 hr. 14 min. 15 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/11.2.0.4/dbhome_1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/product/11.2.0.4/dbhome_1/network/log/listener.log
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service "BOOKSHARE" has 1 instance(s).
  Instance "book", status READY, has 1 handler(s) for this service...
Service "Book" has 2 instance(s).
  Instance "book", status UNKNOWN, has 1 handler(s) for this service...
  Instance "book", status READY, has 1 handler(s) for this service...
Service "bookXDB" has 1 instance(s).
  Instance "book", status READY, has 1 handler(s) for this service...
The command completed successfully

$ rlsql -s -l scott/book@127.0.0.1:1521/book  @ spid <<<quit
 SID SERIAL# PROCESS SERVER    SPID       PID  P_SERIAL# C50
---- ------- ------- --------- ------ ------- ---------- --------------------------------------------------
   1    1253 11376   DEDICATED 11381       24        158 alter system kill session '1,1253' immediate;

$ rlsql -s -l   scott/book@127.0.0.1:1521/book:shared @spid<<<quit
ERROR:
ORA-12520: TNS:listener could not find available handler for requested type of server
SP2-0751: Unable to connect to Oracle.  Exiting SQL*Plus

--//测试开始前使用ezconnect连接,服务名book缺省连接模式是SERVER=DEDICATED,如果指定共享模式shared并不支持.

2.开始测试:
SYS@book> alter system set dispatchers='(PROTOCOL=TCP)' scope=memory;
System altered.

$ rlsql -s -l scott/book@127.0.0.1:1521/book  @ spid <<<quit
 SID SERIAL# PROCESS SERVER    SPID       PID  P_SERIAL# C50
---- ------- ------- --------- ------ ------- ---------- --------------------------------------------------
 341      11 11386   SHARED    51628       20          1 alter system kill session '341,11' immediate;
--//你可以现在使用服务名book采用ezconnect连接,缺省的连接模式是SERVER=SHARED.我甚至没有重启监听.
--//也就是任何服务名(除了bookXDB)支持两者连接模式,如果使用ezconnect连接不指定连接模式,优先尝试SHARED模式,不行才是
--//DEDICATED模式.

--//你可以指定连接模式DEDICATED.
$ rlsql -s -l scott/book@127.0.0.1:1521/book:DEDICATED  @ spid <<<quit
 SID SERIAL# PROCESS SERVER    SPID       PID  P_SERIAL# C50
---- ------- ------- --------- ------ ------- ---------- --------------------------------------------------
   1    1255 11403   DEDICATED 11408       24        159 alter system kill session '1,1255' immediate;

--//这样也就模拟生产系统看到的情况,在dispatchers='(PROTOCOL=TCP)'的情况下,普通的服务名配置连接支持专用连接和共享连接模
--//式。

3.继续测试:

$ rlsql -s -l   scott/book@127.0.0.1:1521/bookshare @spid<<<quit
 SID SERIAL# PROCESS SERVER    SPID       PID  P_SERIAL# C50
---- ------- ------- --------- ------ ------- ---------- --------------------------------------------------
 341      25 11504   SHARED    51628       20          1 alter system kill session '341,25' immediate;
--//这是我写在参数service_names的服务名也支持.

$ rlsql -s -l   scott/book@127.0.0.1:1521/bookXDB @spid<<<quit
ERROR:
ORA-12516: TNS:listener could not find available handler with matching protocol stack
SP2-0751: Unable to connect to Oracle.  Exiting SQL*Plus

$ rlsql -s -l   scott/book@127.0.0.1:1521/bookxdb @spid<<<quit
ERROR:
ORA-12516: TNS:listener could not find available handler with matching protocol stack
SP2-0751: Unable to connect to Oracle.  Exiting SQL*Plus
--//但是不支持bookXDB服务名.

--//尝试重启监听看看。
$ lsnrctl stop ; lsnrctl start
$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 23-OCT-2023 10:36:15
Copyright (c) 1991, 2013, Oracle.  All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=0.0.0.0)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                23-OCT-2023 10:36:01
Uptime                    0 days 0 hr. 0 min. 14 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/11.2.0.4/dbhome_1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/product/11.2.0.4/dbhome_1/network/log/listener.log
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service "BOOKSHARE" has 1 instance(s).
  Instance "book", status READY, has 2 handler(s) for this service...
Service "Book" has 2 instance(s).
  Instance "book", status UNKNOWN, has 1 handler(s) for this service...
  Instance "book", status READY, has 2 handler(s) for this service...
Service "bookXDB" has 1 instance(s).
  Instance "book", status READY, has 0 handler(s) for this service...
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The command completed successfully
--//注册的服务名bookXDB是存在,但是无论怎么,都无法通过bookxdb连上服务,可以注意一个细节handler=0.前面是1,也就是没有获得句
--//柄.(我估计如果我重启数据库,这项内容应该不存在,明天补充测试看看!!)

SYS@book> select * from V$SERVICES order by 1;
SERVICE_ID NAME            NAME_HASH NETWORK_NAME CREATION_DATE       CREATION_DATE_HASH GOAL D AQ_ CLB_G
---------- -------------- ---------- ------------ ------------------- ------------------ ---- - --- -----
         1 SYS$BACKGROUND  165959219              2013-08-24 11:37:40                  0 NONE N NO  SHORT
         2 SYS$USERS      3427055676              2013-08-24 11:37:40                  0 NONE N NO  SHORT
         4 BOOKSHARE      3041418781 BOOKSHARE    2023-10-18 08:49:31         1313067792 NONE N NO  LONG
         5 bookXDB        1843642519 bookXDB      2015-11-24 09:11:13         3631320093 NONE N NO  LONG
         6 book           1062280681 book         2015-11-24 09:11:13         3631320093 NONE N NO  LONG

SYS@book> alter system set dispatchers='(PROTOCOL=TCP) (SERVICE=bookXDB)' scope=memory;
System altered.

$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 23-OCT-2023 10:44:01

Copyright (c) 1991, 2013, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=0.0.0.0)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                23-OCT-2023 10:37:31
Uptime                    0 days 0 hr. 6 min. 29 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/11.2.0.4/dbhome_1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/product/11.2.0.4/dbhome_1/network/log/listener.log
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service "BOOKSHARE" has 1 instance(s).
  Instance "book", status READY, has 1 handler(s) for this service...
Service "Book" has 2 instance(s).
  Instance "book", status UNKNOWN, has 1 handler(s) for this service...
  Instance "book", status READY, has 1 handler(s) for this service...
Service "bookXDB" has 1 instance(s).
  Instance "book", status READY, has 1 handler(s) for this service...
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The command completed successfully

$ rlsql -s -l   scott/book@127.0.0.1:1521/bookxdb @ spid <<<quit
 SID    SERIAL# PROCESS SERVER    SPID       PID  P_SERIAL# C50
---- ---------- ------- --------- ------ ------- ---------- --------------------------------------------------
 341         37 11754   SHARED    51628       20          1 alter system kill session '341,37' immediate;

$ rlsql -s -l   scott/book@127.0.0.1:1521/bookxdb:DEDICATED @ spid <<<quit
ERROR:
ORA-12520: TNS:listener could not find available handler for requested type of server
SP2-0751: Unable to connect to Oracle.  Exiting SQL*Plus
--//bookxdb 服务无法使用DEDICATED模式连接.

$ rlsql -s -l   scott/book@127.0.0.1:1521/book @ spid <<<quit
 SID    SERIAL# PROCESS SERVER    SPID       PID  P_SERIAL# C50
---- ---------- ------- --------- ------ ------- ---------- --------------------------------------------------
   1       1275 11786   DEDICATED 11791       24        166 alter system kill session '1,1275' immediate;

$ rlsql -s -l   scott/book@127.0.0.1:1521/book:DEDICATED @ spid <<<quit
 SID    SERIAL# PROCESS SERVER    SPID       PID  P_SERIAL# C50
---- ---------- ------- --------- ------ ------- ---------- --------------------------------------------------
   1       1277 11794   DEDICATED 11799       24        167 alter system kill session '1,1277' immediate;

$ rlsql -s -l   scott/book@127.0.0.1:1521/book:shared @spid <<<quit
ERROR:
ORA-12520: TNS:listener could not find available handler for requested type of server
SP2-0751: Unable to connect to Oracle.  Exiting SQL*Plus

$ rlsql -s -l   scott/book@127.0.0.1:1521/book:SHARED @spid <<<quit
ERROR:
ORA-12520: TNS:listener could not find available handler for requested type of server
SP2-0751: Unable to connect to Oracle.  Exiting SQL*Plus
--//可以看出book服务现在仅仅支持DEDICATED连接模式.

4.总结:
--//很简单就是修改dispatchers参数等于'(PROTOCOL=TCP) (SERVICE=bookXDB)'.指定专门的服务供共享连接使用.
--//dispatchers不写(SERVICE=bookXDB)的话,其它服务名支持两种连接模式.
--//再次强调ezconnect如果不指定连接模式的话,优先选择共享连接模式,如果它支持的话。
--//我以前提到尽量避免1个服务名支持两者连接模式的情况,这样非常难以维护.

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-2990577/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7970878