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

Oracle 10g Linux 修改 Listener 監聽埠遭遇 ORA-28547 錯誤排查

     編輯:Oracle 資料庫基礎

問題描述

在 Red Hat Linux 9 上新安裝 Oracle 10g,因防火牆僅開放特定埠口,需將 Listener 預設埠 1521 修改為 4199。雖已同步更新 listener.ora 與 tnsnames.ora,且 tnsping 測試正常,但使用 sqlplus system/wwm123@wwm 連線卻報錯:

ERROR:
ORA-28547: connection to server failed, probable Oracle Net admin error

將埠口改回 1521 即可正常連線,確認問題在於非預設埠配置。

根因分析

tnsping 僅驗證網路層面的連通性與名稱解析,不涉及實際的資料庫會話建立。ORA-28547 通常表示用戶端與伺服器端的 Listener 設定不一致,或 Listener 未正確註冊服務。

檢查 listener.ora 發現,SID_LIST_LISTENER 區段僅定義了 PLSExtProc,缺少目標資料庫 WWM 的靜態註冊資訊。當使用非預設埠時,PMON 進程可能無法自動向 Listener 註冊服務(特別是舊版 Oracle 或特定參數設定下),導致 Listener 不知曉該服務的存在,拒絕連線轉發。

解決方案

在 listener.ora 的 SID_LIST_LISTENER 中新增靜態服務註冊:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /opt/Oracle/product/10.2.0/db_1)
      (PROGRAM = extproc)
    )
    (SID_DESC =                     # 新增區塊
      (GLOBAL_DBNAME = wwm)         # 對應 tnsnames.ora 的 SERVICE_NAME
      (ORACLE_HOME = /opt/Oracle/product/10.2.0/db_1)
      (SID_NAME = wwm)              # 實例名
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = xx.xx.xx.xx)(PORT = 4199))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
    )
  )

修改完成後重啟 Listener:

lsnrctl stop
lsnrctl start

再次測試 sqlplus system/wwm123@wwm,連線成功。

補充說明

  • 若資料庫啟動時 LOCAL_LISTENER 參數已正確指向新埠,PMON 會自動動態註冊,無需靜態配置。但為確保相容性與穩定性,建議仍保留靜態註冊。
  • 防火牆需同步開放 4199 埠(TCP)。
  • 若仍有問題,檢查 sqlnet.ora 是否設定 NAMES.DIRECTORY_PATH=(TNSNAMES) 以及用戶端 tnsnames.ora 的 PORT 參數是否一致。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved