programing

SQL Server: OLE DB 공급자 "Microsoft"의 데이터 원본 개체를 초기화할 수 없습니다.연결된 서버용 ACE.OLEDB.12.0"(null)

css3 2023. 8. 28. 21:18

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

  1. 구성 요소 서비스 -->내 컴퓨터 ---> 속성
    아래 옵션이 '기본 속성' 탭에서 설정되어 있는지 확인합니다.

    • '이 컴퓨터에서 분산 COM 사용'이 선택되어 있습니다.
    • 기본 인증 = 연결.
    • 기본 가장 수준 = 식별 또는 가장합니다.
  2. 구성 요소 서비스 --> 내 컴퓨터 --> DCOM 구성 --> MSDAINITIALIZE

    • MSDAINITIALIZE --> Properties --> Security를 마우스 오른쪽 버튼으로 클릭합니다.
    • SQL Server 서비스 계정(SQL 로그인을 사용하여 SQL Server에 연결된 경우) 또는 윈도우즈 사용자 계정을 "시작 및 활성화 권한", "액세스 권한" 및 "구성 권한" 아래에 추가합니다.
    • 이 계정에 대한 모든 권한을 부여합니다.
  3. 서버 다시 시작

저도 이 문제에 부딪혀 당신의 것처럼 단계를 밟았고, 결국 당신의 것처럼 오류를 만났습니다.결국 저는 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