SSIS 2008 с хранимыми процедурами.Лучшие практики транзакций - PullRequest
0 голосов
/ 27 июня 2011

В настоящее время я использую SSIS для некоторых процессов, сценариев и прямого импорта данных. Большая часть очистки и преобразования данных происходит в хранимых процедурах, которые я вызываю из служб SSIS для выполнения задач SQL. Для большинства sprocs, если по какой-либо причине происходит сбой, мне не нужно откатывать какие-либо транзакции. Моя обработка ошибок SSIS по существу стирает все промежуточные данные и затем регистрирует ошибки в таблице. (Человек должен исправить проблему с основными данными на этом этапе)

Мой вопрос вращается вокруг начала транса, конца транса. Существуют ли случаи, когда хранимый процесс может дать сбой, а затем не сообщить вызывающему процессу SSIS? Я ищу аппаратный сбой, тайм-аут блокировки и т. Д.

Я бы предпочел избегать максимально возможного использования транзакций и полагаться на обработку ошибок SSIS.

Мысли

1 Ответ

1 голос
/ 27 июня 2011

Один случай, о котором я могу подумать (и транзакции тоже не помогут), будет, если сохраненный процесс не обновит или не вставит какие-либо записи. Это не будет ошибкой, но может потребоваться для пакета служб SSIS. Возможно, вы захотите вернуть количество строк, которые были затронуты, и проверить это после.

Мы также делаем это для некоторых импортов, где число, значительно отличающееся от последнего импорта, указывает на проблему с данными. Таким образом, если мы обычно получаем 100 000 записей от клиента A в Импорте B, и вместо этого мы получаем 5000, пакет SSIS завершается сбоем, пока человек не сможет просмотреть его и увидеть, что файл плохой, или если они действительно хотели уменьшить свою рабочую силу или клиента список.

Между прочим, мы создаем две таблицы (одну с необработанными неизмененными данными, а другую используем для очистки. Сбой пакета служб SSIS не должен откатывать их, если вы хотите легко увидеть, какие были проблемы с данными. Затем вы можете сказать если данные были неверными с самого начала или каким-то образом они были потеряны или исправлены неправильно в процессе очистки. Иногда место, где регистрировалась ошибка, не является местом, где ошибка фактически произошла, и приятно видеть, как данные выглядели без изменений и после процесса изменения. Иногда у вас есть неверные данные, да (в большинстве случаев, да), но иногда у вас есть ошибка. Наличие обеих этих таблиц позволяет вам легко увидеть, какая из этих двух.

В качестве последнего шага вы можете вставить все свои процессы в таблицу журналирования и убедиться, что запись существует, прежде чем выполнять следующий шаг, если вас беспокоит потеря некоторых выполнений, которые не возвращаются в пакет.

...