Domanda

Per tutti gli ETL che ho scritto finora, non ho mai effettuato transazioni - ovvero se la tabella 4 fallisce, ripristina tutto.

Qual è la migliore pratica in questo senso?

Per " BeginTran + Commit " oppure no per " BeginTran + Commit "

EDIT: ho un pacchetto principale che chiama altri 4 pacchetti - è possibile raggrupparli tutti in una transazione?

È stato utile?

Soluzione

begin + commit in batch batch gestibili. Non vuoi concludere un'importazione di 6 ore in una singola transazione ogni notte. Mantenere i lotti di dimensioni che possono terminare al massimo in 2-3 minuti. Il fatto che si verifichino problemi di purezza dei dati che falliranno un ETL è un dato di fatto, quindi almeno ridurre l'impatto su qualcosa di gestibile (cioè non attivare un rollback che durerà un altro 6 ore per il completamento) .

Altri suggerimenti

In SSIS, ho sempre Inizia Trans + Commit . Voglio assicurarmi di poter rieseguire il pacchetto senza problemi (o dover trovare quali righe sono state effettivamente inserite) se fallisce.

Semplifica notevolmente il recupero e la pulizia.

Spesso si spostano troppi dati in ETL per utilizzare una transazione SQL (il registro deve memorizzare TUTTI i dati per il rollback, ricordare). Preferisco progettare pacchetti in modo che possano essere rieseguiti in modo non distruttivo. Idealmente, dovrebbero essere impostati in modo che se muoiono a metà flusso, puoi semplicemente avviarli e continueranno da qualche parte approssimativamente da dove erano stati interrotti. A volte c'è una penalità per questo, ma penso che ne valga la pena.

Tecnicamente puoi raggruppare i pacchetti in un'unica transazione; praticamente, forse no.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top