[20181128]toad连接数据库的问题.txt

来源:这里教程网 时间:2026-03-03 12:16:12 作者:

[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)',不是太建议. --//另外单独建立服务名提供给共享服务器使用.这里面的坑实在太多.

相关推荐