达梦数据库通过使用odbc访问sqlserver
文章目录
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驱动
- FreeTDS安装包上传至数据库服务器,执行以下命令解压并安装FreeTDS
tar -xzvf freetds-current.tar.gz
cd freetds-dev.1.3.7
./configure --prefix=/usr/local/freetds
make
make install
- 安装完成后,我们需要在/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 #客户端字符集
- 使用命令tsql -S SQLSERVER -U username来连接SQLServer(其中-S指定了已经配置好的 TDS服务名称,-U指定登录数据库的用户名),连接成功则证明驱动配置正确,如下图所示:

2.3配置unixodbc驱动
现在FreeTDS已经可以正常连接sqlserver了,但需要用odbc管理器通过FreeTDS驱动连接访问sqlserver。
- 部署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
- 修改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 #请求连接的数据库名称
- 测试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
-
测试是否能查询sqlserver的数据

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


所有评论(0)