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

ORA-12545 連接失敗:ws2_32.dll 版本衝突導致的動態庫加載異常分析

     編輯:Oracle 教學

ORA-12545 連接失敗:ws2_32.dll 版本衝突導致的動態庫加載異常分析

XP 系統上同一 Oracle Client 配置,應用 AX2 連接成功,AX1 卻報 ORA-12545: 因目標主機或對象不存在, 連接失敗。經排查,並非網絡或配置問題,而是 AX1 目錄下攜帶了一個殘缺的 ws2_32.dll(Windows Socket 庫),導致 OCI 動態庫加載錯誤版本。

排查關鍵證據

  • 編寫純 OCI 測試程序 TestOCI.exe,放在不同目錄運行:僅在 AX1 目錄下失敗。
  • 二分法屏蔽文件,鎖定 ws2_32.dll 為禍首。
  • 對比動態庫加載日誌:
    • 成功:Loaded "c:\windows\system32\WS2_32.DLL"(291 KB)
    • 失敗:Loaded "g:\aaa\program\WS2_32.DLL"(85 KB,殘缺版本)

根因

Windows DLL 搜索順序優先加載應用程序目錄下的同名 DLL。AX1 目錄下的 ws2_32.dll 版本不全,導致 Socket 功能不完整,OCI 連接過程中調用 Socket 失敗,Oracle 錯誤碼誤判為「目標主機不存在」。

解決方案

刪除 AX1 程序目錄下的 ws2_32.dll,強制加載系統目錄 C:\Windows\System32\ws2_32.dll,連接即恢復正常。

補充:此問題僅在 XP 復現,Win 7 因 DLL 搜索順序機制不同不受影響。

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