Como posso resolver o erro 0xC0209303 do SSIS Excel Connection Manager?

9

Eu criei um pacote SSIS que importa um arquivo do Excel para uma tabela do SQL Server.

O pacote SSIS é executado sem nenhum problema quando eu o executo localmente na minha máquina, mas quando o executo no servidor em que o pacote será agendado, recebo o erro abaixo (de um arquivo de texto, estou gerando erros para usar o log do SSIS).

Depois de pesquisar, as únicas recomendações que encontrei foram definir a propriedade Run64BitRuntime como false, o que fiz, mas ainda não tive sorte. Eu duvido que isso esteja causando o meu erro, porque o erro não está especificando nada a respeito de 64 bits (como foi o caso nos artigos que encontrei).

Também pensei que o servidor não possui os drivers apropriados do Excel, mas também não acho que seja esse o caso, porque geralmente a mensagem de erro diz algo sobre os drivers não serem registrados.

Atualmente, não tenho acesso ao controle remoto no servidor. Só posso carregar o pacote em uma pasta e, em seguida, ele é executado por um aplicativo, de modo que as únicas mensagens de erro que vejo são as que estão no log de erro de texto que criei.

insira a descrição da imagem aqui

Código de erro DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER. A chamada do método AcquireConnection para o gerenciador de conexões "Envision" falhou com o código de erro 0xC0209303. Pode haver mensagens de erro publicadas antes disso com mais informações sobre o motivo da falha da chamada do método AcquireConnection.

"Envision" é o nome do meu gerenciador de conexões do Excel.

Eu preencho o caminho do arquivo do Excel e a seqüência de conexão usando expressões.

A expressão da cadeia de conexão é assim:

"Provedor = Microsoft.ACE.OLEDB.12.0; Fonte de dados =" + @ [User :: SourceFilePath] + "; Propriedades estendidas = \" EXCEL 12.0 XML; HDR = SIM \ ";"

O SSIS Pacakge é executado por um nome de usuário / conta do Windows. Eu acho que pode ser uma conta de serviços da web. (BDS_sprtIIS)

Alguém tem alguma solução ou sugestão sobre como resolver esse problema do pacote que funciona apenas na minha máquina local, mas não no servidor real em que o pacote será implantado?

Encontrei a resposta abaixo em outro fórum. Poderia ser o que está causando meus problemas? Eles estão basicamente dizendo que o gerenciador de conexões do Excel tenta acessar a pasta temporária dos usuários por algum motivo e, se não tiver acesso a essa pasta, falhará:

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

Notei também que o driver Microsoft.JET.OLEDB.4.0 tentará ler o diretório temporário abaixo do perfil do usuário conectado.

.

... Executamos nossos agentes SQL usando uma conta de domínio de nível inferior e executamos nossos pacotes SSIS usando uma conta proxy. Você está correto, pois o Procmon confirmou para mim também. Eu dei os direitos da conta proxy ao diretório temporário do perfil (C: \ Documents and Settings \ SQLAgentDomainAccount \ Local Settings \ Temp) e funcionou!

Não estou usando contas do SQL Server Jobs ou Proxy. O pacote é simplesmente executado por uma conta do Windows provavelmente através de um script de linha de comando.

A conta do Windows tem acesso ao arquivo, mas não tenho certeza se ele tem acesso à pasta "TEMP" (que eu nunca faço referência no pacote, então não sei por que ele precisaria ter acesso a essa pasta) ...

Juan Velez
fonte

Respostas:

8

Havia 2 problemas que impediam a execução do pacote no servidor. Abaixo estão os 2 problemas e as soluções que encontrei.

  1. O pacote é executado por um aplicativo que usa o utilitário DTexec de 64 bits por padrão, mas o pacote precisa ser executado usando a versão de 32 bits do utilitário para poder acessar corretamente o arquivo do Excel por meio do gerenciador de conexões do Excel.

    Criei um pacote SSIS "wrapper" que usa uma Tarefa de Processo de Execução que chama o utilitário DTExec de 32 bits (em vez de 64 bits) e passa o comando para abrir o pacote original.

    Executar tarefa de processo

  2. Eu também precisava instalar a versão de 32 bits do Microsoft Access Database Engine 2010 Redistributable .

Leitura adicional:

Microsoft.ACE.OLEDB.12.0 não está registrado (estouro de pilha)

Juan Velez
fonte
2

Instalar o mecanismo de acesso de 32 bits e executar no modo de 32 bits funcionou para mim!

Uma corrida
fonte