[英]SSIS performance vs OpenQuery with Linked Server from SQL Server to Oracle
[英]SQL to Oracle Linked Server Openquery retrieves single row
我正在使用OpenQuery
將行集從Oracle表獲取到SQL Server中。 然后我發現有一種稱為OPENROWSET
東西來提取所有行
但這對我沒有用。
SELECT a.*
FROM OPENROWSET('MSDASQL',
'DRIVER={SQL Server};SERVER=INDIANBANK;UID=ags;PWD=mypass',
'Select * From ATM_PROGNOSIS.IR_ATMMON_AGS') AS a
錯誤:-
OLE DB provider "MSDASQL" for linked server "(null)" returned message "[Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()).".
OLE DB provider "MSDASQL" for linked server "(null)" returned message "[Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied.".
Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider "MSDASQL" for linked server "(null)".
我的DSN名稱:INDIANBANK
我已使用用於ODBC驅動程序的Microsoft OLE DB提供程序來創建鏈接服務器以連接到oracle (ORACLE DB位於遠程服務器上)
我的DSN顯示測試連接成功。 與“我的鏈接服務器”相同。
當我執行以下查詢時,請Select * From openquery(IndianBank,'Select * From ATM_PROGNOSIS.IR_ATMMON_AGS')
它僅檢索一行
我的鏈接服務器代碼:
EXEC master.dbo.sp_addlinkedserver @server = N'INDIANBANK', @srvproduct=N'IndianBankOracle', @provider=N'MSDASQL', @datasrc=N'INDIANBANK'
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'INDIANBANK',@useself=N'False',@locallogin=NULL,@rmtuser=N'ags',@rmtpassword='########'
GO
EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'collation compatible', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'data access', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'dist', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'pub', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'rpc', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'rpc out', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'sub', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'connect timeout', @optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'collation name', @optvalue=null
GO
EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'lazy schema validation', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'query timeout', @optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'use remote collation', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'INDIANBANK', @optname=N'remote proc transaction promotion', @optvalue=N'true'
GO
如果您使用類似“'MSDASQL','DRIVER = {SQL Server}; SERVER = INDIANBANK; UID = ags; PWD = mypass','Select * From ATM_PROGNOSIS.IR_ATMMON_AGS'''的字符串,則將獲得無DSN的連接,因此可以進行測試DSN沒用。
我建議你帶這個司機
適用於.NET的Oracle數據提供程序
與Oracle友好得多。
這是
ODP.NET的示例
描述調優的地方。
希望這可以幫助 :)
請在下面查看我的評論。
PS對於Microsoft驅動程序,參數顯示在此處用於ODBC的Microsoft OLE DB提供程序
我對相同問題的解決方案是
在Oracle ODBC驅動程序設置中,將“數值設置”參數設置為“美國數值”。
從ODBC幫助中引用,有問題的內容用下划線標出)數字設置-允許您選擇在接收和返回綁定為字符串的數字數據時,哪些數字設置將用於確定小數和組分隔符。 此選項使您可以選擇Oracle NLS設置(默認設置),Microsoft默認區域設置(以提供一種方法來鏡像Oracle OLE DB驅動程序的行為以提高互操作性) 或美國數字設置(在使用MS Access或非美國環境中的DAO(數據庫訪問對象)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.