¿Cómo puedo resolver SSIS Excel Connection Manager Error 0xC0209303?

9

He creado un paquete SSIS que importa un archivo de Excel en una tabla de SQL Server.

El paquete SSIS se ejecuta sin ningún problema cuando lo ejecuto localmente en mi máquina, pero cuando lo ejecuto en el servidor donde se programará el paquete obtengo el siguiente error (desde un archivo de texto estoy enviando errores al usar el registro SSIS).

Después de investigar, las únicas recomendaciones que pude encontrar fue establecer la propiedad Run64BitRuntime en false, lo cual hice, pero todavía no tuve suerte. Sin embargo, dudo que esto sea lo que está causando mi error porque el error no especifica nada con respecto a 64 bits (como fue el caso en los artículos que encontré).

También pensé que podría ser que el Servidor no tenga los controladores de Excel apropiados, pero tampoco creo que sea así porque, por lo general, el mensaje de error dice algo acerca de los controladores que no están registrados.

Actualmente no tengo acceso a control remoto en el servidor. Solo puedo cargar el paquete en una carpeta y luego lo ejecuta una aplicación, por lo que los únicos mensajes de error que puedo ver son los que están en el registro de errores de texto que he creado.

ingrese la descripción de la imagen aquí

Código de error DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER. La llamada al método AcquireConnection al administrador de conexión "Envision" falló con el código de error 0xC0209303. Puede haber mensajes de error publicados antes de esto con más información sobre por qué falló la llamada al método AcquireConnection.

"Envision" es el nombre de mi administrador de conexión de Excel.

Relleno la ruta del archivo de Excel y la cadena de conexión con expresiones.

La expresión de la cadena de conexión se ve así:

"Proveedor = Microsoft.ACE.OLEDB.12.0; Fuente de datos =" + @ [Usuario :: SourceFilePath] + "; Propiedades extendidas = \" EXCEL 12.0 XML; HDR = SÍ \ ";"

El SSIS Pacakge se ejecuta mediante un nombre de usuario / cuenta de Windows. Creo que podría ser una cuenta de servicios web. (BDS_sprtIIS)

¿Alguien tiene alguna solución o sugerencia sobre cómo resolver este problema del paquete que solo funciona en mi máquina local pero no en el servidor real en el que se implementará el paquete?

Encontré la respuesta a continuación en otro foro, ¿podría ser lo que está causando mis problemas? Básicamente están diciendo que el administrador de conexión de Excel intenta acceder a la carpeta temporal de los usuarios por algún motivo y si no tiene acceso a esa carpeta, fallará:

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

También noté que el controlador Microsoft.JET.OLEDB.4.0 intentará leer el directorio temporal debajo del perfil del usuario conectado.

.

... Ejecutamos nuestros Agentes SQL usando una cuenta de dominio de nivel inferior y ejecutamos nuestros paquetes SSIS usando una Cuenta Proxy. Tienes razón, ya que Procmon me lo confirmó también. Le di los derechos de la cuenta de proxy al directorio temporal del perfil (C: \ Documents and Settings \ SQLAgentDomainAccount \ Local Settings \ Temp) y funcionó.

No estoy usando trabajos de SQL Server o cuentas proxy. El paquete es simplemente ejecutado por una cuenta de Windows probablemente a través de un script de línea de comando.

La cuenta de Windows tiene acceso al archivo, pero no estoy seguro de si tiene acceso a su carpeta "TEMP" (a la que nunca hago referencia en el paquete, así que no sé por qué necesitaría tener acceso a esa carpeta) ...

Juan velez
fuente

Respuestas:

8

Hubo 2 problemas que impedían que el paquete se ejecutara en el servidor. A continuación se presentan los 2 problemas y las soluciones que encontré.

  1. El paquete lo ejecuta una aplicación que utiliza la utilidad DTexec de 64 bits de manera predeterminada, pero el paquete debe ejecutarse utilizando la versión de 32 bits de la utilidad para poder acceder correctamente al archivo Excel a través del administrador de conexión Excel.

    Creé un paquete SSIS "envoltorio" que usa una tarea de proceso de ejecución que llama a la utilidad DTExec de 32 bits (en lugar de 64 bits) y pasa el comando para abrir el paquete original.

    Ejecutar tarea de proceso

  2. También necesitaba instalar la versión de 32 bits de Microsoft Access Database Engine 2010 Redistributable .

Otras lecturas:

Microsoft.ACE.OLEDB.12.0 no está registrado (desbordamiento de pila)

Juan velez
fuente
2

¡Instalar el motor de acceso de 32 bits y ejecutarlo en modo de 32 bits funcionó para mí!

Arun
fuente