三文件均位於 $ORACLE_HOME/network/admin/ (或 TNS_ADMIN 指定目錄)。
加載優先級: 當前目錄 → TNS_ADMIN → $ORACLE_HOME/network/admin → /etc (Linux)。
核心參數: NAMES.DIRECTORY_PATH
SQLNET.AUTHENTICATION_SERVICES = (NTS)
NAMES.DIRECTORY_PATH = (TNSNAMES, HOSTNAME, EZCONNECT)
解析順序邏輯:
TNSNAMES:讀取 tnsnames.ora 解析別名HOSTNAME:將別名視為主機名,通過 DNS/hosts 解析 IP,連接該 IP 上 GLOBAL_DBNAME=別名的實例EZCONNECT:易連接命名法 host:port/service_nameLDAP:企業目錄服務(少用)實戰建議: 生產環境建議精簡為 (TNSNAMES, EZCONNECT),禁用 HOSTNAME 避免誤解析。
定義 Net Service Name → 連接描述符 的映射。
ORCL = -- 連接別名 (sqlplus user/pwd@ORCL)
(DESCRIPTION =
(ADDRESS_LIST = -- 地址列表 (支持故障轉移/負載均衡)
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
-- (ADDRESS = (PROTOCOL = TCP)(HOST = standby)(PORT = 1521)) -- 備庫
)
(CONNECT_DATA =
(SERVER = DEDICATED) -- 專用/共享服務器
(SERVICE_NAME = orcl) -- 服務名 (show parameter service_name)
-- (SID = orcl) -- 或使用 SID (舊版)
-- (INSTANCE_NAME = orcl1) -- RAC 指定實例
)
)
| 參數 | 來源/驗證方法 |
|---|---|
| HOST | 服務端 hostname 或 ifconfig/ipconfig;客戶端必須 ping 通 |
| PORT | 服務端 lsnrctl status 顯示的 Listening Endpoints |
| SERVICE_NAME | 服務端 SQL> SHOW PARAMETER service_name |
| SERVER | DEDICATED (默認) / SHARED (需服務端配置 Dispatcher) |
SALES =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.188.219)(PORT = 1521))
(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = sales))
)
# 關鍵提示:若服務端用 MTS(共享服務器),DB Link 必須顯式指定 (SERVER=DEDICATED) 避免分布式事務 Bug
定義 Listener 進程監聽端點及服務實例註冊信息(靜態註冊)。
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = server_hostname)(PORT = 1521))
)
# 靜態註冊 (非必需,10g+ 支持動態註冊)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl) # 用於 HOSTNAME 解析方式
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = orcl)
)
)
SID_LIST 多用於:sqlplus sys/oracle@orcl
1. 讀 sqlnet.ora → NAMES.DIRECTORY_PATH = (TNSNAMES)
2. 讀 tnsnames.ora → 找 ORCL → 獲取 HOST, PORT, SERVICE_NAME
3. TCP 連接 HOST:PORT → Listener 接收
4. Listener 驗證 SERVICE_NAME → 派生 Server Process (DEDICATED/SHARED)
5. Server Process 接管會話 → Listener 任務結束
| 語法 | 認證方式 | 是否需 Listener | 適用場景 |
|---|---|---|---|
sqlplus / as sysdba | OS 認證 (OSDBA 組) | 否 (Bequeath 协议) | 本地維護、數據庫未啟動時 |
sqlplus sys/oracle | 數據庫密碼文件/字典 | 否 (Bequeath/IPC) | 本地連接、無網絡開銷 |
sqlplus sys/oracle@orcl | 網絡密碼驗證 | 是 | 遠程連接、應用服務器 |