在 Oracle 資料庫環境中,位於 $ORACLE_HOME/network/admin 目錄下的三大核心配置文件——sqlnet.ora、tnsnames.ora 與 listener.ora——分別掌管客戶端連線參數、服務名稱解析與伺服器端監聽服務。理解它們的角色分工與關鍵參數,是排除連線故障、優化網路配置的基礎。
sqlnet.ora 同時作用於客戶端與伺服器端,定義了認證方式、名稱解析順序、預設網域等核心參數。修改伺服器端的 sqlnet.ora 後,需重啟 Listener 才能生效。
SQLNET.AUTHENTICATION_SERVICES = (NTS)
NAMES.DIRECTORY_PATH = (TNSNAMES, HOSTNAME, ONAMES)
# NAMES.DEFAULT_DOMAIN = us.oracle.com
sqlplus "/ as sysdba" 登入。Unix/Linux 環境下若遇問題,建議移除此參數。TNSNAMES(本地 tnsnames.ora)、HOSTNAME(主機名解析)、ONAMES(Oracle Names Server,已建議改用 LDAP)。tnsnames.ora 中的別名需附加網域(如 oralocal.us.oracle.com),但使用 tnsping 或 sqlplus 連線時仍只需輸入前綴別名,系統會自動補全。tnsnames.ora 專屬客戶端,記錄連線目標資料庫的服務名稱、IP、Port 及 Instance Name/Service Name。透過 Net Configuration Assistant 或 Net Manager 設定「本地 Net 服務名」或「服務命名」時,實際修改的就是此檔案。PL/SQL、SQL*Plus 等客戶端工具皆透過讀取此檔尋找目標服務。
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCL)
)
)
listener.ora 僅存在於伺服器端(純客戶端安裝不會有此檔),定義 tnslsnr 監聽進程的監聽地址、Port、服務註冊資訊(SID_LIST)。同樣可透過 Net Configuration Assistant 或 Net Manager 圖形化配置「監聽程序」。
LISTENER_CSB =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.70.9.14)(PORT = 1621)))
)
)
SID_LIST_LISTENER_CSB =
(SID_LIST =
(SID_DESC =
(ORACLE_HOME = /u02/oracle/app/oracle/product/10.2.0/db)
(SID_NAME = zjdevcsb)
)
)
上例定義了兩個獨立監聽器(LISTENER_CSB、LISTENER_CSA),分別監聽不同 Port,並各自掛載對應的 SID。SID_LIST_<listener_name> 的命名慣例將服務導向特定監聽器。
sqlnet.ora、tnsnames.ora 設定是否正確。listener.ora 配置無誤、Listener 進程已啟動(lsnrctl status)、資料庫實例已掛載/開啟。前提條件:網路通暢、防火牆未阻擋對應 Port(預設 1521)。
lsnrctl start / stop / status / reloadDB_NAME.DB_DOMAIN,資料庫全域唯一識別碼。善用 $ORACLE_HOME/network/admin/samples 目錄下的範例檔,可快速查閱完整參數說明與最佳實務。