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

Oracle 實例名稱/服務名稱查詢方法:LISTENER.ORA、TNSNAMES.ORA、SQL 查詢三管齊下

     編輯:Oracle 資料庫相關知識

連線 Oracle 時頻繁遇到「Invalid URL」「ORA-12154」「ORA-12541」,根因多為實例名/服務名/連接埠不匹配。本文提供三種查詢實例名與服務名的標準方法,並解析三大設定檔關係。

方法一:檢視網路設定檔 (Client/Server 皆適用)

1. $ORACLE_HOME/network/admin/listener.ora (Server 端)

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = orcl)        <-- 服務名 (對外發布)
      (ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
      (SID_NAME = orcl)             <-- 實例名 (SID)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = db-server)(PORT = 1521))
    )
  )
  • SID_NAME = 執行個體識別碼 (Instance Name / instance_name 參數)
  • GLOBAL_DBNAME = 服務名 (Service Name),Client 連線用

2. $ORACLE_HOME/network/admin/tnsnames.ora (Client 端)

ORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = db-server)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)         <-- 必須與 Listener GLOBAL_DBNAME 一致
    )
  )

Client 以 ORCL (TNS 別名) 連線,實際解析至 SERVICE_NAME=orcl。

方法二:SQL 查詢 (需已連線資料庫)

-- 1. 服務名 (參數 service_names,可多值)
SHOW PARAMETER service_names;
-- 或
SELECT value FROM v$parameter WHERE name = 'service_names';

-- 2. 實例名 (參數 instance_name)
SHOW PARAMETER instance_name;

-- 3. 資料庫唯一名 (DB_UNIQUE_NAME,Data Guard 環境關鍵)
SHOW PARAMETER db_unique_name;

-- 4. 綜合視圖
SELECT instance_name, host_name, version, startup_time, status
FROM v$instance;

SELECT name, db_unique_name, log_mode, open_mode
FROM v$database;

三大名稱關係圖解

名稱參數/來源用途範例
SID / Instance Nameinstance_name / ORACLE_SID作業系統層級識別執行個體,共享記憶體區段鍵值orcl
Service Nameservice_names (可多值)網路層級邏輯服務識別,Client 連線、負載平衡、Failover 依據orcl, orcl_pdb1, sales.example.com
DB Namedb_name資料庫建立時指定,控制檔/資料檔標識,不可變ORCL
DB Unique Namedb_unique_nameData Guard 環境區分 Primary/StandbyORCL_PRIMARY, ORCL_STBY
Global Database Namedb_name.db_domain網域完整名稱,Enterprise Manager/註冊用orcl.example.com

常見連線錯誤對應檢查

錯誤可能原因檢查重點
ORA-12154: TNS:could not resolve the connect identifier specifiedtnsnames.ora 找不到別名、格式錯誤、TNS_ADMIN 未設定tnsnames.ora 內容、tnsping alias、環境變數 TNS_ADMIN
ORA-12541: TNS:no listenerListener 未啟動、埠錯誤、防火牆阻擋lsnrctl status、netstat -an | grep 1521、防火牆規則
ORA-12514: TNS:listener does not currently know of service requested in connect descriptorSERVICE_NAME 與 Listener 註冊的 GLOBAL_DBNAME 不符、服務未動態註冊lsnrctl services 檢視已註冊服務、service_names 參數
ORA-12505: TNS:listener does not currently know of SID given in connect descriptor用 SID 連線但 Listener 未註冊該 SID (靜態註冊缺失)listener.ora SID_LIST 設定、動態註冊狀態

快速驗證指令

# Client 端
tnsping ORCL                    # 驗證 TNS 解析與 Listener 連通性
sqlplus user/pwd@ORCL           # 實際連線測試

# Server 端
lsnrctl status                  # Listener 狀態、監聽埠、已註冊服務
lsnrctl services                # 詳細服務/實例/處理程序狀態 (READY/BLOCKED)

掌握「SID ≠ Service Name ≠ DB Name」,並能在 Listener.ora、Tnsnames.ora、資料庫參數三處交叉驗證,即可解決 95% 的連線識別問題。

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