ODBC Driver是一种动态链接库 (DLL),支持 ODBC 的应用程序(如 Excel)可以用它来访问 ODBC 数据源。每个 ODBC 驱动程序针对一个数据库管理系统 (DBMS),如 SQL Server、Access 等等。
[root@dca01 tmp]# rpm -qa | egrep 'gcc|make'
# 如果没有以上工具,可以搭建yum源快速安装
[root@dca01 tmp]# yum -y install gcc make
下载地址:http://ftp.unixodbc.org/
[root@loaclhost ~]# tar -xvf unixODBC-2.3.1.tar.gz
[root@loaclhost ~]# cd unixODBC-2.3.1/
#--prefix=/test指定安装目录为/test,如果不指定会默认安装到/usr/local,根据需要确定是否指定其他安装目录;如果是arm架构机器,执行 . /configure --prefix=/test --build=arm-linux,高版本unixODBC不区分架构使用./configure --prefix=/test即可
[root@loaclhost unixODBC-2.3.1]# ./configure --prefix=/test
[root@localhost unixODBC-2.3.1]# make
[root@localhost unixODBC-2.3.1]# make install
# 输出odbc driver配置项路径等内容,注意下方截图为2.3.1版本,重点关注 unixODBC 2.3.1所在行下面的内容;如果执行后发现drivers,system data sources等项配置的路径跟实际情况不符合,可以执行export ODBCSYSINI=/test/etc ,重新执行odbcinst -j后如果没有问题,更新至环境变量
[root@localhost unixODBC-2.3.1]# odbcinst -j

USER DATA SOURCES 对应的文件里面内容为空,不需要写配置项
1.odbc.ini
#此处的odbc.ini路径是通过odbcinst -j输出的SYSTEM DATA DOURCES项的路径
vim /usr/local/etc/odbc.ini
#将以下内容根据实际情况填写
[dm8] #driver name 用于isql 测试
Description = DM ODBC DSND
# 这里填的驱动需与 odbcinst.ini 中的节点名称相同
Driver = DM8 ODBC DRIVER
# 达梦数据库的地址,也可以填写具体ip,例127.0.0.1
SERVER = localhost
# 数据库用户名,根据数据库的实际情况填写
UID = SYSDBA
# 数据库密码,根据实际情况填写
PWD = Dameng123
# 达梦数据库端口,根据实际情况填写
TCP_PORT = 5238 2.odbcinst.ini
#此处的odbc.ini路径是通过odbcinst -j输出的DRIVERS项的路径
vim /usr/local/etc/odbcinst.ini
#将以下内容根据实际情况填写
[DM8 ODBC DRIVER]
Description = ODBC DRIVER FOR DM8
#此处填写的地址是{DM_HOME}/bin/libdodbc.so,按照实际情况填写,{DM_HOME}为达梦数据库安装目录,举个例子:/test/dmdba/dmdbms/bin/libdodbc.so
DRIVER = /test/dmdba/dmdbms/bin/libdodbc.so
五、验证连接
#如果输出结果为下图,表示连接成功
isql dm8 -v
报错 “[IM002][unixODBC][Driver Manager]Data source name not found, and no default driver specified [ISQL]ERROR: Could not SQLConnect”
a. 配置文件odbcinst.ini和odbc.ini路径是否正确,配置项是否正确
b. 配置文件odbcinst.ini和odbc.ini中每一行的开头不允许有空格
c. 如果发现odbcinst.ini路径不符合预期,可以通过export ODBCSYSINI=/DCE/rc110/etc/进行变更,注意后面的路径前缀根据实际情况变更
2. 报错[IM004] [Microsoft][ODBC Driver Manager] Driver's SQLAllocHandle on SQL_HANDLE_ENV
a. 检查odbcinst.ini文件配置的driver路径是否存在,注意指向的是libdodbc.so的path
3. 安装unixODBC完成但是执行odbcinst -j 提示command not found
a. 使用root账户编辑/etc/profile ,将odbcinst所在目录追加到环境变量
4. 报错"[01000][unixODBC][Driver Manager]Can’t open lib ‘/dm8/dmdba/dmdbms/bin/libdodbc.so’ : file not found [ISQL]ERROR: Could not SQLConnect"
a. 配置环境变量LD_LIBRARY_PATH
#以root身份编辑
vim /etc/profile
#/dm8/dmdba/dmdbms为达梦数据库安装目录即前面提到的{DM_HOME}
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/dm8/dmdba/dmdbms/bin/"
export PATH=$PATH:/dm8/dmdba/dmdbms/bin
#在对应用户身份下的目录执行
source /etc/profile
b. 确认libdodbc.so所在路径当前用户有权限,如果没有权限需要切换到root用户修改一下文件夹权限
#注意此处的路径根据实际安装情况来
chmod 755 {DM_HOME}
5. symbol lookup error: /home/***/bin/libdodbc.so: undefined symbol : os_mutex2_create
a. 检查环境变量,一般是LD_LIBRARY_PATH环境变量配置问题;目前遇到这个问题是在非root用户下,发现/etc/profile中设置的环境变量,和 ~/.bashrc中设置有冲突,删除/etc/profile下对应内容,并在~/.bashrc中设置即可