[20181128]toad連線資料庫的問題.txt

lfree發表於2018-11-28

[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指令碼內容:

[20181128]toad連線資料庫的問題.txt


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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章