Transações do Integration Services

Aplica-se a:SQL Server SSIS Integration Runtime no Azure Data Factory

Os pacotes usam transações para associar as ações do banco de dados realizadas pelas tarefas em unidades atômicas e, ao fazer isso, a integridade dos dados é mantida. Todos os tipos de contêineres do Microsoft Integration Services — pacotes, contêiner For Loop, contêiner Foreach Loop e contêiner Sequence —, bem como os hosts de tarefas que encapsulam cada tarefa, podem ser configurados para usar transações. Integration Services fornece três opções para configurar transações: Sem Suporte, Há Suportee Necessário.

  • Necessário indica que o contêiner inicia uma transação, a menos que uma já tenha sido iniciada por seu contêiner pai. Se uma transação já existir, o contêiner se unirá à transação. Por exemplo, se um pacote que não está configurado para dar suporte a transações incluísse um contêiner Sequência que usa a opção Necessário , o contêiner iniciaria sua própria transação. Se o pacote fosse configurado para usar a opção Necessário , o contêiner Sequência se uniria à transação do pacote.

  • Suportado indica que o contêiner não inicia uma transação, mas participa de qualquer transação iniciada por seu contêiner pai. Por exemplo, se um pacote com quatro tarefas Executar SQL iniciar uma transação e as quatro tarefas usarem a opção Supported, as atualizações no banco de dados realizadas pelas tarefas Executar SQL serão revertidas se alguma tarefa falhar. Se o pacote não iniciar uma transação, as quatro tarefas Execute SQL não estarão vinculadas a uma transação, e nenhuma atualização no banco de dados, exceto as realizadas pela tarefa que falhou, será desfeita.

  • Sem Suporte indica que o contêiner não inicia uma transação ou se une a uma transação existente. Uma transação iniciada por um contêiner pai não afeta contêineres filhos configurados para não oferecer suporte a transações. Por exemplo, se um pacote for configurado para iniciar uma transação e um contêiner Loop For no pacote usar a opção Sem Suporte , nenhuma das tarefas no Loop For poderão ser revertidas se falharem.

Você configura transações definindo a propriedade TransactionOption no contêiner. É possível definir essa propriedade na janela Propriedades no SQL Server Data Tools (SSDT)ou definir a propriedade programaticamente.

Observação

A propriedade TransactionOption influencia a aplicação ou não do valor da propriedade IsolationLevel solicitada por um contêiner. Para obter mais informações, consulte a descrição da propriedade IsolationLevel no tópico Definir propriedades do pacote.

Configurar um pacote para usar transações

Quando você configura um pacote para usar transações, há duas opções:

  • Ter uma única transação para o pacote. Nesse caso, é o próprio pacote que inicia a transação, enquanto tarefas e contêineres individuais do pacote participam desta única transação.

  • Ter várias transações no pacote. Nesse caso, o pacote dá suporte a transações, mas na verdade são as tarefas e os contêineres individuais do pacote que iniciam as transações.

Os procedimentos a seguir descrevem como configurar ambas as opções.

Configurar um pacote para usar uma única transação

Nesta opção, o pacote propriamente dito inicia uma única transação. Para configurar o pacote para iniciar a transação, defina a propriedade TransactionOption do pacote como Required.

Em seguida, você relaciona tarefas e contêineres específicos nessa transação única. Para inscrever uma tarefa ou um contêiner em uma transação, defina a propriedade TransactionOption da tarefa ou do contêiner como Com Suporte.

  1. No SQL Server Data Tools (SSDT), abra o projeto do Integration Services que contém o pacote o qual você deseja configurar para usar uma transação.

  2. No Gerenciador de Soluções, clique duas vezes no pacote para abri-lo.

  3. Clique na guia Fluxo de Controle .

  4. Clique com o botão direito do mouse em qualquer lugar da tela de fundo da superfície de design do fluxo de controle e clique em Propriedades.

  5. Na janela Propriedades , defina a propriedade TransactionOption como Required.

  6. Na superfície de design da guia Fluxo de Controle , clique com o botão direito do mouse na tarefa ou no contêiner que deseja inserir na transação e clique em Propriedades.

  7. Na janela Propriedades, defina a propriedade TransactionOption como Com suporte.

    Observação

    Para associar uma conexão a uma transação, associe à transação as tarefas que usam essa conexão. Para obter mais informações, confira Conexões do SSIS (Integration Services).

  8. Repita as etapas 6 e 7 para cada tarefa e contêiner que você deseja inscrever na transação.

Configurar um pacote para usar transações múltiplas

Nesta opção, o próprio pacote dá suporte a transações, mas não inicia uma transação. Para configurar o pacote para dar suporte a transações, defina a propriedade TransactionOption do pacote como Com Suporte.

Em seguida, configure as tarefas e os contêineres desejados do pacote para iniciar ou participar de transações. Para configurar uma tarefa ou um contêiner para iniciar uma transação, defina a propriedade TransactionOption da tarefa ou do contêiner como Required.

  1. No SQL Server Data Tools (SSDT), abra o projeto dos Serviços de integração que contém o pacote a ser configurado para usar transações.

  2. No Gerenciador de Soluções, clique duas vezes no pacote para abri-lo.

  3. Clique na guia Fluxo de Controle .

  4. Clique com o botão direito do mouse em qualquer lugar da tela de fundo da superfície de design do fluxo de controle e clique em Propriedades.

  5. Na janela Propriedades, defina a propriedade TransactionOption como Com suporte.

    Observação

    O pacote suporta transações, mas as transações são iniciadas por tarefa ou contêineres no pacote.

  6. Na superfície de design da guia Fluxo de Controle , clique com o botão direito do mouse na tarefa ou no contêiner no pacote no qual deseja iniciar uma transação e clique em Propriedades.

  7. Na janela Propriedades , defina a propriedade TransactionOption como Required.

  8. Se a transação for iniciada por um contêiner, clique com o botão direito do mouse na tarefa ou no contêiner que deseja inserir na transação e clique em Propriedades.

  9. Na janela Propriedades, defina a propriedade TransactionOption como Com suporte.

    Observação

    Para associar uma conexão a uma transação, associe à transação as tarefas que usam essa conexão. Para obter mais informações, confira Conexões do SSIS (Integration Services).

  10. Repita as etapas de 6 a 9 para cada tarefa e contêiner que iniciam uma transação.

Transações múltiplas em um pacote

É possível que um pacote inclua transações não relacionadas em um pacote Integration Services . Sempre que um contêiner no meio de uma hierarquia aninhada de contêineres não oferece suporte a transações, os contêineres acima ou abaixo dele na hierarquia iniciam transações separadas, se estiverem configurados para oferecer suporte a transações. As transações confirmam ou revertem na ordem da tarefa interna na hierarquia de contêineres aninhados para o pacote. Entretanto, depois que a transação interna é confirmada, ela não será revertida se uma transação externa for anulada.

Exemplo de transações múltiplas em um pacote

Por exemplo, um pacote tem um contêiner de Sequência que contém dois contêineres Foreach Loop, e cada contêiner inclui duas tarefas de Execução de SQL. O contêiner Sequência oferece suporte a transações, os contêineres Loop Foreach não oferecem e as tarefas Executar SQL oferecem. Nesse exemplo, cada tarefa Execute SQL iniciaria sua própria transação e não seria revertida se a transação da tarefa Sequence fosse abortada.

As propriedades TransactionOption do contêiner Sequência, do contêiner Loop Foreach e das tarefas Executar SQL são definidas da seguinte maneira:

  • A propriedade TransactionOption do contêiner Sequence está definida como Required.

  • As propriedades TransactionOption dos contêineres Loop Foreach são definidas como NotSupported.

  • As propriedades TransactionOption das tarefas Executar SQL são definidas como Obrigatória.

O diagrama a seguir mostra as cinco transações não relacionadas no pacote. Uma transação é iniciada pelo contêiner de Sequência e quatro transações são iniciadas pelas tarefas Executar SQL.

Implementação de transações múltiplas

Transações herdadas

Um pacote pode executar outro pacote usando a tarefa Executar Pacote. O pacote filho, que é o pacote executado pela tarefa Executar Pacote, pode criar sua própria transação de pacote ou pode herdar a transação do pacote pai.

Um pacote filho herda a transação do pacote pai se ambos os itens a seguir forem verdadeiros:

  • O pacote é invocado por uma tarefa Executar Pacote.

  • A tarefa Executar Pacote que invoca o pacote também tenha unido a transação de pacote pai.

Os contêineres e tarefas no pacote filho não podem unir-se à transação de pacote pai, a menos que o próprio pacote filho seja unido na transação.

Exemplo de transações herdadas

No diagrama a seguir, há três pacotes que usam transações. Cada pacote contém múltiplas tarefas. Para destacar o comportamento das transações, somente as tarefas "Executar Pacote" são mostradas. O pacote A executa os pacotes B e C. Por sua vez, o pacote B executa os pacotes D e E, e o pacote C executa o pacote F.

Os pacotes e tarefas têm os seguintes atributos de transação:

  • TransactionOption é definida como Required nos pacotes A e C

  • TransactionOption está definida como Supported nos pacotes B e D e nas tarefas Executar Pacote B, Executar Pacote D e Executar Pacote F.

  • TransactionOption é definida como NotSupported no pacote E e nas tarefas Executar Pacote C e Executar Pacote E.

Fluxo de transações herdadas

Só pacotes B, D e F podem herdar transações de seus pacotes pai.

Pacotes B e D herdam a transação que foi iniciada pelo pacote A.

Pacote F herda a transação que foi iniciada pelo pacote C.

Pacotes A e C controlam suas próprias transações.

Pacote E não usa transações.