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

ORA-12514 解決方案:TNS 監聽器無法解析 SERVICE_NAME

     編輯:Oracle 資料庫相關知識

錯誤現象

ORA-12514: TNS:listener could not resolve SERVICE_NAME given in connect descriptor

根因分析

  1. tnsnames.ora 中的 SERVICE_NAME 未在目標數據庫實例向監聽器註冊;
  2. 若客戶端配置未變,則為服務端配置變更導致註冊失效。

註冊機制

  • 實例參數 SERVICE_NAMES 決定註冊的服務名(默認 DB_NAME.DB_DOMAIN 或 DB_UNIQUE_NAME);
  • PMON 進程定期(默認 60 秒)向監聽器註冊;
  • 監聽器重啟後,實例需重新註冊。

解決步驟

  1. 檢查實例參數:SHOW PARAMETER SERVICE_NAMES,確認包含客戶端使用的服務名;
  2. 若缺失,動態添加:ALTER SYSTEM SET SERVICE_NAMES='orcl,myservice' SCOPE=BOTH;;
  3. 強制立即註冊:ALTER SYSTEM REGISTER;(需 SYSDBA);
  4. 驗證監聽器狀態:LSNRCTL STATUS 或 LSNRCTL SERVICES 查看已註冊服務;
  5. 客戶端測試:TNSPING myservice、SQLPLUS user/pwd@myservice。

常見誘發場景

  • 修改 DB_NAME/DB_DOMAIN 未同步 SERVICE_NAMES;
  • 克隆數據庫未修改服務名導致衝突;
  • 監聽器重啟後未等待 60 秒自動註冊即測試連接;
  • LOCAL_LISTENER 參數指向錯誤監聽器地址。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved