本次搭建的DBLINK为Linux端达梦数据库访问Win端的SQL SERVER数据库,通过配置ODBC连接SQL SERVER数据库,DM创建ODBC的DBLINK连接,来实现DM和SQL SERVER的DBLINK,以下为具体的操作步骤。
- DBLINK概述:
DBLINK(Database LINK)顾名思义就是数据库的链接没就像电话线一样,是一个通道,当我们要跨本地数据库,访问另外一个数据表中的数据时,本地数据库就必须要创建远程数据库的DBLINK没通过DBLINK,本地数据库可以像访问自己本身存储的表的数据一样,访问远程数据库表中的数据。
- DM数据库环境概述:
操作系统:Centos 7.4.1708
数据库版本: 8.1-2-2-21
数据库模式:单实例
IP地址:192.168.6.63
- SQLServer环境概述:
操作系统:Windows 10企业版
数据库版本:10.50.1600
IP地址:192.168.6.41
- DBLINK所使用的安装包概述:
unixODBC-2.3.0.tar.gz
freetds-1.2.21.tar.gz
备注:DM数据库和SQLserver数据库已安装完毕,Dblink所需的相关安装包已上传至DM数据库所在主机完成。
1,解压和编译ODBC和Freetds
解压安装包,解压命令如下,解压过程省略
[root@centos7 tmp]# cd /tmp
[root@centos7 tmp]# tar -zxvf unixODBC-2.3.0.tar.gz
[root@centos7 tmp]# tar -zxvf freetds-1.2.21.tar.gz
编译解压的安装包,编译命令如下,编译过程省略
[root@centos7 tmp]# cd unixODBC-2.3.0/
[root@centos7 unixODBC-2.3.0]# ./configure
[root@centos7 unixODBC-2.3.0]# make && make install
[root@centos7 unixODBC-2.3.0]# cd ..
[root@centos7 tmp]# cd freetds-1.2.21/
[root@centos7 freetds-1.2.21]# ./configure
[root@centos7 freetds-1.2.21]# make && make install
2,测试连接
WIn10防火墙已关闭,两主机之间网络端口开放,数据库SQL SERVER已启动,如图所示。
DM数据库所在Linux主机进行测试连接
查看安装版本具体信息:/usr/local/bin/tsql -C
连接数据库:/usr/local/bin/tsql -H 192.168.6.41 -p 1433 -U sa -P 123456789 -D master
-H:IP地址
-p:数据库端口
-U:用户名
-P:密码
-D:系统数据库名
-S:在freetds.conf中指定要连接的服务器条目
查看版本信息:
[root@centos7 ~]# /usr/local/bin/tsql -C
Compile-time settings (established with the "configure" script)Version: freetds v1.2.21freetds.conf directory: /usr/local/etcMS db-lib source compatibility: noSybase binary compatibility: noThread safety: yesiconv library: yesTDS version: autoiODBC: nounixodbc: yesSSPI "trusted" logins: noKerberos: noOpenSSL: noGnuTLS: noMARS: yes
测试连接,配置正确信息,测试连接成功如下显示
[root@centos7 ~]# /usr/local/bin/tsql -H 192.168.6.41 -p 1433 -U sa -P 123456789 -D master
locale is "zh_CN.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
Setting master as default database in login packet
1>
3,编写配置文件
3.1,Freetds驱动编写
freetds.conf内容如下
[root@centos7 ~]# vi /usr/local/etc/freetds.conf
[mssqlserver]host = 192.168.6.41port = 1433tds version = 7.3client charset = UTF-8
测试通过服务器条目进行连接,测试连接成功
[root@centos7 ~]# /usr/local/bin/tsql -S mssqlserver -U sa -P 123456789
locale is "zh_CN.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
1>
3.2,ODBC驱动编写
odbcinst.ini内容如下
[root@centos7 ~]# vi /usr/local/etc/odbcinst.ini
[FreeTDS] # unixodbc驱动名称
Description=ODBC of FreeTDS for MS SQL 2008 # 简介
Driver=/usr/local/lib/libtdsodbc.so # 驱动所在位置
odbc.ini内容如下
[root@centos7 ~]# vi /usr/local/etc/odbc.ini
[ODBC Data Sources]
TEST2dsn= My First Test DSN[TEST2dsn]
Driver = /usr/local/lib/libtdsodbc.so
Description = My Second Test DSN
Trace = No
Server = 192.168.6.41
Database = master
Port = 1433
TDS_Version = 7.3
4,ODBC连接SQL SERVER数据库
root用户测试连接,指定连接名,具体的用户名/密码
[root@centos7 ~]# isql -v TEST2dsn sa 123456789
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
dmdba用户测试,指定连接名,具体的用户名/密码
[dmdba@centos7 ~]$ isql -v TEST2dsn sa 123456789
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
5,SQL SERVER创建测试表
测试表SQL如下
CREATE TABLE authors(au_id CHAR(3) NOT NULL,au_fname VARCHAR(15) NOT NULL,au_lname VARCHAR(15) NOT NULL,phone VARCHAR(12) ,address VARCHAR(20) ,city VARCHAR(15) ,state CHAR(2) ,zip CHAR(5) ,CONSTRAINT pk_authors PRIMARY KEY (au_id));
INSERT INTO authors VALUES('A01','Sarah','Buchman','718-496-7223','75 West 205 St','Bronx','NY','10468');
INSERT INTO authors VALUES('A02','Wendy','Heydemark','303-986-7020','2922 Baseline Rd','Boulder','CO','80303');
INSERT INTO authors VALUES('A03','Hallie','Hull','415-549-4278','3800 Waldo Ave, #14F','San Francisco','CA','94123');
INSERT INTO authors VALUES('A04','Klee','Hull','415-549-4278','3800 Waldo Ave, #14F','San Francisco','CA','94123');
INSERT INTO authors VALUES('A05','Christian','Kells','212-771-4680','114 Horatio St','New York','NY','10014');
INSERT INTO authors VALUES('A06','','Kellsey','650-836-7128','390 Serra Mall','Palo Alto','CA','94305');
INSERT INTO authors VALUES('A07','Paddy','O''Furniture','941-925-0752','1442 Main St','Sarasota','FL','34236');
数据库查询内容如下:
6,DM数据库创建DBLINK
连接数据库,通过ODBC方式,创建DBLINK数据库
[dmdba@centos7 bin]$ ./disql SYSDBA/DM01SYSDBA:5236服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 2.808(ms)
disql V8
SQL> create link "SYSDBA"."TEST" connect 'ODBC' with "sa" identified by "123456789" using 'TEST2dsn';
操作已执行
已用时间: 52.437(毫秒). 执行号:300.
SQL>
7,拷贝驱动
将驱动拷贝至达梦的bin目录
[dmdba@centos7 bin]$ cp -r /usr/local/lib/* /dm8/dmdbms/bin
8,查询测试
连接数据库,DM数据库通过ODBC的DBLINK查询SQL SERVER的AUTHORS表内容
[dmdba@centos7 bin]$ ./disql SYSDBA/DM01SYSDBA:5236服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 0.954(ms)
disql V8
SQL> select * from AUTHORS@TEST;行号 au_id au_fname au_lname phone address city state zip
----- ----- --------- ----------- ------------ -------------------- ------------- ----- -----
1 A01 Sarah Buchman 18-496-7223 75 West 205 St Bronx NY 10468
2 A02 Wendy Heydemark 303-986-7020 2922 Baseline Rd Boulder CO 80303
3 A03 Hallie Hull 415-549-4278 3800 Waldo Ave, #14F San Francisco CA 94123
4 A04 Klee Hull 415-549-4278 3800 Waldo Ave, #14F San Francisco CA 94123
5 A05 Christian Kells 212-771-4680 114 Horatio St New York NY 10014
6 A06 Kellsey 650-836-7128 390 Serra Mall Palo Alto CA 94305
7 A07 Paddy O'Furniture 941-925-0752 1442 Main St Sarasota FL 342367 rows got已用时间: 181.113(毫秒). 执行号:300.
SQL>
查询成功,至此达梦数据库访问SQL SERVER数据库的DBLINK创建成功。
9,问题解决
创建完成DBLINk后,通过DBLINK查询操作报错,加载库文件失败。
[dmdba@centos7 bin]$ ./disql SYSDBA/DM01SYSDBA:5236服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 0.979(ms)
disql V8
SQL> select * from AUTHORS@TEST;
select * from AUTHORS@TEST;
第1 行附近出现错误[-2245]:DBLINK加载库文件失败.
已用时间: 1.739(毫秒). 执行号:0.
SQL>
解决方式为,将ODBC驱动程序的lib目录下的驱动拷贝到达梦的bin目录下,无需重启数据库实例,拷贝完成后可进行正常查询。
更多请访问达梦云适配中心:达梦云适配中心