Oracle 客戶端連線看似簡單,實則涉及三大配置檔協同運作。本文以「三個檔案、兩端角色、一條連線流程」為主軸,深度解析 sqlnet.ora(名稱解析策略)、tnsnames.ora(別名對應)、listener.ora(伺服端監聽)的職責分工,並提供除錯指令與 Hostname 命名法替代方案。
| 檔案 | 位置 | 角色 | 類比 |
|---|---|---|---|
| sqlnet.ora | Client + Server | 名稱解析順序、認證、加密、IP 過濾 | /etc/nsswitch.conf |
| tnsnames.ora | Client | TNS 別名 → Host/Port/Service 映射 | /etc/hosts |
| listener.ora | Server | 監聽器埠、服務實例註冊、SID_LIST | inetd/xinetd |
# 只用本地 tnsnames.ora
NAMES.DIRECTORY_PATH = (TNSNAMES)
# 允許本地別名 + 易連線 (EZCONNECT)
NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT)
# 允許 LDAP、Hostname 解析
NAMES.DIRECTORY_PATH = (TNSNAMES, LDAP, HOSTNAME)
規則:清單中未出現的解析方法直接失效;順序決定優先權。
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED) # 專用/共用伺服器
(SERVICE_NAME = orcl) # 對應 listener.ora GLOBAL_DBNAME 或 service_names 參數
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl) # 若用 HOSTNAME 命名法必填
(ORACLE_HOME = /u01/app/oracle/product/19c)
(SID_NAME = orcl)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = host.example.com)(PORT = 1521))
)
sqlnet.ora → 解析順序含 TNSNAMES。tnsnames.ora 找 ORCL → 取得 Host=127.0.0.1, Port=1521, Service=orcl, Server=DEDICATED。SERVICE_NAME=orcl 在 SID_LIST 或動態註冊中找到實例。SERVER=DEDICATED 啟動專用伺服器進程(或導向共用伺服器)。| 方式 | 語法 | 需監聽器 | 適用場景 |
|---|---|---|---|
| OS 驗證 | sqlplus / as sysdba | 否 | 本機維護、資料庫關閉狀態 |
| Bequeath (本機) | sqlplus sys/oracle | 否 | 本機應用、無網路開銷 |
| 網路連線 | sqlplus sys/oracle@orcl | 是 | 遠端應用、標準部署 |
| 指令 | 用途 |
|---|---|
| lsnrctl status | 伺服端監聽器狀態、服務註冊狀況 |
| tnsping orcl | 客戶端解析路徑、監聽器回應時間 |
| SQL> SHOW SGA | 確認 Instance 已啟動 |
| SELECT open_mode FROM v$database; | 確認資料庫 OPEN/MOUNT 狀態 |
適用於大量客戶端、IP 變動頻繁環境。
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = orcl)
(GLOBAL_DBNAME = boway) # 此處設定全域資料庫名 = 主機名
(ORACLE_HOME = /u01/app/oracle/product/19c)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC)))
(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = boway)(PORT = 1521)))
)
NAMES.DIRECTORY_PATH = (HOSTNAME, TNSNAMES)
sqlplus sys/oracle@boway -- 直接用主機名連線,無需 tnsnames.ora
前提:網路 DNS/hosts 能解析 boway 為正確 IP;GLOBAL_DBNAME 必須與主機名一致。
netca:嚮導式,適合初始建立。netmgr:完整管理介面,Profile→sqlnet.ora、Service Naming→tnsnames.ora、Listeners→listener.ora。