Come posso risolvere l'errore 0xC0209303 di SSIS Excel Connection Manager?


9

Ho creato un pacchetto SSIS che importa un file Excel in una tabella di SQL Server.

Il pacchetto SSIS viene eseguito senza problemi quando lo eseguo localmente sul mio computer, ma quando lo eseguo sul server in cui verrà pianificato il pacchetto ottengo l'errore seguente (da un file di testo sto inviando errori all'utilizzo della registrazione SSIS).

Dopo le ricerche, gli unici consigli che ho trovato sono stati quelli di impostare la proprietà Run64BitRuntime su false, cosa che ho fatto ma ancora senza fortuna. Dubito che questo sia ciò che sta causando il mio errore, perché l'errore non specifica nulla a 64 bit (come nel caso degli articoli che ho trovato).

Ho anche pensato che il server non avesse i driver Excel appropriati, ma non penso che sia il caso, perché di solito il messaggio di errore direbbe qualcosa sui driver non registrati.

Al momento non ho accesso al telecomando nel server. Posso solo caricare il pacchetto in una cartella e quindi viene eseguito da un'applicazione, quindi gli unici messaggi di errore che riesco a vedere sono quelli contenuti nel registro errori di testo che ho creato.

inserisci qui la descrizione dell'immagine

Codice errore DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER. La chiamata del metodo AcquireConnection alla gestione connessione "Envision" non è riuscita con il codice di errore 0xC0209303. Prima di questo potrebbero esserci messaggi di errore con ulteriori informazioni sul perché la chiamata al metodo AcquireConnection non è riuscita.

"Envision" è il nome del mio gestore connessioni Excel.

Popolo il percorso del file Excel e la stringa di connessione usando le espressioni.

L'espressione della stringa di connessione è simile alla seguente:

"Provider = Microsoft.ACE.OLEDB.12.0; Origine dati =" + @ [Utente :: SourceFilePath] + "; Proprietà estese = \" EXCEL 12.0 XML; HDR = YES \ ";"

Il pacakge SSIS viene eseguito da un nome utente / account di Windows. Penso che potrebbe essere un account di servizi web. (BDS_sprtIIS)

Qualcuno ha soluzioni o suggerimenti su come risolvere questo problema del pacchetto che funziona solo sul mio computer locale ma non sul server effettivo in cui verrà distribuito il pacchetto?

Ho trovato la risposta di seguito su un altro forum, potrebbe essere la causa dei miei problemi? Fondamentalmente stanno dicendo che la gestione connessione di Excel tenta di accedere alla cartella temporanea degli utenti per qualche motivo e se non ha accesso a quella cartella, allora fallirà:

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-con? forum = sqlintegrationservices

Ho notato anche che il driver Microsoft.JET.OLEDB.4.0 proverà a leggere la directory temporanea sotto il profilo dell'utente che ha effettuato l'accesso.

.

... Eseguiamo i nostri agenti SQL utilizzando un account di dominio di livello inferiore ed eseguiamo i nostri pacchetti SSIS utilizzando un account proxy. Hai ragione perché Procmon lo ha confermato anche per me. Ho dato i diritti dell'account proxy alla directory temporanea del profilo (C: \ Documents and Settings \ SQLAgentDomainAccount \ Local Settings \ Temp) e ha funzionato!

Non sto usando gli account proxy o lavori di SQL Server. Il pacchetto viene semplicemente eseguito da un account Windows molto probabilmente tramite uno script da riga di comando.

L'account Windows ha accesso al file ma non sono sicuro che abbia accesso alla sua cartella "TEMP" (a cui non faccio mai riferimento nel pacchetto, quindi non so perché dovrebbe avere accesso a quella cartella) ...

Risposte:


8

Si sono verificati 2 problemi che impedivano l'esecuzione del pacchetto sul server. Di seguito sono riportati i 2 problemi e le soluzioni che ho trovato.

  1. Il pacchetto viene eseguito da un'applicazione che utilizza l'utilità DTexec a 64 bit per impostazione predefinita, ma il pacchetto deve essere eseguito utilizzando la versione a 32 bit dell'utilità per poter accedere correttamente al file Excel tramite la gestione connessione Excel.

    Ho creato un pacchetto SSIS "wrapper" che utilizza un'attività Esegui processo che chiama l'utilità DTExec a 32 bit (anziché 64 bit) e passa il comando per aprire il pacchetto originale.

    Esegui attività di processo

  2. Avevo anche bisogno di installare la versione a 32 bit del motore di database di Microsoft Access 2010 ridistribuibile .

Ulteriori letture:

Microsoft.ACE.OLEDB.12.0 non è registrato (StackTranslate.it)


2

L'installazione del motore di accesso a 32 bit e l'esecuzione in modalità a 32 bit hanno funzionato per me!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.