首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

透徹理解 Oracle Net 架構:sqlnet.ora、tnsnames.ora、listener.ora 三大配置檔實戰解析

     編輯:Oracle 資料庫基礎

三大配置檔定位

檔案角色類比位置
sqlnet.ora客戶端名稱解析策略/etc/nsswitch.conf$ORACLE_HOME/network/admin
tnsnames.ora客戶端別名→連線描述映射/etc/hosts$ORACLE_HOME/network/admin
listener.ora伺服器端監聽程式設定sshd_config$ORACLE_HOME/network/admin

連線解析完整流程 (sqlplus user/pass@orcl)

  1. 讀取 sqlnet.ora 中 NAMES.DIRECTORY_PATH (預設 (TNSNAMES, HOSTNAME))。
  2. 優先查 tnsnames.ora 找 ORCL 記錄,取得 HOST, PORT, SERVICE_NAME。
  3. TCP 連線至 Listener 埠 (預設 1521)。
  4. Listener 依 SERVICE_NAME / SID 匹配 listener.ora 中 SID_LIST,轉交專用/共用伺服器進程。
  5. 連線建立,Listener 任務結束。

sqlnet.ora 關鍵參數

SQLNET.AUTHENTICATION_SERVICES = (NTS)        -- Windows 整合認證
NAMES.DIRECTORY_PATH = (TNSNAMES, HOSTNAME)   -- 解析順序:先 tnsnames,再 hostname
# NAMES.DIRECTORY_PATH = (TNSNAMES)           -- 僅用 tnsnames,略過 hostname 解析

tnsnames.ora 範例解析

ORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)          -- 專用伺服器模式
      (SERVICE_NAME = orcl)         -- 對應 SHOW PARAMETER SERVICE_NAMES
    )
  )

SALES =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.188.219)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = sales)
    )
  )

listener.ora 範例解析

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = boway)       -- Host Naming 需要
      (ORACLE_HOME = /u01/app/oracle/product/10.1.0/db_1)
      (SID_NAME = ORCL)
    )
  )

LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = boway)(PORT = 1521))
  )
  • GLOBAL_DBNAME:僅 Host Naming (免 tnsnames) 需要。
  • 一個 Listener 可服務多個 SID (多 SID_DESC)。

圖形化配置工具

  • netca:嚮導式,適合初始部署。
  • netmgr:手動微調首選,分頁對應三檔:
    Profile → sqlnet.ora | Service Naming → tnsnames.ora | Listeners → listener.ora

三種連線方式比較

語法認證需 Listener需 DB Open
sqlplus / as sysdbaOS否否
sqlplus user/passDB否 (IPC/Bequeath)是
sqlplus user/pass@tnsDB是是

除錯三板斧

  1. lsnrctl status:查服務註冊狀態 (READY/UNKNOWN/BLOCKED)。
  2. tnsping alias:驗證客戶端解析路徑 + Listener 回應時間。
  3. SQL> SHOW SGA / SELECT OPEN_MODE FROM V$DATABASE:確認實例啟動與資料庫開啟狀態。

進階:Host Naming 免 tnsnames.ora

  1. listener.ora 設定 GLOBAL_DBNAME。
  2. sqlnet.ora 加入 HOSTNAME 至 NAMES.DIRECTORY_PATH。
  3. 客戶端直連 user/pass@hostname,DNS 解析 IP,Listener 依 GLOBAL_DBNAME 匹配。
  4. 優點:客戶端零配置,IP 變更只改 DNS。

總結

掌握「解析策略 → 別名映射 → 監聽轉交」三階段,配置規範、除錯有法,Oracle 連線問題迎刃而解。

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