SQL Server: OLE DB 공급자 "Microsoft"의 데이터 원본 개체를 초기화할 수 없습니다.연결된 서버용 ACE.OLEDB.12.0"(null)
다음 쿼리를 실행하려고 합니다.
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;Database=C:\Somefile.xlsx',
'SELECT * FROM [Sheet$]')
하지만 다음과 같은 오류가 발생합니다.
Cannot initialize the data source object of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".
다음을 시도했습니다.
sp_configure 'show advanced options', 1;
RECONFIGURE;
sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO
그리고:
USE [master]
GO
EXEC master . dbo. sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'AllowInProcess' , 1
GO
EXEC master . dbo. sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'DynamicParameters' , 1
GO
'서버 객체' -> '연결된 서버' -> '공급자'로 이동하면 마이크로소프트.ACE.OLEDB.12.0이 나열됩니다.
Access Database Engine x64가 설치되고 모든 Office 제품이 64비트이며 내 SQL Server도 64비트입니다.
문제가 있는 경우 모든 사용자는 사용자 폴더의 Temp 폴더에 액세스할 수 있습니다.
(이 질문에 대한 유사한 답변에서 찾은 제안은 모두입니다.)
편집: SQL Server 2014 사용.
Excel 스프레드시트를 닫고 SSMS를 관리자로 실행해야 합니다.
저는 이 블로그에서 저를 위해 작동하기 위해 필요한 두 가지 누락된 단계를 발견했습니다.
Temp 폴더에 대한 사용 권한 확인
공급자가 데이터를 검색하는 동안 임시 폴더를 사용하기 때문에 이 작업이 필요합니다.로컬 시스템 계정을 사용하는지 네트워크 도메인 계정을 사용하는지 여부에 따라 폴더는 다음 중 하나가 될 수 있습니다.
네트워크 계정의 경우 폴더는
:\Windows\서비스 프로필\네트워크 서비스\AppData\Local\온도로컬 시스템 계정의 경우
:\Windows\서비스 프로필\로컬 서비스\AppData\Local\온도이 폴더를 마우스 오른쪽 단추로 클릭하고 코드를 실행하는 계정에 읽기 쓰기 권한을 부여합니다.
MemToLeave 메모리 영역이 할당되었는지 확인합니다.
- SQL Server 구성 관리자 -> 서비스 -> SQL Server 서비스를 엽니다.
- 마우스 오른쪽 단추를 클릭하고 속성을 선택합니다.
- 고급 탭으로 이동하고 -g512;를 시작 매개 변수 속성에 추가하면 문제가 해결됩니다.
또한 필요 없이 작동할 수 있습니다.AllowInProcess
이 MSDN 문서의 지침을 따르는 경우.핵심 지침은 다음과 같습니다.
연결된 서버 쿼리를 실행하려면 연결된 서버 속성에서 RPC OUT를 true로 설정합니다.
프로세스가 중단된 공급자와 연결된 서버를 설정하는 데 필요한 권한:
DCOMCNFG에서 아래 설정 확인: 시작 --> 실행 –> DCOMCNfg
구성 요소 서비스 -->내 컴퓨터 ---> 속성
아래 옵션이 '기본 속성' 탭에서 설정되어 있는지 확인합니다.
- '이 컴퓨터에서 분산 COM 사용'이 선택되어 있습니다.
- 기본 인증 = 연결.
- 기본 가장 수준 = 식별 또는 가장합니다.
구성 요소 서비스 --> 내 컴퓨터 --> DCOM 구성 --> MSDAINITIALIZE
- MSDAINITIALIZE --> Properties --> Security를 마우스 오른쪽 버튼으로 클릭합니다.
- SQL Server 서비스 계정(SQL 로그인을 사용하여 SQL Server에 연결된 경우) 또는 윈도우즈 사용자 계정을 "시작 및 활성화 권한", "액세스 권한" 및 "구성 권한" 아래에 추가합니다.
- 이 계정에 대한 모든 권한을 부여합니다.
서버 다시 시작
저도 이 문제에 부딪혀 당신의 것처럼 단계를 밟았고, 결국 당신의 것처럼 오류를 만났습니다.결국 저는 SuperUser 계정을 사용하고 아래와 같은 스크립트를 사용하여 문제가 해결되었습니다.
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;HDR=Yes;IMEX=1;Database=C:\Somefile.xlsx',
'SELECT * FROM [Sheet$]')
이 오류가 발생했지만 서비스 계정이 기본 서비스 계정이 아닌 도메인 계정을 사용하도록 구성되어 있다는 것을 알게 될 때까지 아무 문제도 해결되지 않았습니다.로컬 시스템을 사용하는 다른 서버는 동일한 가장 설정으로 동일한 작업을 실행하고 사용자를 실행하는 작업을 수행했습니다.
우리는 보안 설정 | 로컬 정책 | 사용자 권한 할당에서 로컬 보안 정책에 SQL 에이전트 서비스 계정에 대한 운영 체제 권한의 일부로 Act를 추가하여 문제를 해결했습니다.
언급URL : https://stackoverflow.com/questions/20572563/sql-server-cannot-initialize-the-data-source-object-of-ole-db-provider-microso
'programing' 카테고리의 다른 글
접두사와 와일드카드를 사용하여 데이터베이스에 액세스할 수 있습니까? (0) | 2023.08.28 |
---|---|
Ajax를 사용하여 base64 이미지 업로드 (0) | 2023.08.28 |
Spring 주석 @AutoWired는 어떻게 작동합니까? (0) | 2023.08.28 |
PHP 페이지에 대한 직접 액세스 금지 (0) | 2023.08.28 |
Spring IDE 플러그인이 있는 Eclipse와 Spring Tool Suite의 차이점은 무엇입니까? (0) | 2023.08.28 |