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

Oracle Net 連線架構深度解析與 TNS 除錯實戰(完整版)

     編輯:Oracle 資料庫相關知識

前言

本文為 Oracle Net 連線架構完整教學,涵蓋三大設定檔角色、參數詳解、監聽器管理與系統化除錯流程。

核心架構:三層解析邏輯

  1. 客戶端名稱解析:sqlnet.ora 的 NAMES.DIRECTORY_PATH 決定解析順序(TNSNAMES → HOSTNAME → LDAP...)。
  2. 連線描述映射:tnsnames.ora 將 TNS 名稱轉為 (ADDRESS, CONNECT_DATA) 結構。
  3. 伺服器端監聽與分派:listener.ora 定義監聽埠與服務實例(SID/SERVICE_NAME),接收請求後啟動專用/共用伺服器行程。

關鍵設定檔範本

sqlnet.ora

SQLNET.AUTHENTICATION_SERVICES = (NTS)
NAMES.DIRECTORY_PATH = (TNSNAMES, HOSTNAME)
# 僅用 TNSNAMES 可設為 (TNSNAMES)

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

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

進階主題

  • 多監聽器:不同埠/協定獨立監聽,LISTENER_1, LISTENER_2...
  • 服務註冊:PMON 自動向監聽器註冊 SERVICE_NAME、INSTANCE_NAME,SID_LIST 僅作靜態註冊備用(如啟動前連線)。
  • 專用 vs 共用伺服器:SERVER=DEDICATED 強制專用;SHARED 或預設由監聽器依負載決定。

系統化除錯流程

  1. tnsping ORCL:驗證名稱解析與網路通達。
  2. lsnrctl status:確認監聽器運行、服務狀態(READY/UNKNOWN/BLOCKED)。
  3. lsnrctl services:查看已註冊服務與處理器(DEDICATED/SHARED)。
  4. 檢查防火牆、主機名解析(ping boway)、/etc/hosts 或 DNS。
  5. 客戶端 sqlnet.log、伺服器 listener.log 追蹤詳細錯誤碼。

常見錯誤碼速查

錯誤原因對策
ORA-12154TNS 無法解析檢查 tnsnames.ora 路徑、拼寫、sqlnet.ora 解析順序
ORA-12541無監聽器啟動 lsnrctl、檢查埠號、防火牆
ORA-12514監聽器無此服務核對 SERVICE_NAME/SID、PMON 註冊、靜態 SID_LIST
ORA-12505監聽器不支援此 SID同上,注意 SID vs SERVICE_NAME 差異

小結

Oracle Net 設定核心在於「名稱解析一致性」與「監聽器服務註冊完整性」。善用 netca 圖形工具生成基礎設定,再依實際拓撲微調,配合標準除錯流程,連線問題迎刃而解。

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