Wie kann ich den SSIS Excel Connection Manager-Fehler 0xC0209303 beheben?


9

Ich habe ein SSIS-Paket erstellt, das eine Excel-Datei in eine SQL Server-Tabelle importiert.

Das SSIS-Paket wird problemlos ausgeführt, wenn ich es lokal auf meinem Computer ausführe. Wenn ich es jedoch auf dem Server ausführe, auf dem das Paket geplant wird, wird der folgende Fehler angezeigt (von einer Textdatei, in der Fehler ausgegeben werden, bis zur Verwendung der SSIS-Protokollierung).

Nach der Recherche konnte ich nur die Run64BitRuntime-Eigenschaft auf false setzen, was ich tat, aber immer noch kein Glück hatte. Ich bezweifle jedoch, dass dies meinen Fehler verursacht, da der Fehler nichts in Bezug auf 64-Bit angibt (wie es in den Artikeln der Fall war, die ich gefunden habe).

Ich dachte auch, dass es sein könnte, dass der Server nicht über die entsprechenden Excel-Treiber verfügt, aber ich denke auch nicht, dass dies der Fall ist, da die Fehlermeldung normalerweise etwas über die nicht registrierten Treiber aussagt.

Ich habe derzeit keinen Zugriff auf Remote in den Server. Ich kann das Paket nur in einen Ordner hochladen und es wird dann von einer Anwendung ausgeführt, sodass nur die Fehlermeldungen angezeigt werden, die in dem von mir erstellten Textfehlerprotokoll enthalten sind.

Geben Sie hier die Bildbeschreibung ein

Fehlercode DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER. Der Aufruf der AcquireConnection-Methode an den Verbindungsmanager "Envision" ist mit dem Fehlercode 0xC0209303 fehlgeschlagen. Zuvor wurden möglicherweise Fehlermeldungen mit weiteren Informationen darüber veröffentlicht, warum der Methodenaufruf AcquireConnection fehlgeschlagen ist.

"Envision" ist der Name meines Excel-Verbindungsmanagers.

Ich fülle den Excel-Dateipfad und die Verbindungszeichenfolge mit Ausdrücken.

Der Verbindungszeichenfolgenausdruck sieht folgendermaßen aus:

"Provider = Microsoft.ACE.OLEDB.12.0; Data Source =" + @ [User :: SourceFilePath] + "; Extended Properties =" EXCEL 12.0 XML; HDR = YES ";

Das SSIS Pacakge wird von einem Windows-Benutzernamen / -Konto ausgeführt. Ich denke, es könnte ein Webdienstkonto sein. (BDS_sprtIIS)

Hat jemand Lösungen oder Vorschläge, wie dieses Problem des Pakets behoben werden kann, das nur auf meinem lokalen Computer funktioniert, nicht jedoch auf dem tatsächlichen Server, auf dem das Paket bereitgestellt wird?

Ich habe die folgende Antwort in einem anderen Forum gefunden. Könnte es sein, was meine Probleme verursacht? Sie sagen im Grunde, dass der Excel-Verbindungsmanager aus irgendeinem Grund versucht, auf den temporären Ordner des Benutzers zuzugreifen. Wenn er keinen Zugriff auf diesen Ordner hat, schlägt dies fehl:

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

Ich habe auch festgestellt, dass der Microsoft.JET.OLEDB.4.0-Treiber versucht, das temporäre Verzeichnis unter dem Profil des angemeldeten Benutzers zu lesen.

.

... Wir führen unsere SQL Agents mit einem Domänenkonto niedrigerer Ebene und unsere SSIS-Pakete mit einem Proxy-Konto aus. Sie haben Recht, da Procmon dies auch für mich bestätigt hat. Ich habe dem Proxy-Konto Rechte für das temporäre Verzeichnis des Profils gegeben (C: \ Dokumente und Einstellungen \ SQLAgentDomainAccount \ Lokale Einstellungen \ Temp) und es hat funktioniert!

Ich verwende keine SQL Server-Jobs oder Proxy-Konten. Das Paket wird einfach von einem Windows-Konto ausgeführt, höchstwahrscheinlich über ein Befehlszeilenskript.

Das Windows-Konto hat Zugriff auf die Datei, aber ich bin nicht sicher, ob es Zugriff auf den Ordner "TEMP" hat (auf den ich im Paket nie verweise, sodass ich nicht weiß, warum es Zugriff auf diesen Ordner benötigen würde). ...

Antworten:


8

Es gab zwei Probleme, die verhinderten, dass das Paket auf dem Server ausgeführt wurde. Nachfolgend sind die 2 Probleme und die Lösungen aufgeführt, die ich gefunden habe.

  1. Das Paket wird von einer Anwendung ausgeführt, die standardmäßig das 64-Bit-Dienstprogramm DTexec verwendet. Das Paket muss jedoch mit der 32-Bit-Version des Dienstprogramms ausgeführt werden, damit über den Excel-Verbindungsmanager ordnungsgemäß auf die Excel-Datei zugegriffen werden kann.

    Ich habe ein "Wrapper" SSIS-Paket erstellt, das eine Execute Process Task verwendet, die das 32-Bit-Dienstprogramm (anstelle von 64 Bit) DTExec aufruft und den Befehl zum Öffnen des Originalpakets übergibt.

    Prozessaufgabe ausführen

  2. Ich musste auch die 32-Bit-Version von Microsoft Access Database Engine 2010 Redistributable installieren .

Weiterführende Literatur:

Microsoft.ACE.OLEDB.12.0 ist nicht registriert (Stapelüberlauf)


2

Die Installation der 32-Bit-Access-Engine und die Ausführung im 32-Bit-Modus haben bei mir funktioniert!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.