2009-05-28 7 views
0

Je me demande comment SSIS gère les transactions avec de grands ensembles de données. J'ai un «grand» jeu de données d'environ 150 000 lignes, dont chacune doit être validée par rapport aux règles métier dans le cadre d'un ETL d'une base de données intermédiaire à la base de données active.Transactions SSIS - Grands ensembles d'enregistrements

Si l'un des enregistrements échoue à ses règles métier, aucun enregistrement ne doit se retrouver dans la base de données active (c'est-à-dire annuler la transaction).

Ma question est de savoir comment SSIS gère les grandes transactions - ou peut-il? Sera-t-il capable de saisir 149 999 enregistrements, puis de renvoyer le lot entier si le dernier enregistrement échoue à ses règles sans aucun code? Ou existe-t-il une meilleure pratique pour effectuer ce type d'opération de transfert de données volumineuses? Mon idée actuelle est de traiter chaque enregistrement dans un conteneur de séquence au niveau du flux de contrôle, avec les paramètres de transcodage activés sur le conteneur. Toutes les validations seront effectuées dans le conteneur de séquence, et l'insertion sera également effectuée dans ce conteneur. SSIS peut gérer les transactions raisonnablement bien.

Répondre

2

Là où il tombe est avoir des transactions contre plusieurs DB ou serveurs utilisant MSDTC (fonctionne toujours, mais il y a quelques mises en garde).

Vous pouvez définir TransactionOption sur la tâche de flux de données sur Required. Cela forcera SSIS à l'inscrire dans une transaction. De même, vous pouvez définir l'option TransactionOption d'autres tâches sur NotSupported (par exemple, la table d'état de mise à jour échoue en cas d'échec).

Vous ne pouvez pas réellement traiter chaque enregistrement dans un conteneur de séquence (sauf si vous bouclez une tâche de flux de données plusieurs fois, ce qui n'est probablement pas le meilleur moyen). Au lieu de cela, je mettrais le flux de données à transactionoption requis, puis il devrait échouer la tâche si des enregistrements échouent dans votre flux de données et annuler l'ensemble de la transaction.

0

Je suis d'accord avec Dane, SSIS et le serveur SQL ne devrait pas avoir de problèmes avec cette quantité de transactions à condition qu'il existe une infrastructure appropriée pour le supporter.

Questions connexes