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

Oracle Net 連線架構與三大設定檔詳細解析:解決 TNS 連線失敗

     編輯:Oracle 資料庫相關知識

前言

Oracle 連線問題多源於 listener.ora、sqlnet.ora、tnsnames.ora 設定不一致。本文系統解析三檔角色、關鍵參數與除錯邏輯。

三大設定檔位置

$ORACLE_HOME/network/admin/

1. sqlnet.ora:客戶端名稱解析順序

功能類似 /etc/nsswitch.conf,決定 @connect_string 如何解析。

SQLNET.AUTHENTICATION_SERVICES = (NTS)
NAMES.DIRECTORY_PATH = (TNSNAMES, HOSTNAME)
  • TNSNAMES:優先查 tnsnames.ora。
  • HOSTNAME:找不到時將連線字串視為主機名,嘗試 DNS 解析 IP,連線 GLOBAL_DBNAME=connect_string 的實例。
  • 若設為 (TNSNAMES) 則僅查 tnsnames.ora,不嘗試主機名解析。

2. tnsnames.ora:連線描述映射(類似 /etc/hosts)

僅當 sqlnet.ora 包含 TNSNAMES 時生效。

ORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

SALES =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.188.219)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = sales)
    )
  )
  • SERVER = DEDICATED:要求專用伺服器模式。
  • SERVICE_NAME:對應 SHOW PARAMETER SERVICE_NAME。

3. listener.ora:監聽器設定(伺服器端)

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))
  )
  • GLOBAL_DBNAME:僅 HOSTNAME 解析方式需要。
  • 一個 Listener 可服務多個 SID(在 SID_LIST 追加)。

常用監聽器指令

lsnrctl start|stop|status|services

圖形化設定工具

netca  # Net Configuration Assistant,嚮導式設定三大檔案

除錯檢查清單

  1. 確認 tnsnames.ora 服務名與 listener.ora SID_NAME/GLOBAL_DBNAME 對應。
  2. 確認 sqlnet.ora NAMES.DIRECTORY_PATH 包含 TNSNAMES。
  3. 防火牆開放 1521 埠(或自訂埠)。
  4. 本機測試:tnsping ORCL、sqlplus user/pass@ORCL。

小結

掌握「客戶端解析順序 → tnsnames 映射 → 監聽器服務」三層邏輯,配合 tnsping、lsnrctl status 逐層驗證,可快速定位 90% 連線問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved