A execução de um pacote SSIS para de responder quando você habilita transações DTC para um pacote no Microsoft SQL Server

Este artigo ajuda você a resolve o problema em que a execução de um pacote SSIS (Microsoft SQL Server Integration Services) para de responder se você habilitar transações DTC para o pacote e habilitar a ValidateExternalMetadata propriedade para um componente em uma tarefa de fluxo de dados.

Versão original do produto: SQL Server
Número de KB original: 2253391

Sintomas

Considere o seguinte cenário:

  • Você cria um pacote SSIS no SQL Server.
  • O pacote SSIS contém uma tarefa de fluxo de dados e algumas outras tarefas.
  • A TransactionOption propriedade do pacote SSIS é definida como Obrigatório para usar transações DTC.
  • As outras tarefas são executadas em uma transação DTC antes da execução da tarefa de fluxo de dados.
  • Você adiciona um componente à tarefa de fluxo de dados.
  • A ValidateExternalMetadata propriedade de um componente de fluxo de dados é definida como True.
  • A tarefa de fluxo de dados contém um componente OLE DB Destination que tem o modo de acesso de dados definido como Tabela ou exibição, ou como nome da tabela ou variável de nome de exibição.

Quando você executa o pacote nesse cenário, a execução para de responder. Além disso, se você depurar o pacote SSIS no Visual Studio, receberá mensagens que se assemelham ao seguinte na exibição Progresso :

Pacote SSIS "Package.dtsx" começando.

Informações: 0x4004300A em Fluxo de Dados Task, DTS. Pipeline: a fase de validação está começando. Informações: 0x4001100A no Pacote: iniciando a transação distribuída para este contêiner. Informações: 0x4004300A em Fluxo de Dados Task, DTS. Pipeline: a fase de validação está começando.

Motivo

Esse problema ocorre porque a conexão no fluxo de dados não está registrada na transação DTC. Isso faz com que a execução do sp_cursoropen procedimento armazenado seja bloqueada. Esse é um recurso de design porque uma conexão não pode ser registrada em uma transação DTC durante o processo de validação. No cenário descrito na seção Sintomas , o processo de validação de um componente de fluxo de dados é bloqueado quando você executa o pacote porque a conexão na tarefa de fluxo de dados não foi registrada na transação DTC.

Resolução

Para resolver esse problema, use um dos seguintes métodos:

  • Defina ValidateExternalMetadata para todos os componentes da tarefa de fluxo de dados como False.

  • Defina o modo de acesso de dados do componente Destino OLE DB como um dos seguintes modos:

    • Tabela ou exibição – carregamento rápido
    • Nome da tabela ou variável de nome de exibição – carregamento rápido
    • Comando SQL

Mais informações

O modo de acesso a dados Table ou View está bloqueado, mas outros modos de acesso a dados não são bloqueados porque os comandos diferentes emitidos pelo provedor de dados para cada modo de acesso a dados. Para obter mais detalhes sobre esse problema, use SQL Server Profiler para ver os diferentes comandos emitidos pelo provedor de dados.