[20181128]toad连接数据库的问题.txt
--//昨天下午,使用toad连接数据库,出现一些奇怪的问题,做一个记录.
--//有点不理解:
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
NAME TYPE VALUE
--------------- ------- -------------------------------------
dispatchers string (PROTOCOL=TCP) (SERVICE=book,bookXDB)
max_dispatchers integer
--//共享服务器支持服务名book.另外我以前多次提到使用ezconnect连接模式,优先使用共享服务器模式.
--//测试连接脚本:
$ cat spid.sql
SELECT s.sid
,s.serial#
,s.process
,s.server
,p.spid
,p.pid
,p.serial# p_serial#
, 'alter system kill session '''
|| s.sid
|| ','
|| s.serial#
|| ''''
|| ' immediate;'
c50
FROM v$session s, v$process p
WHERE s.sid IN (SELECT sid
FROM v$mystat
WHERE ROWNUM = 1)
AND s.paddr = p.addr;
$ rlsql scott/book@127.0.0.1:1521/book
SCOTT@127.0.0.1:1521/book> @ spid
SID SERIAL# PROCESS SERVER SPID PID P_SERIAL# C50
--- ------- ------------------------ --------- ------ ------- ---------- --------------------------------------------------
262 227 25399 SHARED 11840 20 1 alter system kill session '262,227' immediate;
--//SERVER=SHARED.除非明确指定DEDICATED.
$ rlsql scott/book@127.0.0.1:1521/book:DEDICATED
SCOTT@127.0.0.1:1521/book:DEDICATED> @ spid
SID SERIAL# PROCESS SERVER SPID PID P_SERIAL# C50
---------- ---------- ------------------------ --------- ------ ------- ---------- --------------------------------------------------
274 1351 25406 DEDICATED 25408 21 246 alter system kill session '274,1351' immediate;
--//SERVER=DEDICATED.
2.测试:
--//我个人喜欢使用ezconnect连接数据库,这样的就是不用配置修改tnsnames.ora文件.
--//采用如图方式连接数据库,执行spid.sql脚本内容:
SID|SERIAL#|PROCESS|SERVER|SPID|PID|P_SERIAL#|C50
262|229|7880:7884|SHARED|11840|20|1|alter system kill session '262,229' immediate;
--//可以看到连接模式共享服务器模式server=shared.
--//但是我如果采用sid方式连接,执行spid.sql脚本内容:
SID|SERIAL#|PROCESS|SERVER|SPID|PID|P_SERIAL#|C50
28|875|7880:7884|DEDICATED|25451|26|154|alter system kill session '28,875' immediate;
--//可以看到连接模式专用服务器模式server=DEDICATED.
--//登录后,从toad界面提示栏看不出两者的不同,显示的都是SCOTT@192.168.100.78:1521/book.
--//在toad下还有一种连接方式,选中TNS,直接输入连接命令.比如:192.168.100.78:1521/book,执行spid.sql脚本内容:
SID|SERIAL#|PROCESS|SERVER|SPID|PID|P_SERIAL#|C50
28|877|7880:7884|DEDICATED|25499|26|155|alter system kill session '28,877' immediate;
--//可以看到连接模式专用服务器模式server=DEDICATED.
--//按照前面的测试,这样选择的模式后面的book应该是sid,而不是服务名.
3.再通过另外的方式验证:
--//在tnsnames.ora配置如下:
78S =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.78)(PORT = 1521))
)
(SDU = 32768)
(CONNECT_DATA =
# (SERVER = SHARED)
# (SERVICE_NAME = book)
(SID = book)
)
)
--//使用该连接串登录.执行spid.sql:
SID|SERIAL#|PROCESS|SERVER|SPID|PID|P_SERIAL#|C50
274|1353|7880:7884|DEDICATED|25539|21|247|alter system kill session '274,1353' immediate;
--//连接模式专用服务器模式server=DEDICATED.
--//这也充分说明使用sid,连接模式优先使用专用模式.
--//通过sqlplus验证:
R:\>sqlplus scott/book@78s
SCOTT@78s> @ spid
SID SERIAL# PROCESS SERVER SPID PID P_SERIAL# C50
---------- ---------- ------------------------ --------- -------------------- ------- ---------- --------------------------------------------------
41 311 7840:6436 DEDICATED 25551 27 137 alter system kill session '41,311' immediate;
--//连接模式专用服务器模式server=DEDICATED.
4.修改tnsnames.ora配置如下:
78S =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.78)(PORT = 1521))
)
(SDU = 32768)
(CONNECT_DATA =
(SERVER = SHARED)
# (SERVICE_NAME = book)
(SID = book)
)
)
--//明确指明SERVER = SHARED.
R:\>sqlplus scott/book@78s
SCOTT@78s> @ spid
SID SERIAL# PROCESS SERVER SPID PID P_SERIAL# C50
---------- ---------- ------------------------ --------- -------------------- ------- ---------- --------------------------------------------------
263 125 8144:276 SHARED 11840 20 1 alter system kill session '263,125' immediate;
--//连接模式共享服务器模式server=SHARED.
--//在toad下使用连接串78s测试.
SID|SERIAL#|PROCESS|SERVER|SPID|PID|P_SERIAL#|C50
262|265|7880:7884|SHARED|11840|20|1|alter system kill session '262,265' immediate;
--//连接模式共享服务器模式server=SHARED.
--//可以做一个小结:
--//如果连接配置中使用sid,优先选择专用模式server=DEDICATED.除非明确指明连接模式(SERVER = SHARED).
5.问题来了:
--//如何在toad下使用ezconnect连接,连接模式是专用模式呢?因为缺省连接模式是共享服务器模式.
--//我的测试目前做不到.
--//另外sys用户连接数据库,必须是专用模式,否则无法连接数据库.而这样使用ezconnect模式无法连接数据库,必须使用sid模式.这也是
--//我昨天遇到的情况.
--//还有一个问题toad使用命令行方式,写入的连接串实际上使用sid方式.
%toad126% -min -max -c "scott/book@192.168.100.78:1521/book"
SID,SERIAL#,PROCESS,SERVER,SPID,PID,P_SERIAL#,C50
14,1485,7588:272,DEDICATED,25706,25,72,alter system kill session '14,1485' immediate;
--//连接成功,可以推测相当于前面选中tns登录.
--//这也是我遇到为什么执行如下可以连接数据库的原因,这里后面的book是指sid.
%toad126% -min -max -c "sys/oracle@192.168.100.78:1521/book as sysdba"
--//注:toad126是环境变量
R:\>set toad126
toad126="E:\Program Files\Dell\Toad for Oracle 12.6\Toad.exe"
--//最后感觉在生产系统,修改参数dispatchers='(PROTOCOL=TCP) (SERVICE=book,bookXDB)',不是太建议.
--//另外单独建立服务名提供给共享服务器使用.这里面的坑实在太多.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/267265/viewspace-2221915/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/267265/viewspace-2221915/