64位安裝oracle instantclient odbc方法和故障解決

事由:python腳本做事務的時候 cx_Oracle連接oracle數據庫在上傳數據的時候 經常發送斷開連接而導致事務失敗,因爲沒有數據庫的管理權限,所以打算試試用JDBC和ODBC的連接方式會不會更好一點(太閒了)。在配置odbc時候有點頭疼!所以做一個記錄!

系統 :64位win10

python:3.7 64位  所以只能裝64位的odbc驅動

oracle:11.2.0.4.0 64位,選擇這個,是因爲遠程Oracle數據庫是11g的

 

1 安裝文件解壓

instantclient-basic-windows.x64-11.2.0.4.0.zip

instantclient-odbc-windows.x64-11.2.0.4.0.zip

instantclient-sqlplus-windows.x64-11.2.0.4.0.zip

解壓到同一目錄,如:D:\installer\oracle\instantclient_11_2

 

2 系統變量配置

Path :D:\installer\oracle\instantclient_11_2

ORACLE_HOME : D:\installer\oracle\instantclient_11_2

TNS_ADMIN:D:\installer\oracle\instantclient_11_2

NLS_LANG:SIMPLIFIED CHINESE_CHINA.ZHS1或者AMERICAN_AMERICA.ZHS16GBK

 

3 安裝odbc

管理員模式進入cmd,

cd到D:\installer\oracle\instantclient_11_2 執行odbc_install.exe

 

4 tns ora文件複製

 

32位按上述步驟就可以正常配置數據庫了

64位卻會有錯誤提示 –》添加數據庫出現錯誤14001,加載驅動失敗,並行配置不正確。

 

錯誤問題查找

1 Cmd命令      SxsTrace Trace -logfile:SxsTrace.etl      回車開啓追蹤

2 點擊添加odbc數據庫 出現14001錯誤

3 回到cmd窗口,enter結束追蹤

4 把追蹤文件格式轉變爲可閱讀的txt格式:SxsTrace Parse -logfile:SxsTrace.etl -outfile:SxsTrace.txt

 

在cmd當前目錄文件夾下找到sxstrace.txt文件,查看文本內容,其中有錯誤項,是vc80的問題,因此到微軟官網下了個vc2005 64的版本 安裝,然而配置odbc的時候還是一樣的錯誤

1 仔細看最新的sxstrace.txt內容,發現在錯誤的前一段,有描述用到安裝目錄中的Microsoft.VC80.MFC.manifest文件,然而,安裝目錄中根本沒有這個文件,

2 因此在網絡上搜索並下載了一個Microsoft.VC80.MFC.manifest放進安裝目錄。

3 用txt文本打開,把其中的版本號改成和sxstrace.txt中的錯誤部分中提及的vc版本號一致,注意64位系統要改成amd64

4 再次配置odbc,結果還是錯誤,錯誤變成了126

5 這裏不知道是什麼錯誤了,猜測是dll的問題,所以下載了Microsoft.VC80.MFC.manifest文件中提及的對應版本的dll放進安裝目錄,再次配置odbc ,錯誤變成了139。

 

到此,我沒有辦法了。因此把Microsoft.VC80.MFC.manifest和加進來的dll轉移到一個文件夾放好,休息一會兒,沒想到再次回來的時候  odbc配置奇蹟的成功了。我也不知道是哪一步對了....

Orcle的odbc配置要注意:

 

Data Source Name      自己取的名字如:"test"

Description                 連接描述  這裏可不填

TNS Service Name     有兩種方式進行

一是點擊下拉tnsnames.ora配置的名稱如TEST"    

二是填寫IP地址+端口號+SID 如: "ip:1521/server name"

UserID                         訪問數據庫的用戶名

 

TNS service Name 這裏只有第二種填寫方式纔可以用python通過pyodbc進行連接,否則連接會失敗:提示無效的連接字符串屬性,

而且連接必須用dsn方式連接

conn = pyodbc.connect ('DSN=Data Source Name;PWD=******')

直接用字符串連接的方式(運行錯誤)

constr = 'DRIVER={Oracle in instantclient_11_2};’

constr = constr + ‘SERVER=ip:1521;’

constr = constr +’DATABASE=Data Source Name;UID=UserID;PWD=******'

cnxn =pyodbc.connect(constr)

錯誤提示:協議適配器錯誤,目前還不知道如何處理這個問題,但應該和服務器設置有關

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章