[20190201]测试服务名支持静态和动态注册的情况下优先选择那个.txt
--//测试服务名支持静态和动态注册的情况下优先选择那个,测试看看.
1.环境:
SCOTT@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 service
NAME TYPE VALUE
------------- ------ ---------------
service_names string BOOK, BOOKSHARE
$ grep -v "^#" listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SDU=32767)
(GLOBAL_DBNAME = booK)
(ARGV0=myapp0)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0.4/dbhome_1)
(SID_NAME=book)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(ARGV0=LLLLLL)(HOST = 0.0.0.0)(PORT = 1521)(ARGV0=KKKKK))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SECURE_REGISTER_LISTENER = (TCP)
ADR_BASE_LISTENER = /u01/app/oracle
DIAG_ADR_ENABLED_LISTENER=OFF
USE_NS_PROBES_FOR_DCD=true
INBOUND_CONNECT_TIMEOUT_LISTENER=10
--//检查监听服务状态:
$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 01-FEB-2019 09:33:53
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(ARGV0=LLLLLL)(HOST=0.0.0.0)(PORT=1521)(ARGV0=KKKKK)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date 01-FEB-2019 09:30:51
Uptime 0 days 0 hr. 3 min. 1 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 2 handler(s) for this service...
--//BOOK服务名支持静态与动态注册. UNKNOW表示使用静态注册.
Service "bookXDB" has 1 instance(s).
Instance "book", status READY, has 1 handler(s) for this service...
The command completed successfully
$ tnsping book
TNS Ping Utility for Linux: Version 11.2.0.4.0 - Production on 01-FEB-2019 09:41:27
Copyright (c) 1997, 2013, Oracle. All rights reserved.
Used parameter files:
/u01/app/oracle/product/11.2.0.4/dbhome_1/network/admin/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.78)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = book)))
OK (0 msec)
2.测试一:
--//执行如下:
$ seq 150 | xargs -i{} echo "sqlplus -s -l scott/book@book <<< 'host sleep 20' &" | bash &
$ lsnrctl service
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 01-FEB-2019 09:39:00
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(ARGV0=LLLLLL)(HOST=0.0.0.0)(PORT=1521)(ARGV0=KKKKK)))
Services Summary...
Service "BOOKSHARE" has 1 instance(s).
Instance "book", status READY, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:302 refused:0 state:ready
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LOCAL SERVER
Service "booK" has 2 instance(s).
Instance "book", status UNKNOWN, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:0 refused:0
LOCAL SERVER
Instance "book", status READY, has 2 handler(s) for this service...
Handler(s):
"D000" established:0 refused:0 current:0 max:1022 state:ready
DISPATCHER <machine: xxzzzdg4, pid: 49011>
(ADDRESS=(PROTOCOL=tcp)(HOST=xxzzzdg4.com)(PORT=52751))
"DEDICATED" established:302 refused:0 state:ready
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LOCAL SERVER
Service "bookXDB" has 1 instance(s).
Instance "book", status READY, has 1 handler(s) for this service...
Handler(s):
"D000" established:0 refused:0 current:0 max:1022 state:ready
DISPATCHER <machine: xxzzzdg4, pid: 49011>
(ADDRESS=(PROTOCOL=tcp)(HOST=xxzzzdg4.com)(PORT=52751))
The command completed successfully
--//再次执行:
$ seq 150 | xargs -i{} echo "sqlplus -s -l scott/book@book <<< 'host sleep 20' &" | bash &
$ lsnrctl service
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 01-FEB-2019 09:42:09
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(ARGV0=LLLLLL)(HOST=0.0.0.0)(PORT=1521)(ARGV0=KKKKK)))
Services Summary...
Service "BOOKSHARE" has 1 instance(s).
Instance "book", status READY, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:452 refused:0 state:ready
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LOCAL SERVER
Service "booK" has 2 instance(s).
Instance "book", status UNKNOWN, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:0 refused:0
LOCAL SERVER
Instance "book", status READY, has 2 handler(s) for this service...
Handler(s):
"D000" established:0 refused:0 current:0 max:1022 state:ready
DISPATCHER <machine: xxzzzdg4, pid: 49011>
(ADDRESS=(PROTOCOL=tcp)(HOST=xxzzzdg4.com)(PORT=52751))
"DEDICATED" established:452 refused:0 state:ready
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LOCAL SERVER
Service "bookXDB" has 1 instance(s).
Instance "book", status READY, has 1 handler(s) for this service...
Handler(s):
"D000" established:0 refused:0 current:0 max:1022 state:ready
DISPATCHER <machine: xxzzzdg4, pid: 49011>
(ADDRESS=(PROTOCOL=tcp)(HOST=xxzzzdg4.com)(PORT=52751))
The command completed successfully
--//注意看下划线,感觉oracle设计不好,无法区分那个服务名连接数据库,服务名BOOKSHARE下也有.
3.测试二:
SYS@book> alter system set service_names=BOOK scope=memory;
System altered.
$ lsnrctl service
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 01-FEB-2019 09:46:50
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(ARGV0=LLLLLL)(HOST=0.0.0.0)(PORT=1521)(ARGV0=KKKKK)))
Services Summary...
Service "booK" has 2 instance(s).
Instance "book", status UNKNOWN, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:0 refused:0
LOCAL SERVER
Instance "book", status READY, has 2 handler(s) for this service...
Handler(s):
"D000" established:0 refused:0 current:0 max:1022 state:ready
DISPATCHER <machine: xxzzzdg4, pid: 49011>
(ADDRESS=(PROTOCOL=tcp)(HOST=xxzzzdg4.com)(PORT=52751))
"DEDICATED" established:0 refused:0 state:ready
LOCAL SERVER
Service "bookXDB" has 1 instance(s).
Instance "book", status READY, has 1 handler(s) for this service...
Handler(s):
"D000" established:0 refused:0 current:0 max:1022 state:ready
DISPATCHER <machine: xxzzzdg4, pid: 49011>
(ADDRESS=(PROTOCOL=tcp)(HOST=xxzzzdg4.com)(PORT=52751))
The command completed successfully
--//执行如下:
$ seq 140 | xargs -i{} echo "sqlplus -s -l scott/book@book <<< 'host sleep 20' &" | bash
$ lsnrctl service
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 01-FEB-2019 09:48:56
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(ARGV0=LLLLLL)(HOST=0.0.0.0)(PORT=1521)(ARGV0=KKKKK)))
Services Summary...
Service "booK" has 2 instance(s).
Instance "book", status UNKNOWN, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:0 refused:0
LOCAL SERVER
Instance "book", status READY, has 2 handler(s) for this service...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Handler(s):
"D000" established:0 refused:0 current:0 max:1022 state:ready
DISPATCHER <machine: xxzzzdg4, pid: 49011>
(ADDRESS=(PROTOCOL=tcp)(HOST=xxzzzdg4.com)(PORT=52751))
"DEDICATED" established:140 refused:0 state:ready
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LOCAL SERVER
Service "bookXDB" has 1 instance(s).
Instance "book", status READY, has 1 handler(s) for this service...
Handler(s):
"D000" established:0 refused:0 current:0 max:1022 state:ready
DISPATCHER <machine: xxzzzdg4, pid: 49011>
(ADDRESS=(PROTOCOL=tcp)(HOST=xxzzzdg4.com)(PORT=52751))
The command completed successfully
--//注意看下划线内容,说明使用动态注册的服务.也就是优先使用动态注册的服务名.再次执行1次:
$ seq 140 | xargs -i{} echo "sqlplus -s -l scott/book@book <<< 'host sleep 20' &" | bash
--//注:前面测试都在本机,这次换1台远程机器测试.
$ lsnrctl service
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 01-FEB-2019 09:52:43
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(ARGV0=LLLLLL)(HOST=0.0.0.0)(PORT=1521)(ARGV0=KKKKK)))
Services Summary...
Service "booK" has 2 instance(s).
Instance "book", status UNKNOWN, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:0 refused:0
LOCAL SERVER
Instance "book", status READY, has 2 handler(s) for this service...
Handler(s):
"D000" established:0 refused:0 current:0 max:1022 state:ready
DISPATCHER <machine: xxzzzdg4, pid: 49011>
(ADDRESS=(PROTOCOL=tcp)(HOST=xxzzzdg4.com)(PORT=52751))
"DEDICATED" established:280 refused:0 state:ready
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LOCAL SERVER
Service "bookXDB" has 1 instance(s).
Instance "book", status READY, has 1 handler(s) for this service...
Handler(s):
"D000" established:0 refused:0 current:0 max:1022 state:ready
DISPATCHER <machine: xxzzzdg4, pid: 49011>
(ADDRESS=(PROTOCOL=tcp)(HOST=xxzzzdg4.com)(PORT=52751))
The command completed successfully
--//测试一样,还可以看出这个记数是累计的.疑问如果远程以sys用户关闭数据库,连接会断开吗?测试看看:
4.继续测试:
d:\tools\sqltemp>sqlplus sys/oracle@78 as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on Fri Feb 1 09:54:56 2019
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SYS@78> @ spid
SID SERIAL# PROCESS SERVER SPID PID P_SERIAL# C50
---------- ---------- ------------------------ --------- -------------------- ------- ---------- --------------------------------------------------
274 5 7896:7780 DEDICATED 53901 21 3 alter system kill session '274,5' immediate;
--//服务端进程号=53901.
$ lsnrctl service
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 01-FEB-2019 09:56:17
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(ARGV0=LLLLLL)(HOST=0.0.0.0)(PORT=1521)(ARGV0=KKKKK)))
Services Summary...
Service "booK" has 2 instance(s).
Instance "book", status UNKNOWN, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:0 refused:0
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LOCAL SERVER
Instance "book", status READY, has 2 handler(s) for this service...
Handler(s):
"D000" established:0 refused:0 current:0 max:1022 state:ready
DISPATCHER <machine: xxzzzdg4, pid: 49011>
(ADDRESS=(PROTOCOL=tcp)(HOST=xxzzzdg4.com)(PORT=52751))
"DEDICATED" established:281 refused:0 state:ready
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LOCAL SERVER
Service "bookXDB" has 1 instance(s).
Instance "book", status READY, has 1 handler(s) for this service...
Handler(s):
"D000" established:0 refused:0 current:0 max:1022 state:ready
DISPATCHER <machine: xxzzzdg4, pid: 49011>
(ADDRESS=(PROTOCOL=tcp)(HOST=xxzzzdg4.com)(PORT=52751))
The command completed successfully
SYS@78> shutdown immediate ;
Database closed.
Database dismounted.
ORACLE instance shut down.
$ lsnrctl service
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 01-FEB-2019 09:57:23
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(ARGV0=LLLLLL)(HOST=0.0.0.0)(PORT=1521)(ARGV0=KKKKK)))
Services Summary...
Service "booK" has 1 instance(s).
Instance "book", status UNKNOWN, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:1 refused:0
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LOCAL SERVER
The command completed successfully
$ ps -ef | grep 5390[1]
--//服务端进程号已经不存在.
--//自动使用静态服务,对比前面静态注册的established:0.现在变成了established:1.
--//如果没有静态服务远程的连接就断开了.
SYS@78> startup
ORACLE instance started.
Total System Global Area 643084288 bytes
Fixed Size 2255872 bytes
Variable Size 205521920 bytes
Database Buffers 427819008 bytes
Redo Buffers 7487488 bytes
Database mounted.
Database opened.
SYS@78> @ spid
SID SERIAL# PROCESS SERVER SPID PID P_SERIAL# C50
---------- ---------- ------------------------ --------- -------------------- ------- ---------- --------------------------------------------------
274 3 7896:7780 DEDICATED 53961 21 2 alter system kill session '274,3' immediate;
--//服务端进程号=53961,已经发生了变化.也就是重新连上数据库.
$ lsnrctl service
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 01-FEB-2019 10:04:17
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(ARGV0=LLLLLL)(HOST=0.0.0.0)(PORT=1521)(ARGV0=KKKKK)))
Services Summary...
Service "BOOKSHARE" has 1 instance(s).
Instance "book", status READY, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:0 refused:0 state:ready
LOCAL SERVER
Service "booK" has 2 instance(s).
Instance "book", status UNKNOWN, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:3 refused:0
LOCAL SERVER
Instance "book", status READY, has 2 handler(s) for this service...
Handler(s):
"DEDICATED" established:0 refused:0 state:ready
LOCAL SERVER
"D000" established:0 refused:0 current:0 max:1022 state:ready
DISPATCHER <machine: xxzzzdg4, pid: 53851>
(ADDRESS=(PROTOCOL=tcp)(HOST=xxzzzdg4.com)(PORT=30696))
Service "bookXDB" has 1 instance(s).
Instance "book", status READY, has 1 handler(s) for this service...
Handler(s):
"D000" established:0 refused:0 current:0 max:1022 state:ready
DISPATCHER <machine: xxzzzdg4, pid: 53851>
(ADDRESS=(PROTOCOL=tcp)(HOST=xxzzzdg4.com)(PORT=30696))
The command completed successfully
4.重新测试进程号相关部分内容:
--//重启数据库,取消service_names=BOOKshare.
SYS@book> alter system set service_names=BOOK scope=memory;
System altered.
SYS@78> @ spid
SID SERIAL# PROCESS SERVER SPID PID P_SERIAL# C50
---------- ---------- ------------------------ --------- -------------------- ------- ---------- ------------------------------------------------
274 9 6732:5724 DEDICATED 54224 21 5 alter system kill session '274,9' immediate;
--//服务端进程号=54224.
$ ps -ef | grep 5422[4]
oracle 54224 1 0 10:21 ? 00:00:00 oraclebook (LOCAL=NO)
# lsof -i -n -P | egrep "^COMMAND|54224"
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
oracle 54224 oracle 13u IPv4 63126287 0t0 TCP 192.168.100.78:1521->192.168.98.6:55485 (ESTABLISHED)
--//192.168.98.6是我的客户端地址.
SYS@78> shutdown immediate ;
Database closed.
Database dismounted.
ORACLE instance shut down.
$ ps -ef | grep 5422[4]
--//服务端进程号已经关闭.
# lsof -i -n -P | egrep "^COMMAND|192.168.98.6:"
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 48871 root 3r IPv4 63057705 0t0 TCP 192.168.100.78:22->192.168.98.6:52323 (ESTABLISHED)
sshd 54021 root 3r IPv4 63126212 0t0 TCP 192.168.100.78:22->192.168.98.6:55150 (ESTABLISHED)
oracle 54302 oracle 12u IPv4 63126300 0t0 TCP 192.168.100.78:1521->192.168.98.6:56266 (ESTABLISHED)
--//关闭数据库后,新启动一个进程重新连接服务器.进程号=54302.
$ ps -ef | grep 5430[2]
oracle 54302 1 0 10:32 ? 00:00:00 myapp0 (DESCRIPTION=(LOCAL=NO)(SDU=32767))
--//我前面监听配置修改参数名0.看前面listener.ora配置.
SYS@78> startup
ORACLE instance started.
Total System Global Area 643084288 bytes
Fixed Size 2255872 bytes
Variable Size 205521920 bytes
Database Buffers 427819008 bytes
Redo Buffers 7487488 bytes
Database mounted.
Database opened.
$ ps -ef | grep 5430[2]
--//进程号=54302已经不存在.
SYS@78> @ spid
SID SERIAL# PROCESS SERVER SPID PID P_SERIAL# C50
---------- ---------- ------------------------ --------- -------------------- ------- ---------- --------------------------------------------------
274 3 6732:5724 DEDICATED 54375 21 2 alter system kill session '274,3' immediate;
--//现在进程号是54375
# lsof -i -n -P | egrep "^COMMAND|192.168.98.6:"
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 48871 root 3r IPv4 63057705 0t0 TCP 192.168.100.78:22->192.168.98.6:52323 (ESTABLISHED)
sshd 54021 root 3r IPv4 63126212 0t0 TCP 192.168.100.78:22->192.168.98.6:55150 (ESTABLISHED)
oracle 54375 oracle 13u IPv4 63126333 0t0 TCP 192.168.100.78:1521->192.168.98.6:56568 (ESTABLISHED)
$ ps -ef | grep 5437[5]
oracle 54375 1 0 10:38 ? 00:00:00 myapp0 (DESCRIPTION=(LOCAL=NO)(SDU=32767))
--//从参数可以看出依旧使用静态注册监听的服务名.
--//测试好乱,也许是快过节的原因.^_^
--//实际上说明一点: 服务名支持静态和动态注册的情况下优先选择动态注册的服务名.
--//我以前测试了服务名支持共享和专用模式的情况下,如果不明确连接模式.(也就是tns连接串不配置SERVER = DEDICATED或者SERVER =SHARED)
--//的情况下优先选择共享模式.
--//我在链接http://blog.itpub.net/267265/viewspace-2558415/=>[20190115]共享服务模式与启动到mount状态.txt 里面提到:
--//从这里说明看出,从安全角度考虑,配置服务名也许最佳的方法就是不要每个服务名支持两种连接模式.
--//静态注册使用服务名最好也与数据库动态的服务名不同.共享模式的服务名也最好分开配置.
--//我曾经遇到的问题.链接如下:
http://blog.itpub.net/267265/viewspace-1797866/
http://blog.itpub.net/267265/viewspace-1443469/
--//第一次遇到我天真认为远程启动都存在这个问题,导致本地sys无法连接数据库.实际上本质问题是监听ORACLE_HOME环境变量里面带有/.
--//这样远程启动数据库,环境变量ORACLE_HOME结尾是带/的.这样本机配置的ORACLE_HOME环境变量不带/的无法连接数据库.
--//这个问题直到第2次出现我才定位问题.
--//实际上这个问题主要在我同事安装配置oracle文档里面监听配置的ORACLE_HOME是带/的,不统一.
--//另外关于服务名同事支持共享和专用模式,我在这个问题吃过许多苦头,我们许多客户端配置连接串不明确连接模式.
--//这也是我个人建议为共享模式单独配置服务名.
--//顺便说一下11.2.0.4.ORACLE_HOME环境变量带斜线的问题已经不在存在.参考连接:
http://blog.itpub.net/267265/viewspace-2055052/
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-2565366/ ,如需转载,请注明出处,否则将追究法律责任。