2009-09-01 443 views
10

興味深い問題があります。私はSql2005のOpenRowset経由でサーバー上のExcelファイルから読み込んでいます。私は何の問題もなく数回クエリを実行しました。私はすぐに会議に出かけました。突然、「OLE DBプロバイダ "MSDASQL"のデータソースオブジェクトをリンクサーバー "(null)"で初期化できません "リンクサーバー "(null)"のOLE DBプロバイダ "MSDASQL"のデータソースオブジェクトを初期化できません

私は、サーバー上で使用されていないし、それらを削除し、それらをサーバー上に再コピーしても、私は同じエラーが発生しています。

更新:これは、異なるopenrowsetsから2つの選択を結合する場合にのみ発生します。私は個々にクエリを実行する場合、彼らはまだ正常に動作します。私は何の問題もなく前に参加しました。アイデア?

答えて

18

この問題は、SQL Serverサービスが実行されているユーザーのTempフォルダが、クエリが実行されている資格情報のもとでアクセスできないために発生します。最小限の制限でこの一時フォルダーのセキュリティを設定しようとします。公開されたクエリを実行するたびに作成されたdsnは、資格情報の競合がなくても再作成できます。これは、再起動の必要なしに私のために働いた。

+2

このTempフォルダはどこにありますか? – Slider345

+3

特定の構成 - Windows Server 2008 R2、SQL Server 2008 R2 - ドメインユーザーと共有するために必要な特定のTEMPフォルダは、次のとおりです。 'C:\ Users \ \ AppData \ Local \ Temp' – fresh

+1

私はこれで一日中過ごしました - 私はこれが解決策であるとは信じられません!しかしそれは働いたので私は幸せです。 – Warren

5

データベースサーバーの再起動が終了し、問題が解決したようです。ファイルが何とかロックされていた可能性があります。

+0

サーバーの再起動も私のために働いた。入力を実行するストアドプロシージャのスクリプト作成にリンクされたサーバーの作成/削除が終了しました。 – ajeh

+0

サーバーを再起動すると、私にとって魅力的です。ありがとう、私はこの問題を解決するのにどれくらい時間を費やすかは信じられません。ありがとうございます –

1
/* Linked server between local(Client) SQL server and Remote SQL server 2005*/ 

USE master 
GO 
-- To use named parameters: Add linked server in the source (Local machine - eg: MachineName or LocalSeverLoginName) 

sp_addlinkedserver 
@server = N'LnkSrv_RemoteServer_TEST', 
@srvproduct=N'', -- Leave it blank when its not 'SQL Server' 
@provider=N'SQLNCLI', -- see notes 
@datasrc=N'RemoteServerName', 
@provstr=N'UID=sa;PWD=sa;' 
--,@catalog = N'MYDATABASE' eg: pubs 
GO 

/* 
Note: 
    To check provider name use the folling query in the destination server 
    Select Provider From sys.servers 
*/ 
---------------------------------------------------------------------------------------------------------- 
-- Optional 
--EXEC sp_addlinkedsrvlogin 'LnkSrv_RemoteServer_TEST', 'true' -- (self is true) -- for LocalSeverLoginName 
--GO 

-- Remote login 
sp_addlinkedsrvlogin 
@rmtsrvname = 'LnkSrv_RemoteServer_TEST', 
@useself = 'False', 
@rmtuser = 'sa', 
@rmtpassword = 'sa' 
GO 

-- OR 
/* 
IF the above add linked server login failed then try in the Linked Server (LnkSrv_RemoteServer_TEST) Property 
Select -> Security - > 'For a login not defined in the list above, Connection will:' 

Choose - > Be made using this security context 
SET Remote login: sa 
With password: sa 
*/ 
---------------------------------------------------------------------------------------------------------- 

-- Test server connection 
declare @srvr nvarchar(128), @retval int; 
set @srvr = 'LnkSrv_RemoteServer_TEST'; 
begin try 
    exec @retval = sys.sp_testlinkedserver @srvr; 
end try 
begin catch 
    set @retval = sign(@@error); 
end catch; 
if @retval <> 0 
    raiserror('Unable to connect to server. This operation will be tried later!', 16, 2); 

-- OR 

BEGIN TRY 
    EXEC sp_testlinkedserver N'LnkSrv_RemoteServer_TEST'; 
END TRY 
BEGIN CATCH 
    PRINT 'Linked Server not available'; 
    RETURN; 
END CATCH 
---------------------------------------------------------------------------------------------------------- 

-- Get access linked server database 
SET xact_abort ON 
GO 

BEGIN TRANSACTION 
SELECT * FROM LnkSrv_RemoteServer_TEST.DBName.dbo.tblName 
COMMIT TRAN 
GO 

-- OR 
SELECT * FROM OPENQUERY(LnkSrv_RemoteServer_TEST, 'SELECT * FROM DBName.dbo.tblName') 
GO 

-- OR 
SELECT * FROM OPENQUERY(LnkSrv_RemoteServer_TEST, 'SELECT * FROM sys.databases Order by name') 
GO 
---------------------------------------------------------------------------------------------------------- 
3

hereの「Microsoft Access Database Engine 2010再配布可能ファイル」をダウンロードしてインストールする必要がありました。

"この問題の原因は、実際に64ビットWindows Server 2003にインストールされている64ビットODBCテキストドライバがないことです.64ビットMSDASQLは、アプリケーションを構築するためのOLEDB/ODBC 'ブリッジ' ODBCドライバを使用してデータソースにアクセスするためのOLEDBとADO(OLEDBを内部的に使用する)上で動作します。 Source

0

この問題は私にも起こりました。 OraOLEDB.Oracle(SSMS>サーバーオブジェクト>リンクされたサーバー>提供> OraOLEDB.Oracle)の「プロセス内許可」プロバイダオプションを有効にし、SQL Server Windowsサービスを再起動し、最後にTNSNAMES.oraファイルのアクセス許可を調整する組み合わせ直接。

関連する問題