当前位置: 首页 > article >正文

unixODBC编程(一)安装配置ODBC

在类Unix的操作系统环境中访问数据库,如果想要有好的移植性,或者更换数据库而不需要修改代码,最好的方式就是用ODBC访问数据库。ODBC是微软公司在windows环境中访问不同的数据库而定义的统一访问接口,在Unix环境中有一个软件包叫做unixODBC,使用它可以用同样的函数来访问数据库。

在使用unixODBC之前要先安装它,从官网unixODBC下载最新的软件包,例如unixODBC-2.3.12.tar.gz,这是一个源代码压缩文件,需要编译后安装。下面以linux下安装unixODBC为例,安装到/home/oracle目录下,配置oracle的ODBC驱动程序,看一下操作步骤。

以oracle用户登录linux,首先把软件包传到一个临时目录下,比如/tmp目录。

在当前目录下解压,tar xvfz unixODBC-2.3.12.tar.gz。

由于linux系统下默认会安装低版本的unixODBC,为了区别开来,我们把新的unixODBC安装在/home/oracle目录下,然后配置使用新版本的软件包。

进入源程序目录,cd unixODBC-2.3.12

配置软件编译环境,./configure --prefix /home/oracle/unixODBC,这个命令替换默认目录,把软件安装在/home/oracle/unixODBC目录下。

编译源代码,make

安装软件包,make install

执行完上面的命令,在/home/oracle下已经创建了一个目录unixODBC,所有头文件,库文件,配置文件,可执行文件都在里面。下面配置使用新的unixODBC软件。unixODBC软件使用两个环境变量来找到软件的位置和配置文件的位置,一个是ODBCHOME,指定软件安装的位置,一个是ODBCINI指定odbc.ini文件的位置,odbc.ini一般存放在ODBCHOME下的etc目录中。创建一个文件odbc.env,用来存放环境变量,内容如下。

ODBCHOME=/home/oracle/unixODBC
export ODBCHOME

ODBCINI=$ODBCHOME/etc/odbc.ini
export ODBCINI

ORACLE_HOME=/u01/oracle/product/19.3.0/db_1
export ORACLE_HOME

PATH=$ODBCHOME/bin:$PATH
export PATH

LD_LIBRARY_PATH=$ODBCHOME/lib:$ORACLE_HOME/lib
export LD_LIBRARY_PATH

文件中还设置了ORACLE_HOME和LD_LIBRARY_PATH,因为后面要配置oracle的ODBC驱动程序,这是一个动态链接库文件,位置在ORACLE_HOME/lib下。

执行这个环境文件设置环境变量,使用命令 . ./odbc.env

下面就要配置Oracle的驱动程序和应用程序使用的数据源名称了。驱动程序在$ODBCHOME/etc/odbcinst.ini,编辑输入下面的内容。

[ora19c_driver]
Description=ODBC driver for Oracle 19c
Driver=/u01/oracle/product/19.3.0/db_1/lib/libsqora.so.19.1
Setup=/u01/oracle/product/19.3.0/db_1/lib/libsqora.so.19.1

这里主要指定了Oracle ODBC动态库的位置和名称。

配置数据源在$ODBCHOME/etc/odbc.ini文件中,编辑输入下面的内容。

[ora_test]
Description=Oracle ODBC test DSN
Driver=ora19c_driver
ServerName=//192.168.16.131:1521/pdb_dx

这个文件主要定义了数据源名称(DSN)和连接数据库的信息还有使用的驱动程序。在这里数据源名称是ora_test,驱动程序是在odbcinst.ini中配置的ora19c_driver,连接数据库的信息是//192.168.16.131:1521/pdb_dx,也可以是一个tnsname,替换成自己的主机IP,端口和服务名。

用isql测试一下数据源是否能用。命令为isql -v ora_test scott tiger

其中-v表示打印详细信息,ora_test是数据源的名称,scott是数据库用户名,tiger是用户密码。

+---------------------------------------+
| Connected!                            |
|                                               |
| sql-statement                         |
| help [tablename]                    |
| echo [string]                           |
| quit                                         |
|                                                |
+---------------------------------------+

如果出现上面的信息,表示数据源配置成功,否则会显示出错信息。

说一下我在配置的过程中遇到的问题,还是有些不顺利的地方。

第一次配置完后,用isql测试,出现下面的错误。

isql: symbol lookup error: /oracle11/product/11.2/lib/libsqora.so.11.1: undefined symbol: SQLGetPrivateProfileStringW

用nm libsqora.so.11.1 | grep "SQLGetPrivate"查看连接库中的函数,确定存在上面的函数,但是在动态连接时找不到函数。网上查了半天,有人说是unixODBC的版本问题,继续查找,在2.2.11版本之前确实没有解决这个问题,但是现在用的是2.3.12版本,肯定已经解决这个问题了,所以不是unixODBC的版本问题,后来又查到在redhat(centOS)5.x版本中都存在这个问题,是由于这些linux版本不是Oracle的认证版本,存在bug,所以出现问题。

第二次配置,换一个linux版本,使用了centOS7,重复上面的配置步骤,最后使用isql测试。

仍然出现错误,libsqora.so.11.1文件打不开,奇怪了,使用命令ldd看看哪些依赖文件没有。

ldd /oracle11/product/11.2/lib/libsqora.so.11.1

发现libodbcinst.so.1 => not found

这个文件应该在$ODBCHOME/lib下,查看一下发现只有libodbcinst.so.2文件,没有libodbcinst.so.1,把libodbcinst.so.2拷贝成libodbcinst.so.1,然后执行isql测试,这次通过了。

第三次配置,换了Oracle版本,使用Oracle 19c,这次顺利通过。


http://www.kler.cn/a/316734.html

相关文章:

  • 蓝队知识浅谈(上)
  • Spring高手之路26——全方位掌握事务监听器
  • 实现 MVC 模式
  • Linux 函数在多个地方被同时调用时,函数中的变量如何管理,确保互不影响
  • JFROG相关API
  • vue中如何关闭eslint检测?
  • 【STL】vector 基础,应用与操作
  • Java综合练习题—TCP通信协议+xml操作+序列化反序列化综合题
  • 如何使用ant design vue的a-select下拉框,实现既能输入内容,也可以下拉选择的效果,apiselect同样适用
  • 浅谈spring 后端项目配置logback日志
  • 无人机之4G模块的主要功能和优势
  • 华为HarmonyOS地图服务 1 -- 如何实现地图呈现?
  • Flask高级特性实战
  • 字符串反转
  • 【kafka-04】kafka线上问题以及高效原理
  • HarmonyOS鸿蒙开发实战(5.0)网格元素拖动交换案例实践
  • Go语言并发编程之sync包详解
  • 前后端分离,使用MOCK进行数据模拟开发,让前端攻城师独立于后端进行开发
  • 【Verilog学习日常】—牛客网刷题—Verilog快速入门—VL21
  • Kotlin高阶函数func
  • 计算机毕业设计 美妆神域网站的设计与实现 Java实战项目 附源码+文档+视频讲解
  • 一对一视频通话软件Call-Me
  • 某采招网爬虫数据采集逆向
  • 医学数据分析实训 项目四 回归分析--预测帕金森病病情的严重程度
  • I.MX6U裸机-C语言版LED灯实验
  • ld-linux-x86-64.so.2