使用ODBC创建DBLINK

Posted yangeoooo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用ODBC创建DBLINK相关的知识,希望对你有一定的参考价值。

一、下载并安装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 specify an 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 -j
unixODBC 2.3.9
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.ini用来配置驱动信息,odbc.ini用来配置系统数据源信息,.odbc.ini用来配置某个用户的数据源信息。

使用odbc_config命令可查看ODBC各文件信息:

[root@localhost unixODBC-2.3.9]# odbc_config -h
Usage: 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=YES
TraceFile=/dm8/log/odbc.log

#DM ODBC驱动
[DM8 ODBC DRIVER]
Description = ODBC DRIVER FOR DM8
Driver = /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 DSN
Driver = DM8 ODBC DRIVER
SERVER = 192.168.88.121
UID = SYSDBA
PWD = SYSDBA
TCP_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创建DBLINK的主要内容,如果未能解决你的问题,请参考以下文章

oracle odbc连接sqlserver 无法查询字段

oracle需要创建dblink给啥权限

Oracle--dblink使用

Oracle跨服务器访问使用dblink

Oracle进阶学习之创建dblink

创建 dblink