操作系统:Windows Server 2016 standard\Windows10
数据库版本:SQLSERVER2019 15.0.2000.5\SQLSERVER2016 13.0.5026
如果只是创建dblink(只需要用达梦odbc相关驱动包),可选择自定义安装,可只安装驱动,当前演示安装目录在F:/dmdbms
说明:如果是Windows Server 2016 standard+SQLSERVER2019 15.0.2000.5
将bin目录授权给SQLSERVER服务启动用户组或者all application packages相应权限也可以
--在达梦端创建测试表及数据
Create table test(a int);
Insert into test values(1);
--在sqlserver端使用dblink查询test表
Select * from openquery(DM,'select * from test')
报错类型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组用户,能解决以上报错。
无法初始化链接服务器“DM”的 OLE DB 访问接口“SQLNCLI11”的数据源对象。
链接服务器"DM"的 OLE DB 访问接口 “SQLNCLI11” 返回了消息 “Invalid authorization specification”。 (Microsoft SQL Server, Error: 7399)
创建的dblink所选择的连接驱动不对,应该选” Microsft OLE DB Provider for ODBC Driver
”
文章
阅读量
获赞