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

Oracle 網路架構與連線問題排查全指南:sqlnet.ora、tnsnames.ora、listener.ora 三大配置檔深度解析

     編輯:Oracle 資料庫基礎

三大配置檔角色定位

檔案位置角色類比
SQLNET.ORA$ORACLE_HOME/NETWORK/ADMIN名稱解析策略 (先查 TNS、再查 LDAP、再查 Hostname)/etc/nsswitch.conf
TNSNAMES.ORA同左服務名 → 連線描述映射表/etc/hosts
LISTENER.ORA同左 (伺服器端)監聽器進程配置:監聽端口、服務註冊、SID_LISTinetd.conf

連線流程完整追蹤

  1. 客戶端執行 SQLPLUS USER/PASS@ORCL
  2. 讀取 SQLNET.ORA → NAMES.DIRECTORY_PATH=(TNSNAMES, HOSTNAME)
  3. 優先查 TNSNAMES.ORA 找 ORCL 記錄 → 取得 HOST、PORT、SERVICE_NAME
  4. TCP 連接 Listener (Port 1521)
  5. Listener 依 SERVICE_NAME 或 SID 尋找對應服務處理程序
  6. 專用伺服器模式:Listener 啟動新 Server Process,回傳重導向端口,Client 直連
  7. 共享伺服器模式:Listener 導向 Dispatcher,Client 連 Dispatcher
  8. 連線建立完成,Listener 任務結束,後續通訊不經 Listener

配置檔標準範本

SQLNET.ORA

SQLNET.AUTHENTICATION_SERVICES = (NTS)
NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT)
# EZCONNECT 允許 user/pass@host:port/service 直連,無需 TNSNAMES
SQLNET.EXPIRE_TIME = 10          # 檢測死連線 (分鐘)
SQLNET.INBOUND_CONNECT_TIMEOUT = 60

TNSNAMES.ORA

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

SALES =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = SALES-SRV)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = SALES)
    )
  )

LISTENER.ORA (伺服器端)

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = ORCL)
      (ORACLE_HOME = /U01/APP/ORACLE/PRODUCT/11.2.0/DBHOME_1)
      (SID_NAME = ORCL)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

# 關鍵:ADMIN_RESTRICTIONS_LISTENER=ON 防止遠程 LSNRCTL 停止監聽
# SUBSCRIBE_FOR_NODE_DOWN_EVENT_LISTENER=ON 支援 RAC 節點故障快速轉移

三大診斷指令

指令用途範例輸出關鍵字
LSNRCTL STATUS檢視監聽狀態、已註冊服務Service "ORCL" has 1 instance(s), Instance "ORCL", status READY
TNSPING ORCL驗證客戶端解析路徑、Listener 連通性OK (20 msec), Used TNSNAMES adapter
SQLPLUS / AS SYSDBA → SHOW SGA確認 Instance 已啟動Total System Global Area 102020364 bytes

Hostname 直連模式 (免 TNSNAMES)

  1. Listener.ora 設定 GLOBAL_DBNAME 並確保 HOST 可解析
  2. SQLNET.ORA 設定 NAMES.DIRECTORY_PATH=(HOSTNAME)
  3. Client 直連:SQLPLUS USER/PASS@DBHOST
適合大量 Client、IP 固定、DNS 完善的環境,避免分發 TNSNAMES.ORA 維護成本。

常見錯誤代碼速查

錯誤原因解決
ORA-12154TNS 解析失敗檢查 TNSNAMES.ORA 拼寫、SQLNET.ORA 解析順序
ORA-12514Listener 無此服務檢查 SERVICE_NAME/SID、Listener 註冊狀態
ORA-12541無監聽程序啟動 Listener、檢查防火牆 1521
ORA-12545目標主機/端口錯誤TNSNAMES HOST/PORT 拼寫、網路不通
ORA-12170連線逾時防火牆、SQLNET.INBOUND_CONNECT_TIMEOUT、Listener 過載

本地連線不經 Listener

SQLPLUS / AS SYSDBA          -- OS 認證,Bequeath 協議,無需 Listener
SQLPLUS USER/PASS            -- 本地 Bequeath,需資料庫 OPEN
SQLPLUS USER/PASS@LOCAL_SID  -- 經 Listener,需 Listener 運行
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved