使用 OmniDB 软件 连接Oracle数据库时 ,报错 Cannot locate a 32-bit Oracle Client library
;
在网上查看说这是由于Oracle客户端instanceclient, 系统, Python 三者版本位数不对应。
解决过程
-
首先查看数据库服务端的版本:
SELECT * FROM V$VERSION
查询结果是64位 -
查看python版本:
也是64位;
按理说Oracle客户端instanceclient不匹配的话应该要报错Cannot locate a 64-bit Oracle Client library
64位才对,而不是32位 -
先到Oracle client官网下载https://www.oracle.com/database/technologies/instant-client/downloads.html instantclient-basic-windows.x64-12.2.0.1.0.zip 12版本的64位客户端文件,把Oracle服务端下的oci.dll文件替换为下载的压缩包中的,然而还是报错(其中重启了软件和数据库也没用);
-
没办法,只能先抱着试一试的心态下载32位的客户端文件,并再次替换数据库中的oci.dll,结果这次连启动Oracle也不行了。
-
再次查看网上的解决方案,其中说到需要配置客户端的环境变量;因为数据库就安装在本机,我是没有配置的,鉴于之前的报错问题为32bit,还是把32位的客户端文件路径配置上去。如下:
将客户端的文件路径放于服务端之前,避免又读到服务端64位的oci.dll。
重启系统后,连接未报错。
后续:
之前困惑于这个报错提示,DP-1047:Cannot locate a 32-bit Oracle Client library
为 python的 Cx_oracle包连接时的错误,为什么用这个软件连接会有。
后面看到软件安装路径下全是python文件,这才意识到OmniDB 是 python写的,所以。。