Oracle 連線問題多源於 listener.ora、sqlnet.ora、tnsnames.ora 設定不一致。本文系統解析三檔角色、關鍵參數與除錯邏輯。
$ORACLE_HOME/network/admin/
功能類似 /etc/nsswitch.conf,決定 @connect_string 如何解析。
SQLNET.AUTHENTICATION_SERVICES = (NTS)
NAMES.DIRECTORY_PATH = (TNSNAMES, HOSTNAME)
TNSNAMES:優先查 tnsnames.ora。HOSTNAME:找不到時將連線字串視為主機名,嘗試 DNS 解析 IP,連線 GLOBAL_DBNAME=connect_string 的實例。(TNSNAMES) 則僅查 tnsnames.ora,不嘗試主機名解析。僅當 sqlnet.ora 包含 TNSNAMES 時生效。
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
SALES =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.188.219)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = sales)
)
)
SERVER = DEDICATED:要求專用伺服器模式。SERVICE_NAME:對應 SHOW PARAMETER SERVICE_NAME。SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = boway)
(ORACLE_HOME = E:\oracle\product\10.1.0\Db_2)
(SID_NAME = ORCL)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = boway)(PORT = 1521))
)
GLOBAL_DBNAME:僅 HOSTNAME 解析方式需要。SID_LIST 追加)。lsnrctl start|stop|status|services
netca # Net Configuration Assistant,嚮導式設定三大檔案
tnsnames.ora 服務名與 listener.ora SID_NAME/GLOBAL_DBNAME 對應。sqlnet.ora NAMES.DIRECTORY_PATH 包含 TNSNAMES。tnsping ORCL、sqlplus user/pass@ORCL。掌握「客戶端解析順序 → tnsnames 映射 → 監聽器服務」三層邏輯,配合 tnsping、lsnrctl status 逐層驗證,可快速定位 90% 連線問題。