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

PL/SQL Developer 連接同名不同 IP 資料庫:TNSNAMES.ORA 別名管理技巧

     編輯:Oracle 教學

PL/SQL Developer 連接同名不同 IP 資料庫:TNSNAMES.ORA 別名管理技巧

實務上常遇到:開發、測試、生產環境資料庫 **SID/Service Name 完全相同**(如皆為 ORCL),但部署在不同 IP 主機上。PL/SQL Developer 連線視窗僅顯示「資料庫」下拉選單,無法直接區分同名實例。本文揭示核心機制:**TNS 別名才是連線真實識別符**,並示範如何透過 tnsnames.ora 管理多環境連線。

一、問題現場:連線視窗的困惑

PL/SQL Developer 登入視窗中,「資料庫」下拉選單顯示的正是 tnsnames.ora 定義的 **別名**,而非實際 SID。若多環境使用相同 SID 但未在 tnsnames.ora 設定差異化別名,將只看到重複的 ORCL,無法分辨。

二、核心機制:TNS 解析流程

1. 使用者在 PL/SQL Developer 選擇「資料庫」別名(如 DEV_ORCL)
2. 客戶端讀取 $ORACLE_HOME/network/admin/tnsnames.ora
3. 找到 DEV_ORCL 對應的連線描述符:
   DEV_ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL=TCP)(HOST=192.168.1.10)(PORT=1521))
                         (CONNECT_DATA = (SERVICE_NAME=ORCL)))
4. 透過 TCP 連線至 192.168.1.10:1521,請求 SERVICE_NAME=ORCL
5. 監聽器驗證服務存在,建立 Session

結論:**別名 = 連線入口,SID/Service Name = 目標服務標識**。同一 SID 可對應無數個別名,指向不同主機/埠口。

三、最佳實踐:標準化別名命名規範

環境別名格式範例HOST IP
開發{ENV}_{SID}DEV_ORCL192.168.10.20
測試{ENV}_{SID}TEST_ORCL192.168.20.30
預演{ENV}_{SID}STAGE_ORCL192.168.30.40
生產{ENV}_{SID}PROD_ORCL10.0.1.100

四、tnsnames.ora 完整配置範例

# $ORACLE_HOME/network/admin/tnsnames.ora
# 或用戶目錄 %APPDATA%\Oracle\tnsnames.ora (Windows)

DEV_ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.20)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORCL)
    )
  )

TEST_ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.20.30)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORCL)
    )
  )

PROD_ORCL =
  (DESCRIPTION =
    (ADDRESS_LIST = 
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.1.100)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.1.101)(PORT = 1521))  -- RAC 多節點
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORCL)
      (FAILOVER_MODE = (TYPE = SELECT)(METHOD = BASIC)(RETRIES = 180)(DELAY = 5))
    )
  )

五、PL/SQL Developer 具體操作步驟

  1. 選單 Tools → Preferences → Connection 確認 Oracle Home 指向正確客戶端目錄
  2. 點選登入視窗「資料庫」下拉框右側「編輯」圖示(或按 F4)
  3. 在「TNS Names Editor」中:新增/修改別名,填寫 Host、Port、Service Name
  4. 或直接編輯 tnsnames.ora 檔案(建議),存檔後 PL/SQL Developer 自動重整列表
  5. 登入視窗選擇 DEV_ORCL、輸入對應環境帳號密碼 → 連線

六、進階技巧:同一別名多 IP 故障轉移

APP_ORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (LOAD_BALANCE = ON)  -- 或 FAILOVER = ON
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.10)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.11)(PORT = 1521))
    )
    (CONNECT_DATA = (SERVICE_NAME = ORCL))
  )
  • LOAD_BALANCE = ON:客戶端隨機選擇節點分散負載
  • FAILOVER = ON:首選第一節點,失敗自動嘗試下一節點
  • 搭配 CONNECT_DATA.FAILOVER_MODE 實現 SELECT 語句級故障轉移(TAF)

七、常見問題排查

現象可能原因解決方案
下拉選單無別名tnsnames.ora 路徑錯誤/語法錯誤/權限不足檢查 Preferences → Oracle Home;用筆記本開啟 tnsnames.ora 驗證括號配對
ORA-12154: TNS:could not resolve別名拼寫錯誤/tnsnames.ora 未生效重啟 PL/SQL Developer;tnsping 別名 驗證解析
ORA-12514: Listener does not know serviceSERVICE_NAME 拼寫錯誤/目標資料庫未註冊該服務目標主機執行 lsnrctl services 確認服務名
連上錯誤環境別名指向錯誤 IP嚴格執行命名規範;連線後執行 SELECT SYS_CONTEXT('USERENV','SERVER_HOST') FROM DUAL 驗證

八、團隊協作建議

  1. 將標準化 tnsnames.ora 納入專案 Git 儲存庫(config/tnsnames.ora)
  2. 新成員入職執行 cp config/tnsnames.ora %APPDATA%\Oracle\ 一鍵配置
  3. 敏感資訊(密碼)絕不寫入 tnsnames.ora,由各自輸入或使用 OS 驗證/錢包
  4. 定期審查別名清單,下線廢棄環境別名避免誤連
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved