32位IDE访问Oracle 数据库错误的解决
source link: https://blog.51cto.com/u_5526964/5936649
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
32位IDE访问Oracle 数据库错误的解决
精选 原创前言:本人最近在温习PowerBuilder,当访问Oracle数据库时遇到了两个问题,本质是32位和64位程序错位问题。本文提供这两个32位IDE访问Oracle 11g/10g 64位数据库连接错误的解决办法。为了备忘以及帮助别人,特此记录解决问题的过程。
1.版本采用原则
在给出解决办法之前,应说明开发工具和开发包版本采用原则。我的原则是:使用最新稳定版本的前一个稳定版本。理由是,每当新稳定版本,我一般会迁移到前一个稳定版本,这样能解决很多已知bug,也能提前做好移植工作,以免发布版本和实施版本时由于版本兼容问题而措手不及。
但是,现实有时候很残酷,由于成本、时间等原因,老版本可能一直使用下去。这时候更换开发环境、测试环境、线上运行环境,就会遇到大量兼容问题、开发工具已知bug波及问题、开发包已知bug波及问题等。本文将要解决的问题就是类似问题。
2.问题现象
2.1开发环境
所要维护的老系统用PB开发,我要重新构建开发环境:
- 操作系统:64位Windows 10
- 开发IDE:32位PowerBuilder 12.6(以下简称PB)
- 数据库:64位Oracle 11g
PB是32位的,所以不管是采用ODBC访问Oracle,还是采用OCI(英文全称为Oracle Call Interface)连接Oracle均出现问题。我相信,不采用PB而使用其他32位开发工具也会出现相同问题,因此以上开发环境中用其他32位开发工具,例如visual basic早期版本,也能参考本文的办法解决问题。
2.2 ODBC错误
2.2.1错误现象
如下图,PB报错提示Error while trying to retrieve text for error ORA-01019,在PB的Database中双击数据源或者执行弹出菜单connect,随后报此错。
2.2.2检查设置
ODBC设置本身应该没有问题。检查64位ODBC设置如下:
实际上用不上64位ODBC设置,因为PB是32位的。64位ODBC设置程序为:“ODBC数据源(64位)”,可以直接在操作系统中搜索ODBC找到它。
检查32位ODBC设置如下:
32位ODBC设置程序为:“ODBC data sources(32-bit)”,可以直接在操作系统中搜索ODBC找到它。
2.2.3问题分析
不管是32位ODBC还是64位ODBC都有问题,这是因为Oracle是64位的,提供的ODBC驱动也是64位的。
2.3 OCI错误
2.3.1错误现象
如下图,PB报错提示Oracle library OCI.dll could not be loaded,在PB的Database中双击数据源或者执行弹出菜单connect,随后报此错。
2.3.2问题分析
PB找到的OCI驱动是64位的,因为PB自动按照oracle的安装设置来寻找oci.dll等文件。
3.解决过程
3.1下载32位驱动
需要找到oracle提供的官方驱动,链接为:
https://www.oracle.com/database/technologies/instant-client/microsoft-windows-32-downloads.html
如下图,点basic和odbc两个链接分别下载OCI和ODBC驱动。
获得的文件分别为:instantclient-basic-nt.zip和instantclient-odbc-nt.zip,因为本文编写之时,驱动的最新版本为21.7.0.0.0,所以这两个文件的版本号为:21.7.0.0.0
3.2 OCI驱动安装
3.2.1解压
解压instantclient-basic-nt.zip到oracle安装目录的product目录下,一般oracle默认安装在:<oracle基目录>+<product目录>+<home目录>,例如:d:\oracle\product\11.2.0\dbhome_1。而我的安装目录在D:\oracle\home。
3.2.2重新放置文件夹
解压后的目录为instantclient_21_7,放到product目录后,如下图:
强烈建议不放到home目录中,因为home下有一个instantclient目录,很可能混淆,如下图:
3.2.3设置环境变量
设置环境变量Path以便于PB能访问到instantclient_21_7,如下图:
3.2.4 测试
到PB中连接数据源(双击或者右键菜单connect),还是出错,不过错误为:Error while trying to retrieve text for error ORA-01804,如下图:
这个问题只要调整path中home路径和instantclient路径顺序即可,如下图:
重新测试,连接成功,如下图:
附上PB的oci连接设置:
3.3 ODBC驱动安装
3.3.1解压和放置文件夹
解压instantclient-odbc-nt.zip到刚才的instantclient_21_7目录下。
3.3.2 执行安装文件
执行odbc_install.exe文件,如下图:
双击后,屏幕一闪而过,表示安装成功。
3.3.3 设置环境变量
设置环境变量TNS_ADMIN为D:\oracle\home\NETWORK\ADMIN,这个目录是tnsnames.ora所在目录,如下图:
3.3.4 测试
测试方法是打开windows10操作系统的“ODBC data sources(32-bit)”程序(其他版本的win操作系统可能不一样),删除以前建的oracle数据源,点“添加”,显示“创建新数据源”弹窗,会发现最后比以前多了一列:Oracle in instantclient_21_7。这个表示odbc驱动安装成功。
继续设置数据源,TNS Service Name设置为ORACLR_CONNECTION_DATA ,ORACLR_CONNECTION_DATA 是使用Oracle Net Configuration Assistent设置的名称,如下:
新的32位ODBC数据源配置如下:
到PB中修改ODBC连接配置,如下:
但是,到PB中连接时还是出错:
解决办法是修改32位ODBC数据源配置中的“TNS Service Name”,用连接串(我使用的是dbserver:1521/orcl,其中dbserver是oracle数据库服务器名称,1521是端口,orcl是数据库实例名称)替换ORACLR_CONNECTION_DATA,如下图:
点上图中“Test Connection”,提示成功,如下图:
在PB中重新连接ODBC 连接profile(双击或者右键菜单connect),提示成功,如下图:
到此成功解决问题!!!
参考链接:
(1) win7 64位系统 PB连接oracle数据库出现“oracle library oci.dll could not be loaded”问题的解决方法
- 打赏
- 赞
- 收藏
- 评论
- 分享
- 举报
上一篇:经典技术回顾和借鉴-JSP编程
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK