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日期資料型別DATE的使用SQLServer資料型別
- Mysql支援的資料型別(總結)MySql資料型別
- 報表工具都支援哪些資料來源型別?型別
- SQL SERVER與C#的資料型別對應表SQLServerC#資料型別
- sql server 資料型別轉換函式SQLServer資料型別函式
- SQL Server 連結伺服器(Linked Servers)SQLServer伺服器
- Java 支援的資料型別與 MySQL 支援的資料型別對比Java資料型別MySql
- SQL Server資料庫中的資料型別隱式轉換問題SQLServer資料庫資料型別
- Spring系列 之資料來源的配置 資料庫 資料來源 連線池的區別Spring資料庫
- JS中其他資料型別轉為number資料型別的方法JS資料型別
- SQL的連線型別SQL型別
- 【SQL】18 SQL NULL 函式、SQL 通用資料型別、SQL 用於各種資料庫的資料型別SQLNull函式資料型別資料庫
- js中其他資料型別的值轉為字串的相關總結JS資料型別字串
- Jtti:sql server連不上本地伺服器怎麼辦?JttiSQLServer伺服器
- SQL 資料型別SQL資料型別
- Linux 下檢視系統資源的更好方式Linux
- Linux系統伺服器下Nginx支援ipv6配置的方法Linux伺服器Nginx
- SQL Server中GROUP BY(連結)SQLServer
- SQL SERVER 日期和時間資料型別及函式 (Transact-SQL)SQLServer資料型別函式
- SQL教程——常見的資料型別SQL資料型別
- 關於Sql server資料型別HierarchyID 資料型別用法和遞迴顯示完整路徑SQLServer資料型別遞迴
- 伺服器sql server 資料恢復伺服器SQLServer資料恢復
- c#連線SQL Server資料庫C#SQLServer資料庫
- 不簡單的基本資料型別資料型別
- SQL Server 2008資料複製新特性及其帶來的價值(下)XDSQLServer
- Spring是如何支援多資料來源的Spring
- Go 的資料型別總結Go資料型別
- Python的資料型別總結Python資料型別
- 如何建立SQL Server分析系統資料收集組BSSQLServer
- spring多資料來源下 事務不生效Spring
- Python支援哪些資料型別Python資料型別
- redis 支援哪些資料型別Redis資料型別
- SQL 常見資料型別SQL資料型別
- 如何理解Linux系統中的資料一致性和IO型別?Linux型別
- Linux 執行升訊威線上客服系統:同時支援 SQL Server 和 MySQL 的實現方法LinuxServerMySql
- 解決無法連線SQL Server資料庫的方法BWSQLServer資料庫
- ETLCloud支援的資料處理型別包括哪些?Cloud型別