首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle Net 網路架構深度解析:sqlnet.ora、tnsnames.ora、listener.ora 三大配置檔角色與連線流程

     編輯:Oracle 資料庫相關知識

Oracle 客戶端連線看似簡單,實則涉及三大配置檔協同運作。本文以「三個檔案、兩端角色、一條連線流程」為主軸,深度解析 sqlnet.ora(名稱解析策略)、tnsnames.ora(別名對應)、listener.ora(伺服端監聽)的職責分工,並提供除錯指令與 Hostname 命名法替代方案。

三大配置檔職責速查

檔案位置角色類比
sqlnet.oraClient + Server名稱解析順序、認證、加密、IP 過濾/etc/nsswitch.conf
tnsnames.oraClientTNS 別名 → Host/Port/Service 映射/etc/hosts
listener.oraServer監聽器埠、服務實例註冊、SID_LISTinetd/xinetd

sqlnet.ora 關鍵:NAMES.DIRECTORY_PATH

# 只用本地 tnsnames.ora
NAMES.DIRECTORY_PATH = (TNSNAMES)

# 允許本地別名 + 易連線 (EZCONNECT)
NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT)

# 允許 LDAP、Hostname 解析
NAMES.DIRECTORY_PATH = (TNSNAMES, LDAP, HOSTNAME)

規則:清單中未出現的解析方法直接失效;順序決定優先權。

tnsnames.ora 結構解析

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 參數
    )
  )

listener.ora 核心區段

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))
  )

完整連線流程:sqlplus sys/oracle@orcl

  1. 讀取 sqlnet.ora → 解析順序含 TNSNAMES。
  2. 讀取 tnsnames.ora 找 ORCL → 取得 Host=127.0.0.1, Port=1521, Service=orcl, Server=DEDICATED。
  3. TCP 連線至監聽器 1521 埠。
  4. 監聽器依 SERVICE_NAME=orcl 在 SID_LIST 或動態註冊中找到實例。
  5. 依 SERVER=DEDICATED 啟動專用伺服器進程(或導向共用伺服器)。
  6. 客戶端與 Server Process 建立會話,監聽器任務結束。

三種連線方式比較

方式語法需監聽器適用場景
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 狀態

進階:Hostname 命名法(免 tnsnames.ora)

適用於大量客戶端、IP 變動頻繁環境。

伺服端 listener.ora

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)))
  )

客戶端 sqlnet.ora

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。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved