Partilhar via


Transações do Integration Services

Aplica-se a:Servidor SQL Tempo de execução da integração do SSIS no Azure Data Factory

Os pacotes usam transações para vincular as ações do banco de dados que as tarefas executam em unidades atômicas e, ao fazer isso, manter a integridade dos dados. Todos os tipos de contêiner do Microsoft Integration Services - pacotes, os contêineres For Loop, Foreach Loop e Sequence e os hosts de tarefas que encapsulam cada tarefa - podem ser configurados para usar transações. O Integration Services fornece três opções para configurar transações: NotSupported, Supported e Required.

  • Obrigatório indica que o contêiner inicia uma transação, a menos que uma já tenha sido iniciada por seu contêiner pai. Se já existir uma transação, o contêiner ingressa na transação. Por exemplo, se um pacote que não está configurado para suportar transações incluir um contêiner Sequence que usa a opção Required , o contêiner Sequence iniciará sua própria transação. Se o pacote fosse configurado para usar a opção Required , o contêiner Sequence ingressaria na transação do pacote.

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

  • NotSupported indica que o contêiner não inicia uma transação ou ingressa em uma transação existente. Uma transação iniciada por um contêiner pai não afeta os contêineres filho que foram configurados para não oferecer suporte a transações. Por exemplo, se um pacote estiver configurado para iniciar uma transação e um contêiner For Loop no pacote usar a opção NotSupported , nenhuma das tarefas no For Loop poderá reverter se falhar.

Configure as transações definindo a propriedade TransactionOption no contêiner. Você pode definir essa propriedade usando a janela Propriedades no SSDT (SQL Server Data Tools) ou pode definir a propriedade programaticamente.

Observação

A propriedade TransactionOption influencia se o valor da propriedade IsolationLevel solicitado por um contêiner é aplicado ou não. Para obter mais informações, consulte a descrição da propriedade IsolationLevel no tópico Setting Package Properties.

Configurar um pacote para usar transações

Ao configurar um pacote para usar transações, você tem duas opções:

  • Tenha uma única transação para o pacote. Nesse caso, é o próprio pacote que inicia essa transação, enquanto tarefas individuais e contêineres no pacote participam dessa transação única.

  • Ter várias transações no pacote. Nesse caso, o pacote suporta transações, mas tarefas individuais e contêineres no pacote realmente 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 próprio pacote inicia uma única transação. Configure o pacote para iniciar essa transação definindo a propriedade TransactionOption do pacote como Required.

Em seguida, você recruta tarefas e contêineres específicos nessa única transação. Para inscrever uma tarefa ou contêiner em uma transação, defina a propriedade TransactionOption dessa tarefa ou contêiner como Supported.

  1. No SSDT (SQL Server Data Tools), abra o projeto Integration Services que contém o pacote que 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 no plano 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 ControlFlow , clique com o botão direito do mouse na tarefa ou no contêiner que você deseja registrar na transação e clique em Propriedades.

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

    Observação

    Para inscrever uma conexão em uma transação, registre as tarefas que usam a conexão na transação. Para obter mais informações, consulte Conexões do Integration Services (SSIS).

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

Configurar um pacote para usar várias transações

Nesta opção, o pacote em si suporta transações, mas não inicia uma transação. Configure o pacote para suportar transações definindo a propriedade TransactionOption do pacote como Supported.

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

  1. No SSDT (SQL Server Data Tools), abra o projeto Integration Services que contém o pacote que você deseja configurar para usar transaction.s

  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 no plano de fundo da superfície de design do fluxo de controle e clique em Propriedades.

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

    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 ControlFlow , clique com o botão direito do mouse na tarefa ou no contêiner no pacote para o qual você deseja iniciar uma transação e clique em Propriedades.

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

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

  9. Na janela Propriedades , defina a propriedade TransactionOption como Supported.

    Observação

    Para inscrever uma conexão em uma transação, registre as tarefas que usam a conexão na transação. Para obter mais informações, consulte Conexões do Integration Services (SSIS).

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

Várias transações em um pacote

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

Exemplo de várias transações em um pacote

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

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

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

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

  • As propriedades TransactionOption das tarefas Executar SQL são definidas como Required.

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

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

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 herdar a transação de pacote pai.

Um pacote filho herda a transação do pacote pai se ambas as opções a seguir forem verdadeiras:

  • O pacote é invocado por uma tarefa Executar Pacote.

  • A tarefa Executar Pacote que invocou o pacote também ingressou na transação do pacote pai.

Contêineres e tarefas no pacote filho não podem ingressar na transação do pacote pai, a menos que o próprio pacote filho ingresse na transação.

Exemplo de transações herdadas

No diagrama a seguir, há três pacotes que usam transações. Cada pacote contém várias tarefas. Para enfatizar o comportamento das transações, apenas 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 está definido como Obrigatório nos pacotes A e C

  • TransactionOption é definido como Supported nos pacotes B e D, e nas tarefas Execute Package B, Execute Package D e Execute Package F.

  • TransactionOption é definido como NotSupported no pacote E e nas tarefas Execute Package C e Execute Package E.

Fluxo de operações herdadas

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

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

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

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

O pacote E não usa transações.

Recursos Externos