Транзакции SSIS — большие наборы записей
-
06-09-2019 - |
Вопрос
Мне интересно, как SSIS справляется с транзакциями с большими наборами данных.У меня есть «большой» набор данных, содержащий около 150 000 строк, каждую из которых необходимо проверить на соответствие бизнес-правилам в рамках ETL из промежуточной базы данных в действующую базу данных.
Если какая-либо из записей не соответствует бизнес-правилам, ни одна запись не должна попасть в действующую базу данных (т.откатить транзакцию).
Мой вопрос: как SSIS обрабатывает большие транзакции – или может ли?Справится ли он с вводом 149 999 записей, а затем откатит всю партию назад, если последняя запись не соответствует его бесполезным правилам?Или есть лучший способ выполнения такого типа операций передачи больших данных?
В настоящее время я думаю об обработке каждой записи в контейнере последовательности на уровне потока управления с включенными в контейнере настройками транскации.Все проверки будут выполняться внутри контейнера последовательности, и вставка также будет выполняться в этом контейнере.
Решение
SSIS может достаточно хорошо обрабатывать транзакции.Ошибка заключается в проведении транзакций с несколькими базами данных или серверами с использованием MSDTC (все еще работает, но есть некоторые предостережения).
Вы можете установить TransactionOption в задаче потока данных как обязательную.Это заставит SSIS зарегистрировать его в транзакции.Аналогичным образом вы можете пометить TransactionOption других задач как NotSupported (например,обновить таблицу состояния, чтобы она не удалась в случае сбоя).
Фактически вы не можете обрабатывать каждую запись в контейнере последовательности (если только вы не выполняете циклическую задачу потока данных несколько раз, что, вероятно, не лучший способ).Вместо этого я бы поместил поток данных в обязательную транзакционную опцию, и тогда он должен завершить задачу, если в вашем потоке данных произойдет сбой какой-либо записи, и откатить всю транзакцию.
Другие советы
Я согласен с Дейном, что у SSIS и SQL-сервера не должно возникнуть проблем с таким количеством транзакций, если для этого имеется соответствующая инфраструктура.