注册
UnixODBC安装部署及常见问题
专栏/技术分享/ 文章详情 /

UnixODBC安装部署及常见问题

输入法 2023/02/09 1562 2 0
摘要

01 |下载

官方地址:http://www.unixodbc.org/
推荐版本:DMHS安装推荐使用UnixODBC2.3.2版本
浏览器输入即刻下载:ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-2.3.2.tar.gz

02| 安装UnixODBC

安装位置说明:DMHS集群中,安装在目的端DMHS服务器上,以确保目的DMHS主机可以连接到目的数据库
目的端DMHS可以和目的数据库部署在不同的服务器上

01| yum安装

yum install unixODBC unixODBC-devel -y

02| 源码安装

tar xvf unixODBC-2.3.2.tar.gz yum install -y gcc libc6-dev # 服务器是 UNIX/LINUX 64bits执行以下两个export export CFLAGS="-maix64 -DBUILD_REAL_64_BIT_MODE" export OBJECT_MODE=64 ######################################### cd unixODBC-2.3.2 ./configure --enable-drivers=no --with-iconv-char-enc=GB18030 --enable-gui=no --enable-iconv=yes make && make install

【这里可能产生的报错】

在执行./configure时报错 如果执行上述步骤后还是报以下错误执行: export LIBS= export CFLAGS= 报错信息: configure: error: C compiler cannot create executables

有很多人建议重装GCC,但是确无济于事。
这个错误产生的原因其实很简单: 由于我们在编译软件之前,进行了export操作,改变了CFLAGS和LIBS的值。
这个时候只要讲这个值清空就可以了。

从编译产生的信息可以看到在系统中完整执行的参数

/bin/sh ./configure --disable-option-checking '--prefix=/usr/local' '--enable-drivers=no' '--with-iconv-char-enc=GB18030' '--enable-gui=no' '--enable-iconv=yes' 'CC=gcc' 'CFLAGS=' 'LIBS=' '--enable-ltdl-convenience' --cache-file=/dev/null --srcdir=.

03| 配置ODBC-root

注意odbc.ini中 Driver 要和odbcinst.ini里边的配置项名称保持一致
针对不同数据库预定义的驱动名:

  1. DM6:DM ODBC DRIVER
  2. DM7:DM7 ODBC DRIVER
  3. ORACLE10g:{Oracle in OraDb10g_home1}
  4. ORACLE11g:{Oracle in OraDb11g_home1}
  5. ORACLE9i:{Oracle in OraHome92}
  6. ORACLE12c:{Oracle in OraDB12home1}
  7. SQLSERVER:{SQL Server}
  8. POSTGRES:{PostgreSQL Unicode}
  9. MYSQL:{MySQL ODBC 5.1 Driver}
  10. HIVE:{Microsoft Hive ODBC Driver}
  11. GBASE8T:{IBM INFOMIX ODBC DRIVER}
  12. DB2:没有预定义,需要自定义

备注:驱动名在 odbc.ini 文件中。

如果使用数据源方式连接,可以在此处使用“DSN=<数据源名称>”,此时则会使用数据源名称、用户名、密码方式连接

00| 查看配置文件位置

一定要将配置文件配置到对应的位置,否则不生效

  • yum安装默认位置为/etc下
  • 源码安装默认位置为/usr/local/etc下
root@whx02 192.168.1.17 23:14:39 [pwd:~]# odbcinst -j unixODBC 2.3.1 DRIVERS............: /etc/odbcinst.ini SYSTEM DATA SOURCES: /etc/odbc.ini FILE DATA SOURCES..: /etc/ODBCDataSources USER DATA SOURCES..: /root/.odbc.ini SQLULEN Size.......: 8 SQLLEN Size........: 8 SQLSETPOSIROW Size.: 8

01| mysql5.x配置参考

odbcinst_file=`odbcinst -j | grep DRIVERS | awk -F ':' '{ print $2}'` odbc_file=`odbcinst -j | grep 'SYSTEM DATA SOURCES' | awk -F ':' '{ print $2}'` cat >${odbc_file} <<-EOF [mysql] # 这里要和odbcinst.ini中保持一致 Driver=MySQL ODBC 5.1 Driver DATABASE=mysql DESCRIPTION=MYSQL ODBC 5.1 DRIVER SERVER=192.168.219.128:8004 UID=admin PASSWORD=123456 EOF cat >${odbcinst_file} <<-EOF [MySQL ODBC 5.1 Driver] Driver=/usr/lib64/libmyodbc5.so UsageCount=1 EOF

02| mysql8的配置参考

odbcinst_file=`odbcinst -j | grep DRIVERS | awk -F ':' '{ print $2}'` odbc_file=`odbcinst -j | grep 'SYSTEM DATA SOURCES' | awk -F ':' '{ print $2}'` # odbc.ini配置 cat >${odbc_file} <<-EOF [mysql] # 这里要和odbcinst.ini中保持一致 [mysql] Driver=MySQL ODBC 8 Driver DATABASE=mysql DESCRIPTION=MYSQL ODBC 8 DRIVER SERVER=192.168.219.128:8004 UID=admin PASSWORD=123456 EOF # odbcinst.ini配置 cat >${odbcinst_file} <<-EOF [MySQL ODBC 8 Driver] Driver=/usr/local/mysql-connector-odbc-8.0.28-linux-glibc2.12-x86-64bit/lib/libmyodbc8a.so UsageCount=1 EOF

配置完成之后,可使用 isql 命令测试配置是否正确。
测试命令:isql -v [odbc_name] [user_name] [user_pwd]
以上配置的连接方式具体为:

isql -v mysql 或者: isql -v mysql1 admin 123456 输出: +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+

03| Oracle配置参考

可以下载官方的instance-client odbc包
https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html

odbc_file=`odbcinst -j | grep 'SYSTEM DATA SOURCES' | awk -F ':' '{ print $2}'` odbcinst_file=`odbcinst -j | grep DRIVERS | awk -F ':' '{ print $2}'` # 修改权限 chmod 755 ${odbc_file} ${odbcinst_file} # odbc.ini cat >${odbc_file} <<-EOF [ORACLE] Description = ORACLE ODBC DSN Driver = Oracle in OraDb11g_home1 ServerName = 172.16.230.134:1521/orcl UserID = dmhs Password = DMHS Port = 1521 EOF # odbcinst.ini,不同的数据库版本可能驱动版本不同,以实际为准 cat >${odbcinst_file} <<-EOF [Oracle in OraDb11g_home1] Description = ODBC DRIVER FOR ORACLE Driver = /u01/app/oracle/product/11.2.0/db_1/lib/libsqora.so.11.1 Threading = 0 EOF # 测试 su - oracle -c "isql -v ORACLE"

04| dm8配置参考

odbcinst_file=`odbcinst -j | grep DRIVERS | awk -F ':' '{ print $2}'` odbc_file=`odbcinst -j | grep 'SYSTEM DATA SOURCES' | awk -F ':' '{ print $2}'` dm_home=`su - dmdba -c 'echo $DM_HOME'` # odbc.ini cat >> ${odbc_file} <<-EOF [dm8] # 这里要和odbcinst.ini中保持一致 Driver=DM8 ODBC DRIVER DESCRIPTION=DM8 ODBC DRIVER SERVER=192.168.219.129:5236 UID=sysdba PWD=SYSDBA EOF # odbcinst.ini cat >>${odbcinst_file} <<-EOF [DM8 ODBC DRIVER] Driver=${dm_home}/bin/libdodbc.so UsageCount=1 EOF # 测试 su - dmdba -c 'isql dm8'

附:可能遇到的问题

01| [ISQL] 配置DM的ODBC时,配置错误

dmdba@whx02 192.168.219.129 20:52:08 [pwd:~]$ isql dm8 [ISQL]ERROR: Could not SQLConnect

这里是因为odbc.ini中只能配置成PWD而不能是PASSWORD

02| [01000] 连接dm8报libdodbc.so文件没有

root@whx02 192.168.219.129 20:44:17 [pwd:/usr/local/etc]# isql -v dm8 [01000][unixODBC][Driver Manager]Can't open lib '/home/dmdba/dm8/dm_home/bin/libdodbc.so' : file not found [ISQL]ERROR: Could not SQLConnect # 查看文件,发现文件存在 root@whx02 192.168.219.129 20:44:28 [pwd:/usr/local/etc]# ll /home/dmdba/dm8/dm_home/bin/libdodbc.so -rwxr-xr-x. 1 dmdba dinstall 191901 May 16 11:51 /home/dmdba/dm8/dm_home/bin/libdodbc.so root@whx02 192.168.219.129 20:47:11 [pwd:/usr/local/etc]# ldd /home/dmdba/dm8/dm_home/bin/libdodbc.so linux-vdso.so.1 => (0x00007ffd4c5e1000) 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 (0x00007f136dceb000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f136dacf000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f136d8cb000) libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f136d5c3000) libm.so.6 => /lib64/libm.so.6 (0x00007f136d2c1000) libc.so.6 => /lib64/libc.so.6 (0x00007f136cef3000) libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f136ccdd000) /lib64/ld-linux-x86-64.so.2 (0x00007f136e11f000)

可能的原因:

  • 这要看/home/dmdba/bash_profile中关于$DM_HOME的配置,如果有多个重复配置就会报错
  • 如果使用非dmdba用户加载不到/home/dmdba/bash_profile中关于$DM_HOME的配置也会报错
# 切换到dmdba用户在查看 dmdba@whx02 192.168.219.129 20:51:00 [pwd:~]$ ldd /home/dmdba/dm8/dm_home/bin/libdodbc.so linux-vdso.so.1 => (0x00007ffcb67c5000) libdmdpi.so => /home/dmdba/dm8/dm_home/bin/libdmdpi.so (0x00007fa1939d7000) libdmfldr.so => /home/dmdba/dm8/dm_home/bin/libdmfldr.so (0x00007fa192d99000) libdmelog.so => /home/dmdba/dm8/dm_home/bin/libdmelog.so (0x00007fa192b92000) libdmutl.so => /home/dmdba/dm8/dm_home/bin/libdmutl.so (0x00007fa192980000) libdmclientlex.so => /home/dmdba/dm8/dm_home/bin/libdmclientlex.so (0x00007fa19272d000) libdmos.so => /home/dmdba/dm8/dm_home/bin/libdmos.so (0x00007fa192501000) libdmcvt.so => /home/dmdba/dm8/dm_home/bin/libdmcvt.so (0x00007fa191e22000) libdmstrt.so => /home/dmdba/dm8/dm_home/bin/libdmstrt.so (0x00007fa191c0e000) librt.so.1 => /lib64/librt.so.1 (0x00007fa191a06000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fa1917ea000) libdl.so.2 => /lib64/libdl.so.2 (0x00007fa1915e6000) libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007fa1912de000) libm.so.6 => /lib64/libm.so.6 (0x00007fa190fdc000) libc.so.6 => /lib64/libc.so.6 (0x00007fa190c0e000) libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fa1909f8000) libdmmem.so => /home/dmdba/dm8/dm_home/bin/libdmmem.so (0x00007fa1907eb000) libdmcalc.so => /home/dmdba/dm8/dm_home/bin/libdmcalc.so (0x00007fa190571000) /lib64/ld-linux-x86-64.so.2 (0x00007fa194880000)

03| [M01000] 配置Oracle端提示file not found

报错如下:文件存在,却提示file not found

image.png

排查,发现操作系统上存在此类文件

image.png

处理

cp /usr/lib64/libodbcinst.so /home/oracle/dmhs/bin/libodbcinst.so.1
chown oracle:oinstall /home/oracle/dmhs/bin/libodbcinst.so.1

# 测试
su - oracle -c "isql -v oracle"

04| [IM002] 用户没有/etd/odbc*文件访问权限

image.png

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服