5

32位IDE访问Oracle 数据库错误的解决​

 1 year ago
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.
neoserver,ios ssh client

32位IDE访问Oracle 数据库错误的解决​

精选 原创

匆匆的那年 2022-12-14 13:46:54 ©著作权

文章标签 oracle 数据源 bc 文章分类 软件设计 软件研发 阅读数159

前言:本人最近在温习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,随后报此错。​

32位IDE访问Oracle 数据库错误的解决​_bc

2.2.2检查设置

ODBC设置本身应该没有问题。检查64位ODBC设置如下:​

32位IDE访问Oracle 数据库错误的解决​_数据源_02

实际上用不上64位ODBC设置,因为PB是32位的。64位ODBC设置程序为:“ODBC数据源(64位)”,可以直接在操作系统中搜索ODBC找到它。​

检查32位ODBC设置如下:​

32位IDE访问Oracle 数据库错误的解决​_bc_03

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,随后报此错。​

32位IDE访问Oracle 数据库错误的解决​_bc_04

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驱动。​

32位IDE访问Oracle 数据库错误的解决​_oracle_05

获得的文件分别为: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目录后,如下图:​

32位IDE访问Oracle 数据库错误的解决​_数据源_06

强烈建议不放到home目录中,因为home下有一个instantclient目录,很可能混淆,如下图:​

32位IDE访问Oracle 数据库错误的解决​_数据源_07


3.2.3设置环境变量

设置环境变量Path以便于PB能访问到instantclient_21_7,如下图:​

32位IDE访问Oracle 数据库错误的解决​_oracle_08

3.2.4 测试

到PB中连接数据源(双击或者右键菜单connect),还是出错,不过错误为:Error while trying to retrieve text for error ORA-01804,如下图:​

32位IDE访问Oracle 数据库错误的解决​_数据源_09

这个问题只要调整path中home路径和instantclient路径顺序即可,如下图:​

32位IDE访问Oracle 数据库错误的解决​_bc_10

重新测试,连接成功,如下图:​

32位IDE访问Oracle 数据库错误的解决​_数据源_11

附上PB的oci连接设置:​

32位IDE访问Oracle 数据库错误的解决​_数据源_12

3.3 ODBC驱动安装


3.3.1解压和放置文件夹

解压instantclient-odbc-nt.zip到刚才的instantclient_21_7目录下。​


3.3.2 执行安装文件

执行odbc_install.exe文件,如下图:​

32位IDE访问Oracle 数据库错误的解决​_bc_13

双击后,屏幕一闪而过,表示安装成功。​


3.3.3 设置环境变量

设置环境变量TNS_ADMIN为D:\oracle\home\NETWORK\ADMIN,这个目录是tnsnames.ora所在目录,如下图:​

32位IDE访问Oracle 数据库错误的解决​_bc_14

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位IDE访问Oracle 数据库错误的解决​_oracle_15
32位IDE访问Oracle 数据库错误的解决​_数据源_16

新的32位ODBC数据源配置如下:

32位IDE访问Oracle 数据库错误的解决​_oracle_17

到PB中修改ODBC连接配置,如下:​

32位IDE访问Oracle 数据库错误的解决​_数据源_18

但是,到PB中连接时还是出错:​

32位IDE访问Oracle 数据库错误的解决​_bc_19

解决办法是修改32位ODBC数据源配置中的“TNS Service Name”,用连接串(我使用的是dbserver:1521/orcl,其中dbserver是oracle数据库服务器名称,1521是端口,orcl是数据库实例名称)替换ORACLR_CONNECTION_DATA,如下图:

32位IDE访问Oracle 数据库错误的解决​_oracle_20

点上图中“Test Connection”,提示成功,如下图:​

32位IDE访问Oracle 数据库错误的解决​_数据源_21

在PB中重新连接ODBC 连接profile(双击或者右键菜单connect),提示成功,如下图:​

32位IDE访问Oracle 数据库错误的解决​_数据源_22

到此成功解决问题!!!​

参考链接:​

(1)​ ​win7 64位系统 PB连接oracle数据库出现“oracle library oci.dll could not be loaded”问题的解决方法​​​

(2)​ ​32位元odbc配置oracle,Oracle的32位ODBC驱动​​​

  • 打赏
  • 收藏
  • 评论
  • 分享
  • 举报

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK