无法初始化OLE DB提供程序的数据源对象“MSDASQL”链接服务器“(空)”(Cannot in

2019-07-04 05:33发布

有一个有趣的问题。 我是从一个服务器上的Excel文件通过在SQL2005的OPENROWSET阅读。 我已经运行查询多次,没有任何问题。 我刚刚去了一个简短的会议,突然我得到错误“无法初始化OLE DB提供程序的数据源对象‘MSDASQL’链接服务器‘(空)’”

我已确认该文件不是在服务器上使用,甚至删除它们,重新复制它们在到服务器上,仍然我得到了同样的错误。

更新:这似乎只当我加入不同openrowsets 2个选择发生。 如果我单独运行的查询,他们仍然正常工作。 我也做了没有任何问题之前加入。 想法?

Answer 1:

这个问题是因为SQL Server服务在其下运行的用户的Temp文件夹是不是下的查询运行的凭据访问。 尝试设置该临时文件夹的安全性以最小限制。 时生成每次运行一个OPENROWSET查询,则时间DSN可以在没有任何凭据冲突重建。 这个工作对我来说没有任何重新启动要求。



Answer 2:

我们结束了重新启动数据库服务器,并且似乎要解决的问题。 也许这些文件都拿到莫名其妙锁定。 我们永远不会知道肯定,虽然



Answer 3:

我必须下载并安装“Microsoft Access数据库引擎2010可再发行”可在这里 。

“这个问题的原因是,有安装在64位Windows Server 2003实际上是在没有64位ODBC文本驱动程序,64位MSDASQL只是提供了一个OLEDB / ODBC‘桥梁’,允许应用程序建立在OLEDB和ADO (使用OLEDB内部)通过ODBC驱动程序来访问数据源“。 资源



Answer 4:

/* 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
----------------------------------------------------------------------------------------------------------


Answer 5:

这个问题发生在我身上,也是如此。 能够为OraOLEDB.Oracle“允许进程内”供应商选择的组合提供(SSMS>服务器对象>链接服务器>提供> OraOLEDB.Oracle),在tnsnames.ora文件重新启动SQL Server的Windows服务,最后调整的权限直。



文章来源: Cannot initialize the data source object of OLE DB provider “MSDASQL” for linked server “(null)”