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配置奇迹的成功了。我也不知道是哪一步对了....

64位安装oracle instantclient odbc方法和故障解决_第1张图片

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)

错误提示:协议适配器错误,目前还不知道如何处理这个问题,但应该和服务器设置有关

你可能感兴趣的:(python)