本文為 Oracle Net 連線架構完整教學,涵蓋三大設定檔角色、參數詳解、監聽器管理與系統化除錯流程。
sqlnet.ora 的 NAMES.DIRECTORY_PATH 決定解析順序(TNSNAMES → HOSTNAME → LDAP...)。tnsnames.ora 將 TNS 名稱轉為 (ADDRESS, CONNECT_DATA) 結構。listener.ora 定義監聽埠與服務實例(SID/SERVICE_NAME),接收請求後啟動專用/共用伺服器行程。SQLNET.AUTHENTICATION_SERVICES = (NTS)
NAMES.DIRECTORY_PATH = (TNSNAMES, HOSTNAME)
# 僅用 TNSNAMES 可設為 (TNSNAMES)
ORCL =
(DESCRIPTION =
(ADDRESS_LIST = (ADDRESS = (PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))
(CONNECT_DATA = (SERVER=DEDICATED)(SERVICE_NAME=orcl))
)
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)))
LISTENER_1, LISTENER_2...SERVICE_NAME、INSTANCE_NAME,SID_LIST 僅作靜態註冊備用(如啟動前連線)。SERVER=DEDICATED 強制專用;SHARED 或預設由監聽器依負載決定。tnsping ORCL:驗證名稱解析與網路通達。lsnrctl status:確認監聽器運行、服務狀態(READY/UNKNOWN/BLOCKED)。lsnrctl services:查看已註冊服務與處理器(DEDICATED/SHARED)。ping boway)、/etc/hosts 或 DNS。sqlnet.log、伺服器 listener.log 追蹤詳細錯誤碼。| 錯誤 | 原因 | 對策 |
|---|---|---|
| ORA-12154 | TNS 無法解析 | 檢查 tnsnames.ora 路徑、拼寫、sqlnet.ora 解析順序 |
| ORA-12541 | 無監聽器 | 啟動 lsnrctl、檢查埠號、防火牆 |
| ORA-12514 | 監聽器無此服務 | 核對 SERVICE_NAME/SID、PMON 註冊、靜態 SID_LIST |
| ORA-12505 | 監聽器不支援此 SID | 同上,注意 SID vs SERVICE_NAME 差異 |
Oracle Net 設定核心在於「名稱解析一致性」與「監聽器服務註冊完整性」。善用 netca 圖形工具生成基礎設定,再依實際拓撲微調,配合標準除錯流程,連線問題迎刃而解。