一、ODBC介绍
ODBC,即开放数据库连接Open Database Connectivity,是为解决 异构数据库间的数据共享而产生的一种数据库访问接口标准。ODBC 为异构数据库访问提供统一接口,允许应用程序以SQL 为数据存取标准,存取不同DBMS管理的数据;使应用程序直接操纵DB中的数据,免除随DB的改变而改变。用ODBC 可以访问各类计算机上的DB文件,甚至访问如Excel 表和ASCI I数据文件这类非数据库对象。
二、unixODBC安装以及配置
unixODBC安装
tar -xzvf unixODBC-2.3.0.tar.gz
cd unixODBC-2.3.0
./configure --enable-gui=no
make && make install
直接编译安装,正常安装完毕后,查看ODBC版本以及配置信息如下:
查看ODBC版本:odbc_config --version
查看ODBC配置信息: odbcinst -j![](https://img-blog.csdnimg.cn/a30dd7f2bcf04db5bd3ec5b93d670a02.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5piO5pyI6KOF6aWw5L2g55qE56qX,size_20,color_FFFFFF,t_70,g_se,x_16)
正常安装完成后,/usr/local/etc/odbcinst.ini 和 /usr/local/etc/odbc.ini 两个文件都是空的,需要我们手动写配置,具体配置如下:
![](https://img-blog.csdnimg.cn/0d51bba9959e4d61920dcdb17372ab64.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5piO5pyI6KOF6aWw5L2g55qE56qX,size_16,color_FFFFFF,t_70,g_se,x_16)
odbcinst.ini中,DRIVER行配置为ODBC的动态链接库文件具体路径,这里注意千万不要配置错误
DERVER:动态链接库路径(如不确定,可以find搜索看下该文件具体路径,然后指定)
odbc.ini,即为当前需要登录的DM数据库具体地址以及账号密码端口号。
[dm8]:这里是执行isql命令后跟的参数名,可以任意指定,类似登录时的别名,注意命名冲突
SERVER:ip地址
UID:用户名
PWD:用户密码
TCP_PORT:数据库实例对应的端口号
三、发现问题:连接报错
本身在安装完ODBC后,当前连接数据库是正常的,但是这本身属于测试环境,重启虚拟机再登录执行命令连接数据库,发现报错[ISQL]ERROR: Could not SQLConnect
![](https://img-blog.csdnimg.cn/e70fb083c8e14d429d77599d4e1b0830.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5piO5pyI6KOF6aWw5L2g55qE56qX,size_11,color_FFFFFF,t_70,g_se,x_16)
首先确认我们数据库是可以正常登录的,即发起ODBC连接异常,首先加-v参数查看具体报错原因
![](https://img-blog.csdnimg.cn/4f671b971f1c4cf88b6be5ede6ec7dd8.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5piO5pyI6KOF6aWw5L2g55qE56qX,size_20,color_FFFFFF,t_70,g_se,x_16)
报错提示动态链接库文件不存在:[01000][unixODBC][Driver Manager]Can't open lib '/dm8/bin/libdodbc.so' : file not found
根据该报错,我们先确认文件是否存在,发现实际上是有该文件的
![](https://img-blog.csdnimg.cn/5fac4c75a5664122941b9ac2faba6a89.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5piO5pyI6KOF6aWw5L2g55qE56qX,size_20,color_FFFFFF,t_70,g_se,x_16)
文件存在的话,系统无法识别到,我们可以ldd命令看下这个文件的依赖是否出现问题:
ldd /dm8/bin/libdodbc.so
![](https://img-blog.csdnimg.cn/c303e438443541a8bb7452c847a8499c.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5piO5pyI6KOF6aWw5L2g55qE56qX,size_20,color_FFFFFF,t_70,g_se,x_16)
[root@localhost ~]# ldd /dm8/bin/libdodbc.so
linux-vdso.so.1 => (0x00007ffda23df000)
libdmdpi.so => not found
libdmfldr.so => not found
libdmelog.so => not found
libdmutl.so => not found
libdmclientlex.so => not found
libdmos.so => not found
libdmcvt.so => not found
libdmstrt.so => not found
librt.so.1 => /lib64/librt.so.1 (0x00007f77dcd39000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f77dcb1d000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f77dc918000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f77dc60f000)
libm.so.6 => /lib64/libm.so.6 (0x00007f77dc30d000)
libc.so.6 => /lib64/libc.so.6 (0x00007f77dbf4b000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f77dbd35000)
/lib64/ld-linux-x86-64.so.2 (0x00007f77dd184000)
[root@localhost ~]#
从上面报错可以看出,这个动态链接库的依赖,libdm*总计8个其他动态链接库not found,而这些动态链接库,从命名上就可以看出是DM*达梦数据库的动态链接库文件,然后我们再确认这些文件是否存在:
![](https://img-blog.csdnimg.cn/b25489fbbbc24cdfaeac6b482439ddfc.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5piO5pyI6KOF6aWw5L2g55qE56qX,size_14,color_FFFFFF,t_70,g_se,x_16)
结果发现报错的文件,在达梦安装目录下的bin目录下均存在;
文件存在而无法识别到,这里就想到了安装数据库时,一般都需要指定数据目录安装目录等,而系统在启动某个应用时,都会把这些指定的目录在某些配置文件里设置成变量,这里又属于重启虚拟机后才无法连接,因此基本上就可以判断出,大概属于设置的变量失效导致该问题 :
切换成数据库用户dmdba,vim $HOME/.bashrc 没有任何环境变量设置,即重启虚拟机,安装数据库时设置的那些变量就不生效了:
重新写入.bashrc永久设置环境变量
export PATH
export DISPLAY=:0 (这个是dmdba调用窗口安装数据库的配置,和上述问题无关)
export DM_HOME=/dm8
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/dm8/bin"
export PATH=$PATH:/$HOME/bin:$/HOME/.local/bin:$DM_HOME/bin
执行source .bashrc重新加载配置,然后重新发起连接,至此问题解决。
![](https://img-blog.csdnimg.cn/e96bd901e1714f859d045272b3d7cc0a.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5piO5pyI6KOF6aWw5L2g55qE56qX,size_17,color_FFFFFF,t_70,g_se,x_16)
了解更多达梦相关技术,也可访问学习达梦官网文档
DM 数据库快速上手指南 | 达梦技术文档