千家信息网

Linux系统下的SQL Server不支持其他类型数据源的链接服务器

发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,客户需求:一台Ubuntu服务器,安装SQL Server 2017数据库,作为中间服务器,通过SQL Server的链接服务器方式,连接各业务系统的相关数据库。问题:有一个系统的数据库采用的是Ora
千家信息网最后更新 2025年01月21日Linux系统下的SQL Server不支持其他类型数据源的链接服务器

客户需求:一台Ubuntu服务器,安装SQL Server 2017数据库,作为中间服务器,通过SQL Server的链接服务器方式,连接各业务系统的相关数据库。

问题:有一个系统的数据库采用的是Oracle数据库,创建了链接服务器后,在引用时报" 尚未注册OLD DB访问接口 OraOLEDB.Oracle "错误。

亲自测试,首先通过GUI方式创建链接服务器,目标服务器类型只能选择"SQL Server","其他数据源"选项是灰色不可选状态。

询问客户系统中的链接服务器创建方式,告知是通过SQL命令创建的。

USE [master]

GO

EXEC master.dbo.sp_addlinkedserver

@server = N'OracleData'

, @srvproduct=N'ORACLE'

, @provider=N'OraOLEDB.Oracle'

, @datasrc=N'TNS_NAME'

EXEC master.dbo.sp_addlinkedsrvlogin

@rmtsrvname= N'OracleData', @useself=N'False', @locallogin=NULL

, @rmtuser=N'OraUser', @rmtpassword='OraPassword'

GO

select * from OracleData..OraUser.UserTable

go

消息 7403,级别 16,状态 1,第 1 行

尚未注册 OLE DB 访问接口 "OraOLEDB.Oracle"。

按照Windows系统下的习惯思路,只要安装Oracle数据库的相应驱动就能解决问题。

首先安装Oracle客户端程序和工具,具体操作见前文:

http://blog.itpub.net/81227/viewspace-2668066/

通过sqlplus工具测试,可以连接上Oracle数据库。

测试链接服务器,还是报原来的错误。

通过直接方式不能解决问题,那是否能通过ODBC方式解决问题呢?虽然ODBC要比直接方式效率要低,性能要差,但能解决问题总归是好的。

安装unixODBC方法,参见:

http://blog.itpub.net/81227/viewspace-2668511/

通过isql工具测试,同样连接上了Oracle数据库。

再次测试链接服务器,问题依旧。

不能解决问题,总要给客户一个交待的,不然就显得自己太不专业了。

只能从MicroSoft的官方文档中找答案。

终于,在MicroSoft的一篇名为"Editions and supported features of SQL Server 2017 on Linux"的文档( https://docs.microsoft.com/en-us/sql/linux/sql-server-linux -editions-and-components-2017?view=sql-server-ver15 ) 中找到了答案, Linked Servers to data sources other than SQL Server (Linux 版本的SQL Server 2017不支持除SQL Server外的其他数据源的链接服务器)。

总算能给客户一个交待了。

其实,到目前为止,Linux版本的SQL Server 2019也同样不支持。不过,在SQL Server 2019中,提供了另一种称为PolyBase的技术解决了在SQL Server中访问其他类型数据源的问题。

坑1:通过SQL命令方式执行创建链接服务器时,不检查数据源类型的合法性;

USE [master]

GO

EXEC master.dbo.sp_addlinkedserver

@server = N'OracleData1'

, @srvproduct=N'ORACLE'

, @provider=N'unixODBC'

, @datasrc=N'DSN_NAME'

EXEC master.dbo.sp_addlinkedsrvlogin

@rmtsrvname= N'OracleData', @useself=N'False', @locallogin=NULL

, @rmtuser=N'OraUser', @rmtpassword='OraPassword'

GO

USE [master]

GO

EXEC master.dbo.sp_addlinkedserver

@server = N'OracleData2'

, @srvproduct=N'ORACLE'

, @provider=N'MSDASQL'

, @datasrc=N'TNS_NAME'

EXEC master.dbo.sp_addlinkedsrvlogin

@rmtsrvname= N'OracleData', @useself=N'False', @locallogin=NULL

, @rmtuser=N'OraUser', @rmtpassword='OraPassword'

GO

数据源类型无论改成何种类型,创建时均不报错,链接服务器创建成功。

坑2:系统不支持其他类型的数据源,但错误提示却是"访问接口未注册",而不是明确提示系统不支持此类型数据源;

select * from OracleData1..OraUser.UserTable

go

消息 7403,级别 16,状态 1,第 1 行

尚未注册 OLE DB 访问接口 "unixODBC"。

select * from OracleData2..OraUser.UserTable

go

消息 7403,级别 16,状态 1,第 1 行

尚未注册 OLE DB 访问接口 "MSDASQL"。

数据 服务器 服务 链接 问题 数据源 类型 数据库 方式 系统 客户 接口 测试 支持 尚未 状态 工具 消息 级别 错误 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络技术在研究与应用 怎样建立sql数据库 安卓上传数据到服务器 招生信息管理系统数据库设计 自己做个数据库保存文件 万得数据库修改密码 混沌与秩序2最新服务器 幼儿园网络安全小短片 如何知道小程序用的什么服务器 监控专用服务器 四川c语言软件开发服务费 东北大学网络安全专业怎么样 中华网络安全法施行日期 常用软件开发模型特点应用场合 如何开发内部数据库 天津软件开发驻场哪家好 dnf服务器一直无响应怎么办 淘宝上软件开发公司靠谱吗 国家安全教育中网络安全征文 软件开发公司运营模式 计算机软件开发要学哪些 APP服务器防护 河南小帮手网络技术有限公司 自己做个数据库保存文件 网吧服务器都是安装什么驱动 sql 批量附加数据库 网络安全在什么领域的应用 惠普服务器测试指标 双层计算机软件开发技术 互联网软件开发的流程及步骤
0