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

Oracle 客戶端連接全攻略:tnsnames.ora、listener.ora、sqlnet.ora、常見錯誤碼 12154/12514 徹底解析

     編輯:Oracle 資料庫基礎

連接鏈路必備條件

  • 客戶端安裝 Oracle Client(或 JDBC Thin 模式免安裝);
  • 服務端:Listener 已啟動、Database 已 OPEN。

三大配置文件職責

文件端核心參數
sqlnet.ora雙端NAMES.DIRECTORY_PATH=(TNSNAMES, EZCONNECT)、NAMES.DEFAULT_DOMAIN
tnsnames.ora客戶端網絡服務名 → (HOST, PORT, SERVICE_NAME)
listener.ora服務端LISTENER 定義、SID_LIST_LISTENER 靜態註冊

tnsnames.ora 標準範例

TEST =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = testserver)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl.testserver.com)
    )
  )

關鍵點:HOST 需在客戶端可 ping 通;PORT 必須與 listener.ora 一致;SERVICE_NAME 需與服務端 SHOW PARAMETER service_name 一致。

DEFAULT_DOMAIN 陷阱 (ORA-12154 核心原因)

若 sqlnet.ora 含 NAMES.DEFAULT_DOMAIN = server.com,客戶端輸入 @test 會被自動改寫為 @test.server.com,導致 tnsnames.ora 找不到別名。

解決:註釋掉 NAMES.DEFAULT_DOMAIN 或在 tnsnames.ora 中使用全稱 test.server.com。

常見錯誤碼速查

錯誤含義排查
TNS-12154 / ORA-12154解析服務名失敗tnsnames.ora 缺別名、DEFAULT_DOMAIN 干擾、大小寫不匹配
ORA-12514Listener 無法解析 SERVICE_NAMEtnsnames.ora 中 SERVICE_NAME 與 listener 註冊的不一致
ORA-12541無監聽程序Listener 未啟動、端口/防火牆阻斷、HOST/IP 錯誤
ORA-12505SID 不識別使用 SID 連接但實例未動態註冊,改用 SERVICE_NAME 或靜態註冊 SID_LIST

關鍵術語辨析

  • DB_NAME:數據庫名(≤8 字符);
  • DB_DOMAIN:域後綴;
  • GLOBAL_NAME = DB_NAME.DB_DOMAIN;
  • SERVICE_NAME:8i+ 引入,一庫多服務名,默認 = GLOBAL_NAME;
  • SID:實例標識;
  • NET SERVICE NAME:客戶端別名,實現位置透明。

終極測試步驟

  1. 服務端 lsnrctl status 確認服務已註冊;
  2. 客戶端 tnsping 別名 驗證解析;
  3. sqlplus user/pwd@別名 完整連接;
  4. GUI 工具驗證。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved