Oracle Net Services 是 Client/Server 架構下資料庫連線的核心中介軟體。本文系統說明監聽器與本地服務名的配置流程、常見錯誤排查與啟動驗證步驟,適用於 Windows 與 Linux/Unix 環境。
客戶端透過 tnsnames.ora 定義連線描述符,包含協定、主機、埠號、服務名。監聽器驗證請求合法性後建立連線。
Windows:開始 → 程式集 → Oracle - OraHome → Configuration and Migration Tools → Net Manager
Linux/Unix:$ netmgr
強烈建議使用 GUI 完成配置,避免手動編輯語法錯誤。
LISTENER。TCP/IP → 輸入主機名/IP(跨網段建議 IP)→ 埠號(預設 1521)。myoracle.192.168.1.5,含網域確保唯一)→ SID(如 myOracle)。$ORACLE_HOME/network/admin/listener.ora。TCP/IP → 主機 IP、埠號 → 服務名(需與監聽器 GLOBAL_DBNAME 一致)。$ORACLE_HOME/network/admin/tnsnames.ora。$ lsnrctl start # 啟動監聽器
$ lsnrctl status # 檢查狀態
SQL> conn sys@myOracle as sysdba
SQL> startup # 啟動資料庫實例
C:\> lsnrctl start
C:\> oradim -startup -sid myOracle
SQL> conn sys@myOracle as sysdba
SQL> startup
注意: 非預設監聽器名稱需指定:lsnrctl start aListener。
| 錯誤代碼 | 原因 | 解決方向 |
|---|---|---|
| ORA-12541 | 無監聽器 | 啟動監聽器;檢查 IP/埠號 |
| ORA-12500 | 無法啟動專用伺服器進程 | Windows 啟動實例服務 oradim -startup |
| ORA-12535 | 操作逾時 | 檢查網路連通、防火牆阻擋 |
| ORA-12154 | 無法解析服務名 | 核對 tnsnames.ora 服務名拼寫;首行勿有空格 |
| ORA-12514 | 監聽器無法解析 SERVICE_NAME | 確認客戶端服務名 = 監聽器 GLOBAL_DBNAME |
| Windows 找不到路徑 | 註冊表 ImagePath 遺失 | HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\OracleOraHome92TNSListener 設定 ImagePath=D:\Oracle\ora92\BIN\TNSLSNR |
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))
)
ora =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521))
(CONNECT_DATA = (SID = Oracle)(SERVER = DEDICATED))
)
NAMES.DIRECTORY_PATH = (TNSNAMES, HOSTNAME)
控制名稱解析順序:優先 tnsnames.ora,找不到再嘗試主機名解析。
sqlplus / as sysdba:OS 認證,不經監聽器,資料庫可關閉。sqlplus sys/pwd:本機 Bequeath 連線,不經監聽器。sqlplus sys/pwd@tns_alias:網路連線,**需監聽器啟動**,最通用模式。監聽器與 tnsnames.ora 參數必須**完全一致**(主機、埠、服務名/SID)。排查原則:先驗證網路連通 → 檢查監聽器狀態 → 核對雙端配置 → 依錯誤代碼定向解決。善用 lsnrctl status 與 tnsping 快速隔離問題層級。