官方地址:http://www.unixodbc.org/
推荐版本:DMHS安装推荐使用UnixODBC2.3.2版本
浏览器输入即刻下载:ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-2.3.2.tar.gz
安装位置说明:DMHS集群中,安装在目的端DMHS服务器上,以确保目的DMHS主机可以连接到目的数据库
目的端DMHS可以和目的数据库部署在不同的服务器上
yum install unixODBC unixODBC-devel -y
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=.
注意odbc.ini中 Driver 要和odbcinst.ini里边的配置项名称保持一致
针对不同数据库预定义的驱动名:
备注:驱动名在 odbc.ini 文件中。
如果使用数据源方式连接,可以在此处使用“DSN=<数据源名称>”,此时则会使用数据源名称、用户名、密码方式连接
一定要将配置文件配置到对应的位置,否则不生效
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
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
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 | | | +---------------------------------------+
可以下载官方的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"
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'
dmdba@whx02 192.168.219.129 20:52:08 [pwd:~]$ isql dm8 [ISQL]ERROR: Could not SQLConnect
这里是因为odbc.ini中只能配置成PWD而不能是PASSWORD
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)
可能的原因:
# 切换到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)
报错如下:文件存在,却提示file not found
排查,发现操作系统上存在此类文件
处理
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"
文章
阅读量
获赞