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, como os pacotes, o Loop For, o Loop Foreach, os contêineres de sequência e os hosts de tarefa 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.
Há Suporte indica que o contêiner não inicia uma transação, mas se une a 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 Há Suporte , as atualizações de banco de dados realizadas pelas tarefas Executar SQL serão revertidas se qualquer tarefa falhar. Se o pacote não iniciar uma transação, as quatro tarefas Executar SQL não serão associadas por uma transação e nenhuma atualização de banco de dados, exceto as realizadas pela tarefa que falhou, será revertida.
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 que foram configurados para não suportar 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, inscreva as tarefas e os contêineres específicos desta única transação. 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.
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.
No Gerenciador de Soluções, clique duas vezes no pacote para abri-lo.
Clique na guia Fluxo de Controle .
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.
Na janela Propriedades , defina a propriedade TransactionOption como Required.
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.
Na janela Propriedades , defina a propriedade TransactionOption como Com Suporte.
Observação
Para inscrever uma conexão em uma transação, inscreva as tarefas que usam a conexão na transação. Para obter mais informações, confira Conexões do SSIS (Integration Services).
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.
No SQL Server Data Tools (SSDT), abra o projeto do Integration Services que contém o pacote a ser configurado para usar transações.
No Gerenciador de Soluções, clique duas vezes no pacote para abri-lo.
Clique na guia Fluxo de Controle .
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.
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.
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.
Na janela Propriedades , defina a propriedade TransactionOption como Required.
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.
Na janela Propriedades , defina a propriedade TransactionOption como Com Suporte.
Observação
Para inscrever uma conexão em uma transação, inscreva as tarefas que usam a conexão na transação. Para obter mais informações, confira Conexões do SSIS (Integration Services).
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 . A qualquer hora que um contêiner no meio de uma hierarquia de contêineres aninhada não oferecer suporte a transações, os contêineres acima ou abaixo da mesma na hierarquia começa a separar as transações, se elas estiverem configuradas para oferecem suporte às 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 mantém dois contêineres Loop Foreach, e cada contêiner inclui duas tarefas Executar 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 Executar SQL começaria sua própria transação e não reverteria se a transação da tarefa de Sequência fosse cancelada.
As propriedades TransactionOption do contêiner Sequência, do contêiner Loop Foreach e das tarefas Executar SQL são definidas da seguinte maneira:
As propriedades TransactionOption do contêiner de Sequência está definida como Obrigatória.
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.
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 enfatizar o comportamento das transações, só serão mostradas as tarefas Executar Pacote. 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 é definida como Com Suporte nos pacotes B e D, e nas tarefas Executar Pacote B, Executar Pacote C e Executar Pacote F.
TransactionOption é definida como NotSupported no pacote E e nas tarefas Executar Pacote C e Executar Pacote E.
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.
Recursos externos
- Entrada de blog, Como Usar Transações no SSIS (SQL Server Integration Services), em www.mssqltips.com