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

Oracle Net Services 網路架構與配置深度解析

     編輯:Oracle 資料庫基礎

架構概覽

Oracle 支援傳統 Host/Terminal 與 C/S 架構。SQL*Net(Oracle Net Services)為網路中介軟體,建立於 TCP/IP、SPX/IPX 等協定之上,提供:

  • 網路透明性:本地開發應用無修改部署至網路。
  • 協定獨立性:應用不感知底層協定差異。
  • 異機互聯:多協定轉換實現跨平台連線。
  • 位置透明:資料遷移無需修改應用。
  • 字符集自動轉換:跨節點 NLS 協商。

關鍵檔案與工具 (Unix/Linux)

檔案/工具路徑用途
lsnrctl$ORACLE_HOME/bin啟動/停止/狀態監聽器 (V2)
listener.ora$ORACLE_HOME/network/admin監聽器配置:位址、SID_LIST
tnsnames.ora$ORACLE_HOME/network/admin客戶端連線描述符
sqlnet.ora$ORACLE_HOME/network/admin名稱解析順序、安全、追蹤參數
config.ora$ORACLE_HOME/dbs預設連線描述符 LOCAL_CONNECT
/etc/hosts/etcIP-主機名對應
/etc/services/etc埠號-服務名對應

連線建立流程

  1. 客戶端解析 sqlnet.ora → NAMES.DIRECTORY_PATH 決定順序(預設 TNSNAMES)。
  2. 讀 tnsnames.ora 取得 HOST、PORT、SERVICE_NAME/SID。
  3. TCP 連線至監聽器埠(預設 1521)。
  4. 監聽器依 listener.ora 驗證 SID/服務名,啟動 Server Process(Dedicated/Shared)。
  5. Client 直接與 Server Process 通訊,監聽器任務結束。

三種連線模式差異

  • sqlplus / as sysdba:OS 驗證,**不經監聽器**,DB 可關閉。
  • sqlplus user/pwd:本機 Bequeath,**不經監聽器**。
  • sqlplus user/pwd@tns_alias:**網路連線,需監聽器啟動**,最通用。

普通使用者需 DB Open;SYSDBA/密碼檔驗證可在 Mount 階段連線。

listener.ora 完整範例

LISTENER =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521))
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = Oracle)
      (ORACLE_HOME = /usr/oracle)
    )
  )

STARTUP_WAIT_TIME_LISTENER = 0
CONNECT_TIMEOUT_LISTENER = 10

tnsnames.ora 完整範例

ora =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521))
    (CONNECT_DATA =
      (SID = Oracle)
      (SERVER = DEDICATED)
    )
  )

# 多協定/多主機範例
REMOTE_DB =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = server1)(PORT = 1521))
      (ADDRESS = (PROTOCOL = SPX)(SERVICE = novell1))
    )
    (CONNECT_DATA = (SID = Oracle)(SERVER = DEDICATED))
  )

sqlnet.ora 關鍵參數

NAMES.DIRECTORY_PATH = (TNSNAMES, HOSTNAME)
# 僅用 TNSNAMES 可設為 (TNSNAMES)
SQLNET.EXPIRE_TIME = 10          # 檢測死連線 (分鐘)
TCP.VALIDNODE_CHECKING = YES     # 存取控制
TCP.INVITED_NODES = (192.168.1.0/24)

/etc/services 註冊

lsnrctl  1521/tcp   # Oracle Listener

常見問題排查思路

  1. tnsping tns_alias 驗證名稱解析與監聽器回應。
  2. lsnrctl status 確認監聽器運行、註冊服務。
  3. 核對雙端 HOST/PORT/SID/SERVICE_NAME **完全一致**。
  4. 防火牆放行 1521 (及動態埠範圍)。
  5. 檢查 sqlnet.ora 解析順序與存取控制。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved