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”的文件( -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"。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/81227/viewspace-2668645/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在SQL Server下資料庫連結的使用SQLServer資料庫
- SQL Server連線SQL Server、SQL Server連線ORACLE 連結伺服器SQLServerOracle伺服器
- SQL Server-資料型別SQLServer資料型別
- SQL Server資料型別BLOBSQLServer資料型別
- Mysql支援的資料型別(總結)MySql資料型別
- SQL Server日期資料型別DATE的使用SQLServer資料型別
- SQL Server 中的25種資料型別SQLServer資料型別
- SQL Server中易混淆的資料型別SQLServer資料型別
- 報表工具都支援哪些資料來源型別?型別
- jsp連線sql server呼叫資料來源方法 (轉)JSSQLServer
- SQL server資料庫連線不上SQLServer資料庫
- (2)mysql 支援的資料型別總結MySql資料型別
- SQL Server 中易混淆的資料型別(轉)SQLServer資料型別
- Java 支援的資料型別與 MySQL 支援的資料型別對比Java資料型別MySql
- linux 下的連線型別Linux型別
- 關於SQL Server 中的25種資料型別SQLServer資料型別
- Sql Server之資料型別詳解SQLServer資料型別
- SQL Server 中自定義資料型別SQLServer資料型別
- SQL Server中操作XML型別資料SQLServerXML型別
- SQL Server 2005 資料型別和.Net資料型別的對應關係SQLServer資料型別
- JS中其他資料型別轉為number資料型別的方法JS資料型別
- Spring系列 之資料來源的配置 資料庫 資料來源 連線池的區別Spring資料庫
- SQL SERVER與C#的資料型別對應表SQLServerC#資料型別
- sql server 資料型別轉換函式SQLServer資料型別函式
- Sql Server基礎:資料型別詳解SQLServer資料型別
- MySql和SQL Server資料型別 對比MySqlServer資料型別
- Sql Server 資料型別 轉換 函式SQLServer資料型別函式
- Sql Server資料型別轉換函式SQLServer資料型別函式
- WIN7下配置ODBC資料來源時,只有SQL SERVER驅動,沒有DB2,ORACLE和其他的驅動Win7SQLServerDB2Oracle
- SQL的連線型別SQL型別
- PLSQL Language Reference-PL/SQL資料型別-SQL資料型別-有限制的子型別SQL資料型別
- 連不上SQL Server資料庫,不明白啊SQLServer資料庫
- SQL Server資料庫中的資料型別隱式轉換問題SQLServer資料庫資料型別
- sql學習過程1:sql server資料型別解析SQLServer資料型別
- 用VC程式來建立SQL Server ODBC資料來源 (轉)C程式SQLServer
- Sql Server系列:資料型別轉換函式SQLServer資料型別函式
- SQL Server 連結伺服器(Linked Servers)SQLServer伺服器
- js中其他資料型別的值轉為字串的相關總結JS資料型別字串