1 环境说明
操作系统:Windows Server 2016 standard\Windows10
数据库版本:SQLSERVER2019 15.0.2000.5\SQLSERVER2016 13.0.5026
2 搭建过程
2.1 下载DM安装包(windows版本的安装包)
产品下载 | 达梦数据库 (dameng.com)
2.2 安装达梦服务
如果只是创建dblink(只需要用达梦odbc相关驱动包),可选择自定义安装,可只安装驱动,当前演示安装目录在F:/dmdbms
2.3 安装完毕后,打开odbc数据源管理程序,可以在驱动程序栏看到DM驱动
2.4 将达梦bin目录授权给everyone组
2.5 通过odbc数据源管理程序,创建相关的数据源
2.6 创建完数据源后,在注册表中可查到刚才创建的数据源注册信息
2.7 使用sqlserver管理工具创建到达梦的dblink
3 测试dblink是否可用
在达梦端创建测试表及数据
Create table test(a int);
Insert into test values(1);
在sqlserver端使用dblink查询test表
Select * from openquery(DM,‘select * from test’)
4 异常处理
4.1 Microsoft SQL Server, Error: 7303
报错类型1:无法初始化链接服务器“DM”的 OLE DB 访问接口“MSDASQL”的数据源对象。由于系统错误 5: 拒绝访问。 (DM8 ODBC DRIVER, F:\dmdbms\bin\dodbc.dll),指定驱动程序无法加载。Microsoft SQL Server, Error: 7303
报错类型2:无法初始化链接服务器“DM”的 OLE DB 访问接口“MSDASQL”的数据源对象。
链接服务器"DM"的 OLE DB 访问接口 “MSDASQL” 返回了消息 “由于系统错误 126: 找不到指定的模块。 (DM8 ODBC DRIVER, F:\dmdbms\bin\dodbc.dll),指定驱动程序无法加载。”。 (Microsoft SQL Server, Error: 7303)
错误理解:F:\dmdbms\bin\dodbc.dll文件实际是存在,5: 拒绝访问说明是权限问题,将文件权限分配给everyone后,报错变成126: 找不到指定的模块,猜测是这个dll文件可能有其它依赖文件没有相关的权限,所以将整个bin目录权限分配给everyone,而不是单个文件,分配后再执行正常
疑问:为什么odbc测试连接的时候可以成功,dblink会报错。
因为odbc是以当前操作的系统用户权限访问的,当前操作的系统用户有执行权限,所以能成功;sqlserver创建dblink 底层是通过哪个操作系统用户访问的,这个不确定,所以需要将达梦数据库bin目录读和可执行权限授予everyone组用户,能解决以上报错。
4.2 Microsoft SQL Server, Error: 7399
无法初始化链接服务器“DM”的 OLE DB 访问接口“SQLNCLI11”的数据源对象。
链接服务器"DM"的 OLE DB 访问接口 “SQLNCLI11” 返回了消息 “Invalid authorization specification”。 (Microsoft SQL Server, Error: 7399)
创建的dblink所选择的连接驱动不对,应该选” Microsft OLE DB Provider for ODBC Driver
”