2009-09-01 10 views
10

흥미로운 문제가 있습니다. Sql2005 OpenRowset 통해 서버에서 Excel 파일을 읽고 있어요. 문제없이 여러 번 쿼리를 실행했습니다. 나는 방금 빠른 모임에 나가서 갑자기 "OLE DB 공급자"MSDASQL "의 데이터 원본 개체를 초기화 할 수 없습니다."(null) ""연결된 서버 "(null)"에 대한 OLE DB 공급자 "MSDASQL"의 데이터 소스 개체를 초기화 할 수 없습니다.

서버에서 사용되지 않으며 심지어 그들을 삭제하고 서버에 이상 그들을 복제하고 여전히 나는 같은 오류가 있어요.

업데이트 : 이것은 다른 openrowsets에서 두 개의 선택을 결합하는 경우에만 발생합니다. 개별적으로 쿼리를 실행해도 여전히 정상적으로 작동합니다. 전에 아무런 문제없이 조인을했습니다. 아이디어?

답변

18

SQL 서버 서비스가 실행중인 사용자의 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 데이터베이스 엔진 2010 재배포 가능 파일"을 다운로드하여 설치해야했습니다.

"이 문제의 원인은 실제로 64 비트 Windows 서버 2003에 설치된 64 비트 ODBC 텍스트 드라이버가 없다는 것입니다 .64 비트 MSDASQL은 응용 프로그램을 빌드 할 수있는 OLEDB/ODBC '브리지'를 제공합니다 ODBC 드라이버를 통해 데이터 소스에 액세스하기 위해 OLEDB 및 ADO (OLEDB를 내부적으로 사용하는) Source

0

이 문제는 나에게도 발생했습니다. OraOLEDB.Oracle에 대한 "처리 허용"공급자 옵션을 활성화하는 조합 (SSMS> 서버 개체> 연결된 서버> 제공> OraOLEDB.Oracle), SQL Server Windows 서비스 다시 시작 및 마지막으로 TNSNAMES.ora 파일에 대한 사용 권한 조정 직접.