none
Problema ao programar a execução de um pacote RRS feed

  • Pergunta

  • Olá,   

    Estou passando pelo seguinte problema.

    Tenho um pacote desenvolvido no SSIS que lê um arquivo texto e faz a gravação dos dados em uma tabela.

    O pacote é executado através do comando:

    EXEC xp_cmdshell 'DTEXEC.exe  /f "F:\pkg_importa.dtsx"'  programado em um job ou através do Management Studio

    Um dos campos gravados é do tipo datetime.

    Ocorre que ao executar o pacote em alguns registros , nos campos data, esta havendo inversão do dia com o mês.

    Por exemplo: 05/03/2015 é gravado 03/05/2015.

                         12/03/2015 é gravado 03/12/2015.

    A inversão acontece sempre quando o dia esta entre 1 e 12. 

    Se a data é 13/03/2015 é gravado 13/03/2015 (sem inversão).

    Mas caso execute o mesmo pacote, só que  através do prompt de comando do DOS:

    c:\DTEXEC.exe  /f "F:\pkg_importa.dtsx"

    as datas são gravadas corretamente, sem a inversão do mês/dia.

    Alguém poderia ajudar.

    Grato.

    Eduardo Reis

    segunda-feira, 28 de dezembro de 2015 12:46

Respostas

  • Eduardo,

    Isso pode estar relacionado sim com as configurações regionais, pois pode estar utilizando alguma outra configuração regional quando executado via xp_cmdshell, pois pode estar executando com outro usuário.

    Com isso pode estar pegando alguma outra configuração regional de outro usuário e ocasionando o erro.

    Qual usuário está configurado como serviço do SQL Server?

    Você pode também utilizar uma conta de proxy para execução da xp_cmdshell e certificar que esta conta esteja com as configurações regionais corretas e apenas as permissões necessárias para esta finalidade.

    Segue referência abaixo:

    https://msdn.microsoft.com/en-us/library/ms190359.aspx

    • Sugerido como Resposta FLauffer segunda-feira, 28 de dezembro de 2015 20:33
    • Marcado como Resposta Eduardo Reis terça-feira, 29 de dezembro de 2015 11:13
    segunda-feira, 28 de dezembro de 2015 17:35

Todas as Respostas

  • Eduardo,

    Qual o tipo de dados utilizado no mapeamento do pacote do Integration Services?

    Pelo que você falou o tipo de dados da tabala de destino é DATETIME, correto?

    Quais versões do Integration Services você possui instaladas?

    Você pode utilizar também o agendamento via job do SQL Server Agent utilizando o tipo de step "SQL Server Integration Services Package" para agendar o seu pacote de SSIS, conforme imagem abaixo:

    segunda-feira, 28 de dezembro de 2015 13:33
  • No SSIS o fluxo de dados passa para o campo datetime uma string no formato "dd/mm/aaaa". Acredito que o SQL Server faz uma conversão implícita de string para datetime.

    A versão do SSIS é 10.0

    Conforme escrevi o estranho é que executando pelo DOS funciona pelo SSMS não funciona.

    Estou com este problema em um servidor específico. acredito que deva ser alguma configuração. 

    Em outro servidor o mesmo pacote funciona sem apresentar problemas de inversão de mês/dia na data.

    segunda-feira, 28 de dezembro de 2015 13:47
  • Eduardo,

    Provavelmente há uma diferença nas informações regionais entre estes servidores.

    Para evitar este comportamento sempre utilize as datas no padrão reconhecido pelo SQL Server para evitar conversões implícitas incorretas de string para datetime, conforme abaixo:

    yyyy-MM-dd

    Exemplo:

    2015-12-28

    segunda-feira, 28 de dezembro de 2015 15:14
  • Flauffer,

    Já verifiquei as configurações regionais entre os servidores e elas estão idênticas.

    Também estou utilizando as datas no formato yyyy-mm-dd

    Há algum detalhe que ainda não identifiquei.

    Executando o pacote com o DTEXEC via prompt do DOS funciona.

    Executando o pacote com o DTEXEC via Management Studio não funciona. 

    Executando com o utilitário "Execute Package Utility" (DTExecUI.exe) funciona


    segunda-feira, 28 de dezembro de 2015 16:56
  • Eduardo,

    Isso pode estar relacionado sim com as configurações regionais, pois pode estar utilizando alguma outra configuração regional quando executado via xp_cmdshell, pois pode estar executando com outro usuário.

    Com isso pode estar pegando alguma outra configuração regional de outro usuário e ocasionando o erro.

    Qual usuário está configurado como serviço do SQL Server?

    Você pode também utilizar uma conta de proxy para execução da xp_cmdshell e certificar que esta conta esteja com as configurações regionais corretas e apenas as permissões necessárias para esta finalidade.

    Segue referência abaixo:

    https://msdn.microsoft.com/en-us/library/ms190359.aspx

    • Sugerido como Resposta FLauffer segunda-feira, 28 de dezembro de 2015 20:33
    • Marcado como Resposta Eduardo Reis terça-feira, 29 de dezembro de 2015 11:13
    segunda-feira, 28 de dezembro de 2015 17:35
  • Oi.

    O serviço do SQL Server e o serviço do SQL Agent estavam executando sob a conta Local System.

    Alterei ambos os serviços para executarem com um usuário que é membro do grupo Administradores.

    Após esta alteração o pacote executou gravando as datas corretamente, sem inverter o dia com o mês.

    Este pequeno detalhe estava fazendo a inversão do dia com o mês para todas as datas que o dia estava compreendido entre 1 e 12. As demais datas, entre os dias 13 e 31, a gravação estava correta. (sem inversão dia/mês)

    Coisa complicada pois o pacote foi testado em um servidor de desenvolvimento e tudo funcionou perfeitamente. Quando colocado em produção fazia esta inversão de dia com mês sem acusar erro (devido o servidor de produção estar executando os serviços como local system). O problema foi descoberto meio por acaso e antes da liberação para os usuários. Imagine o problema se isso vai para produção.

    Para evitar este tipo de problema encontrei uma dica interessante. Consiste em realizar a conversão de string para datetime no próprio pacote SSIS, utilizando o componente Data Conversion ou Derived Column, evitando assim a conversão implícita realizada pelo SQL Server.

    Para saber sobre a conversão implícita:
    https://msdn.microsoft.com/pt-br/library/ms191530(v=sql.120).aspx


    Grato FLauffer

    segunda-feira, 28 de dezembro de 2015 18:38