Korzystanie z Microsoft.Jet.OLEDB.4.0 na systemie x64 w pakietach SSIS

27-Lut-2015

Pakiet DTSX utworzony w Visual Studio i uruchamiany bez problemu w trybie debug nie uruchamia sie w systemie operacyjnym po wywołaniu komendy DTExec z komunikatem:

Started: 21:59:26
Error: 2015-02-27 21:59:26.75
Code: 0xC0209303
Source: 04 Add column with logging Connection manager „Excel Connection Manager”
Description: The requested OLE DB provider Microsoft.Jet.OLEDB.4.0 is not registered. If the 64-bit driver is not ins
talled, run the package in 32-bit mode. Error code: 0x00000000.
An OLE DB record is available. Source: „Microsoft OLE DB Service Components” Hresult: 0x80040154 Description: „Klasa
niezarejestrowana.”.
End Error

Podobnie, jeśli paczkę uruchomić w SQL Agencie:

 Code: 0xC0209303     Source: 04 Add column with logging Connection manager „Excel Connection Manager”     Description: The requested OLE DB provider Microsoft.Jet.OLEDB.4.0 is not registered. If the 64-bit driver is not installed, run the package in 32-bit mode. Error code: 0x00000000.  An OLE DB record is available.  Source: „Microsoft OLE DB Service Components”  Hresult: 0x80040154  Description: „Klasa niezarejestrowana.”.  End Error  Error: 2015-02-27 22:18:13.18     Code: 0xC020801C     Source: Data Flow Task Excel Destination [13]     Description: SSIS Error Code DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER.

Większość rozwiązań tego problemu wskazuje na to, że w Visual Studio należy kliknąć prawym przyciskiem myszy na projekcie i wybrać Properties. Następnie w Configuration Properties >> Debugging zmienić wartość parametru Run64BitRuntime na False.Run64bitRuntime

 

Tymczasem to nie pomaga. Co w takim razie zrobić?

Okazuje się, że na systemie masz zainstalowane dwie wersje DTExec. 64 i 32 bitową. Domyślnie uruchamia się 64 bitowa, która rzeczywiście może mieć problem z uruchomieniem 32-bitowego sterownika do Microsoft.Jet.OLEDB.4.0 . Wystarczy uruchomić pakiet przy pomocy programu 32-bitowego i wszystko działa:

C:\>”C:\Program Files (x86)\Microsoft SQL Server\120\DTS\Binn\DTExec.exe” /FILE „c:\SSIS\04 Add column with logging.dtsx” /CHECKPOINTING OFF /REPORTING EW
Microsoft (R) SQL Server Execute Package Utility
Version 12.0.2430.0 for 32-bit
Copyright (C) Microsoft Corporation. All rights reserved.

Started: 22:09:03
DTExec: The package execution returned DTSER_SUCCESS (0).
Started: 22:09:03
Finished: 22:09:07
Elapsed: 3.9 seconds

 

Jeżeli uruchomienie pakietu ma się odbywać z SQL Agenta, to też nie problem:

use32bitruntime

 

Widać, że w moim przypadku, błędy były związane nie z tym jak została zdefiniowana paczka, ale raczej, jak była uruchamiana. System docelowy był 64-bitowy, dlatego należało zadbać o to by uruchomienie odbywało się przy wykorzystaniu systemu 32 bitowego.

Dodaj komentarz:

Autor: Rafał Kraik