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

Oracle TCP/IP 連線機制深度解析:從 TNS 解析到專用/共用伺服器建立

     編輯:Oracle 資料庫基礎

連線建立全流程概覽

當客戶端發起連線請求,經歷 TNS 解析 → TCP 三向交握 → 監聽器接管 → 伺服器程序建立 → 重導向/轉交 等關鍵步驟。本文以 SQL*Plus 連線為例,逐層拆解。

第一階段:TNS 服務名解析

sqlplus scott/tiger@ora10g.localdomain
  • TNS(Transparent Network Substrate):Oracle 專有網路層,實現對等通訊
  • tnsnames.ora:客戶端本地配置檔,通常位於 $ORACLE_HOME/network/admin

範例配置:

ora10g.localdomain =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))
    (CONNECT_DATA = (SERVICE_NAME = ora10g))
  )

客戶端讀取此檔,將服務名映射為 主機名、監聽埠、服務名 三要素。

第二階段:TCP 連線與監聽器交互

  1. 客戶端向 localhost.localdomain:1521 發起 TCP Socket 連線
  2. 監聽器進程(預設埠 1521)接收請求,依 listener.ora 驗證:
    • 服務是否存在
    • IP 是否受限
    • 認證機制
  3. 驗證通過後,監聽器依連線模式分派處理

第三階段:專用伺服器 vs 共用伺服器

專用伺服器連線

  • UNIX:監聽器 fork() + exec() 建立新進程,繼承 Socket
  • Windows:監聽器請求資料庫進程建立新執行緒,客戶端重導向
  • 特點:一對一、私有 PGA、適合長連線/大量作業

共用伺服器連線

  • 監聽器從調度器池選擇可用調度器
  • 回傳調度器連線資訊(隨機埠),客戶端斷開監聽器、直連調度器
  • 特點:多對一、共用 PGA、適合大量短連線/輕量查詢

關鍵圖解說明

連線命令範例
tnsnames.ora 配置
解析結果映射
UNIX 專用伺服器進程模型
共用伺服器調度器模型

進階解析方式:OID/LDAP

大型環境可採用 Oracle Internet Directory(OID)集中管理 TNS 條目,等同 DNS 對主機名的解析角色,減少 tnsnames.ora 分發維護成本。

故障排查關鍵點

  1. tnsping ora10g.localdomain 驗證解析與網路通達
  2. 檢查監聽器狀態:lsnrctl status
  3. 確認防火牆放行 1521 及調度器動態埠範圍
  4. 查看 sqlnet.log、listener.log 定位具體錯誤碼

掌握連線建立全鏈路,才能在「連不上」時快速定位斷點,從配置、網路、進程模型三維度精準施策。

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