1.前言背景

  用户需求在达梦库创建dblink,可以访问并更新sqlserver数据库数据。该需求是跨类型库访问,需借助驱动实现,运行原理是达梦库创建的dblink通过odbc调用FreeTDS的驱动访问修改sqlserver的数据。

dblink简介

  达梦数据库的外部链接dblink是一种数据库的实体对象,记录了远程数据库的连接信息,用于建立与远程数据的联系。用户可以通过数据库的外部链接对象透明地操作远程数据库的数据,对远程数据库的表进行查询和增删改操作,也可以调用远程的存储过程。数据库的外部链接对象可以是公用的(数据库中所有用户使用),也可以是私有的(特定用户使用)。

FreeTDS简介

  FreeTDS是一个程序库,可以实现在Linux系统下访问微软的SQL数据库! FreeTDS 是一个开源的程序库,是TDS(表列数据流 )协议的再次实现。

odbc简介

  ODBC(Open Database Connectivity,开放数据库互连)提供了一种标准的API(应用程序编程接口)方法来访问DBMS(Database Management System)。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。ODBC具有最大的独立性和开放性:与具体的编程语言无关,与具体的数据库系统无关,与具体的操作系统无关。

2.搭建访问sqlserver的dblink

2.1准备条件

(1)一台机器A安装sqlserver数据库。
(2)一台机器B安装达梦数据库和FreeTDS及odbc。
(3)关闭防火墙和selinux。
环境介绍

数据库版本 ip
A Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64) 192.168.231.1
B V7.6.1.88-Build(2020.12.22-132014)ENT 192.168.85.4

(4)在sqlserver数据库的TEST库上创建测试用户TEST(密码:TEST),创建测试表TEST1027,如下图所示:
在这里插入图片描述

2.2配置FreeTDS驱动

  1. FreeTDS安装包上传至数据库服务器,执行以下命令解压并安装FreeTDS

tar -xzvf freetds-current.tar.gz
cd freetds-dev.1.3.7
./configure --prefix=/usr/local/freetds
make
make install

  1. 安装完成后,我们需要在/usr/local/freetds/etc/freetds.conf中配置连接SQLServer的信息(可以通过locate freetds.conf命令查看FreeTDS配置文件的可能位置)。配置参数文件如下图:

[sqlserver] #TDS服务名称
host = 192.168.231.1 #数据库网络地址
port = 1433 #数据库端口
tds version = 7.3 #TDS版本号
client charset = GBK #客户端字符集

  1. 使用命令tsql -S SQLSERVER -U username来连接SQLServer(其中-S指定了已经配置好的 TDS服务名称,-U指定登录数据库的用户名),连接成功则证明驱动配置正确,如下图所示:
    在这里插入图片描述

2.3配置unixodbc驱动

  现在FreeTDS已经可以正常连接sqlserver了,但需要用odbc管理器通过FreeTDS驱动连接访问sqlserver。

  1. 部署unixodbc
      执行以下命令解压并安装unixodbc

tar -xzvf unixODBC-2.3.9.tar.gz
cd unixODBC-2.3.9
./configure --prefix=/usr/local/unixODBC --includedir=/usr/local/include --libdir=/usr/local/lib --bindir=/usr/local/bin --sysconfdir=/usr/local/etc
make
make install

  1. 修改unixodbc配置文件
      接下来需要修改一些配置文件,为unixodbc指明数据库驱动程序所在位置及连接数据库所需要的认证信息。
    2.1 在/usr/local/etc/odbcinst.ini中配置驱动程序

[FreeTDS] #unixodbc驱动名称
Description = FreeTDS driver #简介
Driver = /usr/local/freetds/lib/libtdsodbc.so #驱动位置

2.2 在/usr/local/etc/odbc.init中配置数据库连接认证

[mssql] #DSN名称
Description = sqlserver #简介
Driver = FreeTDS #已配置的unixodbc驱动名称
Trace = on #是否输出日志信息
Server = 192.168.231.1 #sqlserver数据库地址
Port = 1433 #sqlserver数据库端口
User = TEST #登录用户名(sqlserver用户)
Password = TEST #登录密码(sqlserver密码)
Database = TEST #请求连接的数据库名称

  1. 测试odbc是否能成功连接sqlserver
    在这里插入图片描述

2.4达梦库创建dblink

  达梦数据库上创建通过odbc访问sqlserver的dblink,用户名密码与odbc配置一致,使用odbc连接须using+DSN名称
  创建语句:

create public link mssqlodbc connect ‘ODBC’ with “TEST” identified by"TEST" using ‘mssql’;

2.5达梦通过dblink访问sqlserver

  1. 测试是否能查询sqlserver的数据
    在这里插入图片描述

  2. 测试是否能插入更新sqlserver的数据
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  测试结果:达梦7数据库可以通过odbc+FreeTDS驱动建立的dblink访问和修改sqlserver的数据。

2.6常见问题

  odbc+FreeTDS驱动配置完成后,通过dm7访问sqlserver资源会提示dblink加载库文件失败,如下图:
在这里插入图片描述

  原因是数据库服务需先加载odbc动态库文件,再通过FreeTDS访问sqlserver,解决问题捷径是将odbc驱动目录中动态库libodbc都copy到数据库bin目录,然后chown dmdba:dinstall libodbc,如下图所示:
在这里插入图片描述

3.总结

综上,达梦数据库和异构数据库之间的dblink搭建完成。通过验证环境工作正常,根据整个搭建过程总结以下几点:
1.达梦到sqlserver数据库之间的dblink搭建稍微复杂,需要配置FreeTDS和odbc驱动及其访问参数,确保达梦bin目录服务可以加载libodbc*动态库。
2.搭建过程中注意关闭防火墙和selinux。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐