Pergunta

Para todos os ETLs que tenho escrito até agora, eu nunca os fez transações -. Ou seja, se a tabela 4 falhar, rolo tudo de volta

O que é a melhor prática a este respeito?

Para "BeginTran + Commit" ou não "BeginTran + Commit"

EDIT:? Eu tenho um pacote mestre chamando 4 outros pacotes - é possível rolar-los todos em uma transação

Foi útil?

Solução

começar + comprometer em tamanhos de lote gerenciáveis. Você não quer para embrulhar uma importação de 6 horas em uma única transação, todas as noites. Mantenha seus lotes em um tamanho que pode terminar em 2-3 minutos no máximo. Que você vai bater questões de pureza de dados que irá falhar um ETL é um dado, então pelo menos reduzir o impacto de algo controlável (ie., Não desencadear uma reversão que durará outro 6 horas para completar) .

Outras dicas

No SSIS, eu sempre Begin Trans + Commit. Eu quero ter certeza de que eu posso re-executar o pacote sem problema (ou ter que encontrar o que linhas realmente foi inserido) se ele falhar.

Ela só faz recuperação e limpeza muito mais fácil.

Você está muitas vezes se deslocam muitos dados em ETL para usar uma transação SQL (o log tem de armazenar todos os dados para rolar para trás, lembre-se). Eu prefiro a projetar pacotes de tal forma que eles podem ser re-executar de forma não destrutiva. Idealmente, devem ser configurados de modo que se eles morrerem no meio do caminho, você pode simplesmente começar a eles e eles vão continuar em algum lugar cerca de onde parou. Às vezes, há uma penalidade de desempenho para isso, mas acho que vale a pena.

Tecnicamente, você pode rolar pacotes-se em uma única transação; praticamente, talvez não.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top