Jak mogę rozwiązać błąd Menedżera połączeń Excel SSIS 0xC0209303?

9

Utworzyłem pakiet SSIS, który importuje plik programu Excel do tabeli programu SQL Server.

Pakiet SSIS działa bez problemu, kiedy uruchamiam go lokalnie na moim komputerze, ale kiedy uruchamiam go na serwerze, na którym pakiet zostanie zaplanowany, pojawia się następujący błąd (z pliku tekstowego wypisuję błędy na używanie rejestrowania SSIS).

Po zbadaniu jedynymi zaleceniami, jakie mogłem znaleźć, było ustawienie właściwości Run64BitRuntime na wartość false, co zrobiłem, ale nadal nie miałem szczęścia. Wątpię, że to właśnie powoduje mój błąd, ponieważ błąd nie określa niczego w odniesieniu do 64-bitów (tak jak w przypadku artykułów, które znalazłem).

Pomyślałem również, że być może serwer nie ma odpowiednich sterowników Excela, ale nie wydaje mi się, że tak jest, ponieważ zwykle komunikat o błędzie mówi coś o niezarejestrowaniu sterowników.

Obecnie nie mam dostępu do zdalnego serwera. Mogę tylko przesłać pakiet do folderu, a następnie jest on uruchamiany przez aplikację, więc jedyne komunikaty o błędach, które widzę, to to, co jest w dzienniku błędów tekstowych, który utworzyłem.

wprowadź opis zdjęcia tutaj

Kod błędu DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER. Wywołanie metody AcquireConnection do menedżera połączeń „Envision” nie powiodło się z kodem błędu 0xC0209303. Przed tym mogą pojawić się komunikaty o błędach z dodatkowymi informacjami o tym, dlaczego wywołanie metody AcquireConnection nie powiodło się.

„Envision” to nazwa mojego menedżera połączeń programu Excel.

Wypełniam ścieżkę pliku Excel i ciąg połączenia za pomocą wyrażeń.

Wyrażenie ciągu połączenia wygląda następująco:

„Dostawca = Microsoft.ACE.OLEDB.12.0; Źródło danych =” + @ [Użytkownik :: SourceFilePath] + ”; Właściwości rozszerzone = \" EXCEL 12.0 XML; HDR = TAK \ ";"

SSIS Pacakge jest wykonywany przez nazwę użytkownika / konto systemu Windows. Myślę, że może to być konto usług internetowych. (BDS_sprtIIS)

Czy ktoś ma jakieś rozwiązania lub sugestie dotyczące rozwiązania tego problemu z pakietem, które działają tylko na moim komputerze lokalnym, ale nie na rzeczywistym serwerze, na którym pakiet zostanie wdrożony?

Znalazłem poniżej odpowiedź na innym forum, czy to może być przyczyną moich problemów? Mówią w zasadzie, że menedżer połączeń programu Excel próbuje uzyskać dostęp do folderu temp użytkowników z jakiegoś powodu, a jeśli nie będzie miał dostępu do tego folderu, zakończy się niepowodzeniem:

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/da77919c-0161-4eb5-bf89-7107d839435a/the-acquireconnection-method-call-to-the-connection-manager-excel-connection- manager-failed-with? forum = sqlintegrationservices

Zauważyłem też, że sterownik Microsoft.JET.OLEDB.4.0 spróbuje odczytać katalog tymczasowy pod profilem zalogowanego użytkownika.

.

... Prowadzimy naszych agentów SQL przy użyciu konta domeny niższego poziomu i uruchamiamy nasze pakiety SSIS przy użyciu konta proxy. Masz rację, ponieważ Procmon również to potwierdził. Dałem uprawnienia konta proxy do katalogu tymczasowego profilu (C: \ Documents and Settings \ SQLAgentDomainAccount \ Local Settings \ Temp) i działało!

Nie używam kont SQL Server Jobs ani proxy. Pakiet jest po prostu wykonywany przez konto systemu Windows najprawdopodobniej poprzez skrypt wiersza poleceń.

Konto systemu Windows ma dostęp do pliku, ale nie jestem pewien, czy ma on dostęp do jego folderu „TEMP” (do którego nigdy nie odwołuję się w pakiecie, więc nie wiem, dlaczego musiałby mieć dostęp do tego folderu) ...

Juan Velez
źródło

Odpowiedzi:

8

Wystąpiły 2 problemy, które uniemożliwiały uruchomienie pakietu na serwerze. Poniżej znajdują się 2 problemy i rozwiązania, które znalazłem.

  1. Pakiet jest wykonywany przez aplikację, która domyślnie korzysta z 64-bitowego narzędzia DTexec, ale pakiet musi zostać uruchomiony przy użyciu 32-bitowej wersji narzędzia, aby móc poprawnie uzyskać dostęp do pliku Excel za pomocą menedżera połączeń Excel.

    Utworzyłem „pakietowy” pakiet SSIS, który korzysta z zadania wykonania procesu, które wywołuje 32-bitowe (zamiast 64-bitowego) narzędzie DTExec i przekazuje polecenie otwarcia oryginalnego pakietu.

    Wykonaj zadanie procesowe

  2. Musiałem także zainstalować 32-bitową wersję pakietu redystrybucyjnego Microsoft Access Database Engine 2010 .

Dalsza lektura:

Microsoft.ACE.OLEDB.12.0 nie jest zarejestrowany (przepełnienie stosu)

Juan Velez
źródło
2

Instalacja 32-bitowego silnika dostępu i praca w trybie 32-bitowym działała dla mnie!

Bieg
źródło