2013-07-19 5 views
0

У меня есть проект ssis с пакетами 3 ssis, один из которых представляет собой родительский пакет, который вызывает другие 2 пакета на основе некоторого условия. В родительском пакете у меня есть контейнер цикла foreach, который будет считывать несколько файлов .csv из местоположения и на основе имени файла будет выполнен один из двух дочерних пакетов, и данные будут загружены в таблицы, представленные в MS SQL Server 2008. Поскольку считываются несколько файлов, если какой-либо из файлов генерирует ошибку в дочерних пакетах, я должен регистрировать данные об ошибках (например, имя файла, сообщение об ошибке, номер строки и т. д.) в таблице настраиваемых баз данных, удалять все записи, которые загрузился в таблицу и прочитал следующий файл, и пакет не должен останавливаться на действительных файлах и не вызывает ошибок при их чтении.Ошибки регистрации в SSIS

Скажите, если файл имеет 100 строк, и проблема в строке номер 50, тогда нам нужно записать данные об ошибках в таблицу, удалить строки с 1 по 49, которые были загружены в таблицу базы данных, и пакет для запуска выполнение следующего файла.

Как я могу достичь этого в SSIS?

ответ

1

Вы должны установить TransactionOption = * Обязательно * на контейнере цикл по каждому элементу и TransactionOption = * Поддерживаемое * на управление потоком элементов внутри него. Это позволит отменить транзакции, если в ваших дочерних пакетах возникнут какие-либо осложнения. Более подробную информацию о собственности «TransactionOption» можно найти @http://msdn.microsoft.com/en-us/library/ms137690.aspx

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

1

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

1-й поток данных: Должен прочитать файл .csv и загрузить данные в таблицу темп. Если файл обрабатывается с ошибками, вы просто обрезаете таблицу temp. Кроме того, вы также должны настроить вывод источника плоского файла для перенаправления ошибок в таблицу журнала ошибок.

второго потока данных: С другой стороны, в случае обработки ошибок, вам нужно передать строки из температуры в таблицу назначения. Итак, источник данных OLEDB - это «временная таблица», а пункт назначения OLEDB - «конечная таблица».

Не забудьте обрезать временную таблицу в обоих случаях, так как в следующем файле потребуется пустая таблица.

0

Мы делаем что-то подобное с файлами Excel У нас есть переменная ErrorsFound, которая сбрасывается каждый раз, когда новый файл читается внутри каждого цикла. Компонент скрипта проверяет каждую строку данных и устанавливает для параметра ErrorsFound значение true, если обнаружена ошибка, и строит строку, содержащую любые сведения об ошибке. Затем - на основе переменной ErrorsFound - либо данные импортируются, либо ошибка записывается в таблицу журналов.

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

1

Давайте немного сломаем это.

Я предполагаю, что у вас есть поток данных, который обрабатывает отдельный файл за раз. Поток данных будет считывать входной файл через исходное соединение, преобразовывать его и затем загружать данные в пункт назначения. Вам в основном нужно будет реализовать поток обработчика ошибок в ваших преобразованиях, выбрав «Redirect Row». Подробная информация о потоке ошибок приведена здесь: https://docs.microsoft.com/en-us/sql/integration-services/data-flow/error-handling-in-data.

Если вам нужно пропустить весь файл из-за плохого формата, вам потребуется реализовать ограничение приоритета для сбоя в задаче файловой системы.

Мое предложение состоит в том, чтобы получить копию книги по подготовке к экзамену для экзамена 70-463 - у нее есть примеры отличной практики именно для тех сценариев, с которыми вы столкнулись.

Смежные вопросы