O documento discute técnicas para aumentar a confiabilidade de pacotes no SSIS, incluindo transações, checkpoints e snapshots de banco de dados. Transações permitem que tarefas participem de uma transação do SQL Server. Checkpoints salvam pontos de verificação para reiniciar pacotes em falhas. Snapshots de banco de dados criam instantâneos consistentes que podem ser usados para carregar dados. Cada técnica tem vantagens e desvantagens que devem ser consideradas.
3. Transações
Permite que as tarefas se “alistem” para participar de uma
transação
Cada tarefa possui sua TransactionOption:
• Required: exige a existência de uma transação. Se não houver uma
transação aberta uma nova é criada.
• Supported: participa ou não de uma transação, mas não cria uma
nova transação.
• NotSupported: não participa da transação, mas não gera uma
exceção caso uma transação esteja em curso.
Não são todas as tarefas que suportam transações
4. Transações
Isolation Level: define o nível de isolamento da
transação
• READ UNCOMMITTED
• READ COMMITTED
• REPEATABLE READ
• SERIALIZABLE
• SNAPSHOT
Configura o pacote para trabalhar com transação
e...
5. Transações
Error: The SSIS Runtime has failed to start the
distributed transaction due to error 0x8004D01B
"The Transaction Manager is not available.“
MSDTC = Microsoft Distributed Transaction
Coordinator
Toda transação no SSIS é tratada como uma
transação distribuída e se alinha com o 2PC (two
phase commit)
NET START MSDTC
6. Transações explícitas (sem o DTC)
Como conseguir que duas tarefas diferentes
participem da mesma transação?
Propriedade da conexão RetainSameConnection
BEGIN TRAN e COMMIT são explícitos
Cuidado para evitar que uma mesma transação
seja utilizada em lugares indevidos
Manter duas conexões pode ser uma boa prática
• ConexaoSemTransacao
• ConexaoComTransacao
8. Checkpoints
Recurso do SSIS que permite um pacote reiniciar
do ponto onde ele parou
Armazena em arquivo XML informações sobre o
ponto onde o pacote falhou
SaveCheckpoints
CheckpointUsage
• IfExists
• Always
• Never
CheckpointFileName
9. Checkpoints
Para uma tarefa que falha alterar os dados de
checkpoint é necessário FailPackageOnFailure =
TRUE
Lógica para garantir o reinício correto do pacote
nem sempre é simples
Pode ser utilizado em conjunto com tarefas e suas
transações
Não é permitido transações no nível do pacote e
checkpoints ao mesmo tempo
E nem faz sentido...
10. Checkpoints
Somente funciona para Control Flow
Data flow deve ser garantido por outros
mecanismos
Checkpoint somente é mantido somente se o
pacote falhar
Cuidado com falhas de tarefas e precedência de
falha
Checkpoints sempre reiniciam os loops!
Não trabalham com variáveis do tipo object
12. Database snapshot
Novidade do SQL Server 2005.
Cria uma imagem do banco de dados consistente
no tempo e somente leitura.
Trabalha com o conceito de sparse files, recurso
do sistema de arquivos NTFS.
• Somente contém as páginas que foram alteradas a partir da criação do
snapshot.
Trabalha com o conceito de copy-on-write (figura a
seguir).
Vários snapshots podem ser criados.
• Somente um pode existir para um restore.
15. Dificuldades
Transações
• Bloqueios em excesso podem impactar o ambiente em cargas em
tempo real
• Bulk load trabalhar com um tipo diferente de bloqueio
• MSDTC pode ser um problema
Checkpoints
• Cargas parciais de dados pelos buffers não são garantidas pelo
checkpoint
• É necessário proteger o arquivo XML, caso contrário podemos
introduzir inconsistências
16. Dificuldades
Database snapshot
• O mecanismo mais simples de ser implementado
• Pode não ser factível em um ambiente onde transações
concorrentes estão acontecendo, pois o Revert (restore do
snapshot) causaria perda de dados
• Criação de um ambiente paralelo somente para carga de dados
pode resolver o problema
17. Conclusão
Buscar uma maior confiabilidade do pacote é dever
do programador SSIS
É melhor a ausência do dado ou dados
inconsistentes ou parcialmente carregados?
• É o negócio que deve dizer isso!
Entender os trade-offs é importante para a solução
Não resolve o erro do arquivo, somente visa a
consistência dos dados