
使用ODBC创建DBLINK
实现DM数据库间的跨平台访问

在实际业务中有时需要数据库间的跨库跨平台访问,以从A库中访问B库的数据,此时可以使用ODBC方式创建访问目标数据库的外部链接DBLINK,以实现A库到B库的访问路径;本章介绍使用ODBC方式创建DBLINK来实现DM数据库间的跨平台访问。
本章内容已在如下环境上测试:
源数据库:中标麒麟7,DM8;
目标数据库:Windows 10, DM8;
相关关键字:ODBC、DB LINK、DM->DM。

一、下载并安装unixODBC
使用地址http://www.unixodbc.org/可下载unixODBC源码包,这里下载unixODBC-2.3.9版本。
下载完成后将包上传至源数据库服务器/opt目录,执行如下命令解压文件:
[root@localhost opt]# tar -zxvf unixODBC-2.3.9.tar.gz
linux下源码的安装由3个步骤组成:配置(configure)、编译(make)、安装(make install)。
执行./configure -h可查看配置帮助,从帮助中可以看出,如果不指定安装路径,默认安装目录为/usr/local,用户可执行文件存放至安装/bin目录,库文件存放至安装/lib目录,配置文件存放在安装/etc目录:
[root@localhost opt]# cd unixODBC-2.3.9/[root@localhost unixODBC-2.3.9]# ./configure -h`configure' configures unixODBC 2.3.9 to adapt to many kinds of systems.Usage: ./configure [OPTION]... [VAR=VALUE]...Installation directories:--prefix=PREFIX install architecture-independent files in PREFIX[/usr/local]--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX[PREFIX]By default, `make install' will install all the files in`/usr/local/bin', `/usr/local/lib' etc. You can specifyan installation prefix other than `/usr/local' using `--prefix',for instance `--prefix=$HOME'.For better control, use the options below.Fine tuning of the installation directories:--bindir=DIR user executables [EPREFIX/bin]--sbindir=DIR system admin executables [EPREFIX/sbin]--libexecdir=DIR program executables [EPREFIX/libexec]--sysconfdir=DIR read-only single-machine data [PREFIX/etc]--libdir=DIR object code libraries [EPREFIX/lib]--includedir=DIR C header files [PREFIX/include]--localedir=DIR locale-dependent data [DATAROOTDIR/locale]
这里使用--sysconfdir参数指定配置文件路径为/etc目录,依次执行如下三个命令完成unixODBC的配置、编译和安装:
[root@localhost unixODBC-2.3.9]# ./configure --sysconfdir=/etc[root@localhost unixODBC-2.3.9]# make[root@localhost unixODBC-2.3.9]# make install
安装完成后,使用odbcinst命令可查看配置文件信息。
[root@localhost unixODBC-2.3.9]# odbcinst -junixODBC 2.3.9DRIVERS............: /etc/odbcinst.iniSYSTEM DATA SOURCES: etc/odbc.iniFILE DATA SOURCES..: etc/ODBCDataSourcesUSER DATA SOURCES..: root/.odbc.iniSQLULEN Size.......: 8SQLLEN Size........: 8SQLSETPOSIROW Size.: 8
其中,odbcinst.ini用来配置驱动信息,odbc.ini用来配置系统数据源信息,.odbc.ini用来配置某个用户的数据源信息。
使用odbc_config命令可查看ODBC各文件信息:
[root@localhost unixODBC-2.3.9]# odbc_config -hUsage: odbc_config[--prefix][--exec-prefix][--include-prefix][--lib-prefix][--bin-prefix][--version][--libs][--odbcini][--odbcinstini][root@localhost unixODBC-2.3.9]# odbc_config --prefix/usr/local[root@localhost unixODBC-2.3.9]# odbc_config --lib-prefix/usr/local/lib
二、配置ODBC
在odbcinst.ini中增加DM驱动信息,内容参考如下(这里打开了ODBC的日志,并指定了日志文件路径,方便根据日志跟踪测试ODBC连接问题,生产环境可以不开启):
[root@localhost etc]# cat odbcinst.ini#ODBC日志路径[ODBC]Trace=YESTraceFile=/dm8/log/odbc.log#DM ODBC驱动[DM8 ODBC DRIVER]Description = ODBC DRIVER FOR DM8Driver = dm8/bin/libdodbc.so #DM ODBC库文件
在odbc.ini中增加DM数据源DSN信息(DM8WIN),Driver指定为上述odbcinst.ini中的DM ODBC驱动名称,指定目标数据库的IP、用户名、密码和端口等信息。
[root@localhost etc]# cat odbc.ini[DM8WIN]Description = DM ODBC DSNDriver = DM8 ODBC DRIVERSERVER = 192.168.88.121UID = SYSDBAPWD = SYSDBATCP_PORT = 5238
配置完成后,使用dmdba用户(DM数据库安装用户)测试该数据源是否正常连接:
[root@localhost etc]# su - dmdba[dmdba@localhost ~]$ isql dm8win -v+---------------------------------------+| Connected! || || sql-statement || help [tablename] || quit || |+---------------------------------------+SQL>
若出现如下错误,则是LD_LIBRARY_PATH缺少DM的环境变量信息:
[dmdba@localhost ~]$ isql dm8win -v[01000][unixODBC][Driver Manager]Can't open lib '/dm8/bin/libdodbc.so' : file not found[ISQL]ERROR: Could not SQLConnect
修改dmdba用户.bash_profile配置文件,配置LD_LIBRARY_PATH增加DM安装bin目录(默认安装DM数据库后系统会自动设置):
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/DM_HOME/bin/
三、创建并测试DBLINK
创建DBLINK基本语法如下:
CREATE [OR REPLACE] [PUBLIC] LINK <外部链接名>CONNECT ['<连接库类型>']WITH <登录名> IDENTIFIED BY <登录口令>USING '<外部连接串>';<连接库类型> ::= DAMENG | ORACLE | ODBC<ODBC外部链接串>::= <ODBC数据源DSN>
使用ODBC方式连接时,<连接库类型>指定为ODBC,<外部连接串>为DM ODBC数据源名称(即odbc.ini中配置的DSN数据源名称”DM8WIN”)。参考如下命令创建DBLINK:
create link odbcdmlink connect ODBC' with "SYSDBA" identified by "SYSDBA" using 'DM8WIN';
也可以使用DM管理工具图形化界面创建DBLINK:

使用DBLINK可以访问目标数据库的表、视图、存储过程等对象,可以对表进行增删改查等DML操作,可以调用远程的存储过程,但不支持调用远程的函数。

四、常见问题
异常一 [-2256]:DBLINK远程服务器获取对象[XXX]失败.
这种情况一般是目标服务器的防火墙未关闭,可关闭目标服务器防火墙。

异常二 [-2251]:DBLINK远程服务器获取对象[T_TABLES]失败.
此时可能是防火墙未关闭,或者是目标数据库不存在该表。

测试中相关异常,可根据ODBC日志来定位问题。
好,以上是本次分享内容,希望能给大家带来帮助。使用ODBC方式也可以创建DM到Oracle的数据库链接,感兴趣的同学可以尝试一下~



往期回顾
内容丨程青
编辑丨大大




