Oracle確定連線方式的優先順序

yangtingkun發表於2008-04-04

前兩天在使用10g的簡化連線方式的時候突然想到的問題,如果TNSNAMES.ORA中的配置名稱恰好是另一個資料庫的簡化連線方式,Oracle會連線到哪個資料庫。

今天有時間,做了個簡單的測試。

 

 

首先透過簡化連線方式連線遠端的資料庫:

SQL> CONN YANGTK/YANGTK@172.25.1.100/TEST1
已連線。
SQL> SELECT * FROM GLOBAL_NAME;

GLOBAL_NAME
-----------------------------------------------------
TEST1.YANGTINGKUN

下面在本地的TNSNAMES.ORA中配置另一個資料庫,但是配置的名稱為172.25.1.100/TEST1

172.25.1.100/test1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ytk-thinkpad)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ytk102.ytk_thinkpad)
    )
  )

新增了這個配置後,儲存TNSNAMES.ORA檔案的修改,再次執行上面的連線操作,檢查當前連線的資料庫:

SQL> CONN YANGTK/YANGTK@172.25.1.100/TEST1
已連線。
SQL> SELECT * FROM GLOBAL_NAME;

GLOBAL_NAME
---------------------------------------------------
YTK102.YTK_THINKPAD

這次TNSNAMES.ORA中的配置起了作用。看來Oracle應該是出於後向相容性的考慮,仍然先查詢TNSNAMES.ORA檔案,在檔案中找不到對應的配置資訊,才會嘗試使用簡化連線方式。

這時如果將資料庫簡化連線方式稍做調整:

SQL> CONN YANGTK/YANGTK@172.25.1.100:1521/TEST1
已連線。
SQL> SELECT * FROM GLOBAL_NAME;

GLOBAL_NAME
--------------------------------------------------
TEST1.YANGTINGKUN

只要簡化連線方式和TNSNAMES.ORA中的配置不符就可以連線到目標資料庫。同時Oracle的這種特性,在TNSNAMES.ORA中進行配置的時候,儘量不要使用和簡易連線方式相近似的名字,這樣可以避免不必要的錯誤。

 

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-228918/,如需轉載,請註明出處,否則將追究法律責任。

相關文章