Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Получить в SSIS пакете номер ошибки SQL  [new]
IDVT
Member

Откуда:
Сообщений: 313
Коллеги подскажите пожалуйста:

Как в SSIS пакете можно получить код и описание ошибки потока данных, к примеру:
задача: выполнить ХП, результат вставить в определенную таблицу, все возникшие ошибки вставить в другую таблицу.
В проекте два компонента.
1. Источник - выполняет ХП с параметрами
2. Назначение - заливает данные в целевую таблицу

добавляю третий операнд, "Назначение исключений", в нем просто пишу инструкцию Insert в таблицу с исключениями, кладу в таблицу имя ХП, параметры, время и т.д., так же должен положить номер ошибки и текст, но не получается его получить.

Также прошу по рекомендовать книгу по SSIS для чайников =)

Заранее всем спасибо за помощь.
25 окт 16, 10:29    [19818655]     Ответить | Цитировать Сообщить модератору
 Re: Получить в SSIS пакете номер ошибки SQL  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
IDVT,

не совсем понятно - для чего это нужно, т.к. ошибки содержатся в отчете пакета. В каталоге служб находите пакет и через ПКМ смотрите отчет.
25 окт 16, 12:03    [19819191]     Ответить | Цитировать Сообщить модератору
 Re: Получить в SSIS пакете номер ошибки SQL  [new]
IDVT
Member

Откуда:
Сообщений: 313
Дело в том, что в завершении всего потока ETL необходимо актуализировать данные (в одной транзакции) ХД исключительно по тем объектам (к примеру, ЦФО), у которых в процессе извлечения данных не было выявлено исключение.

мне кажется я на финишной прямой.

добавил "Скрипт", протянул красную стрелку (исключения) в него из источника "Назначения OLEDB", в скрипте прописал следующий код:

public override void Вход0_ProcessInputRow(Вход0Buffer Row)
    {
        Row.ErrorDescription = this.ComponentMetaData.GetErrorDescription(Row.ErrorCode);
    };


пока ошибку кладу в неструктурированный файл, не могу найти элемент SSIS "Назначение" который бы работал с параметрами
т.е. выполнял следующее:

insert ... select @p1, @p2, ErrorCode
25 окт 16, 12:14    [19819244]     Ответить | Цитировать Сообщить модератору
 Re: Получить в SSIS пакете номер ошибки SQL  [new]
IDVT
Member

Откуда:
Сообщений: 313
IDVT
Дело в том, что в завершении всего потока ETL необходимо актуализировать данные (в одной транзакции) ХД исключительно по тем объектам (к примеру, ЦФО), у которых в процессе извлечения данных не было выявлено исключение.

мне кажется я на финишной прямой.

добавил "Скрипт", протянул красную стрелку (исключения) в него из источника "Назначения OLEDB", в скрипте прописал следующий код:

public override void Вход0_ProcessInputRow(Вход0Buffer Row)
    {
        Row.ErrorDescription = this.ComponentMetaData.GetErrorDescription(Row.ErrorCode);
    };


пока ошибку кладу в неструктурированный файл, не могу найти элемент SSIS "Назначение" который бы работал с параметрами
т.е. выполнял следующее:

insert ... select @p1, @p2, ErrorCode
Я так понимаю вставку данных в таблицу можно в скрипте сделать, необязательно же визуальный компонент использовать?
25 окт 16, 12:18    [19819273]     Ответить | Цитировать Сообщить модератору
 Re: Получить в SSIS пакете номер ошибки SQL  [new]
Ferdipux
Member

Откуда: Москва
Сообщений: 554
IDVT
...
добавил "Скрипт", протянул красную стрелку (исключения) в него из источника "Назначения OLEDB", в скрипте прописал следующий код:

пока ошибку кладу в неструктурированный файл, не могу найти элемент SSIS "Назначение" который бы работал с параметрами
т.е. выполнял следующее:

insert ... select @p1, @p2, ErrorCode


Это можно сделать через Derived Column, где в нужную вам колонку потока данных копировать параметры из переменных. А затем поток данных класть во временную таблицу и затем делать MERGE с основной. Или можно делать OLE DB Command (посмотрите что генерит SCD Wizard), которая для каждой строчки выполнит команду, но это, ммм, небыстро.
25 окт 16, 12:26    [19819340]     Ответить | Цитировать Сообщить модератору
 Re: Получить в SSIS пакете номер ошибки SQL  [new]
IDVT
Member

Откуда:
Сообщений: 313
Подскажите пожалуйста как отловить ошибку источника данных, к примеру в ХП сделал простое деление 0 на 0, весь проект падает в ошибку без возможности выявления ее номера и текста.
25 окт 16, 13:14    [19819532]     Ответить | Цитировать Сообщить модератору
 Re: Получить в SSIS пакете номер ошибки SQL  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
IDVT,

смотрите на параметры таска:
- FailPackageOnFailure
- FailParentOnFailure

напишите обработчик событий (OnError)

посмотрите на системные переменные
- ErrorCode
- ErrorDescription

в довесок Error Handling in Data
25 окт 16, 14:04    [19819857]     Ответить | Цитировать Сообщить модератору
 Re: Получить в SSIS пакете номер ошибки SQL  [new]
IDVT
Member

Откуда:
Сообщений: 313
Спасибо за направление!
25 окт 16, 14:53    [19820131]     Ответить | Цитировать Сообщить модератору
 Re: Получить в SSIS пакете номер ошибки SQL  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
IDVT,

одно неясно, судя по формулировке:

автор
задача: выполнить ХП, результат вставить в определенную таблицу, все возникшие ошибки вставить в другую таблицу.


SSIS здесь каким боком? Он не для выполнения процедур придуман.
25 окт 16, 17:50    [19821136]     Ответить | Цитировать Сообщить модератору
 Re: Получить в SSIS пакете номер ошибки SQL  [new]
IDVT
Member

Откуда:
Сообщений: 313
Владислав Колосов
IDVT,

одно неясно, судя по формулировке:

автор
задача: выполнить ХП, результат вставить в определенную таблицу, все возникшие ошибки вставить в другую таблицу.


SSIS здесь каким боком? Он не для выполнения процедур придуман.
Владислав, это некий промежуточный этап, после усвоения предметной области, перепишу процедуры в обычные выборки и избавлюсь от линков, много времени на это уйдет.
27 окт 16, 09:17    [19826545]     Ответить | Цитировать Сообщить модератору
 Re: Получить в SSIS пакете номер ошибки SQL  [new]
IDVT
Member

Откуда:
Сообщений: 313
Коллеги подскажите пожалуйста, в потоке управления создал N'ый шаг "выполнить запрос", этот запрос возвращает перечень ЦФО (список), присваивает переменной. Затем добавил следующим шагом "Контейнер цикл по каждому элементу", внутри цикла поток данных, содержащий 11 связок переливки данных (Источник - назначение OLEDB).

Так вот, при запуски отладки, замечаю какие то тормоза перед каждой итерацией цикла, по сути грузит гораздо быстрее чем переходит на следующий шаг, такое ощущение что по нескольку тысяч раз что-то проверяет. Во всех объектах назначения снял галочку "Проверять на ограничение", где это возможно установил "Блокировать таблицу", увеличил буфер строк по умолчанию на 100'000 . Суммарное количество строк на каждой итерации не превышает 200к.
Как можно победить данные тормоза и где искать в чем проблема?
27 окт 16, 09:28    [19826614]     Ответить | Цитировать Сообщить модератору
 Re: Получить в SSIS пакете номер ошибки SQL  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
IDVT,

назначение SSIS - импорт-экспорт данных из /в внешних источников в базу данных, что Вы пытаетесь заставить его делать?
27 окт 16, 11:30    [19827307]     Ответить | Цитировать Сообщить модератору
 Re: Получить в SSIS пакете номер ошибки SQL  [new]
IDVT
Member

Откуда:
Сообщений: 313
Именно это и делаю.

В контейнере цикла на каждой итерации присваиваю переменным имя линка и т.д.
в потоке данных (размещен в цикле) выполняю переливку данных из ХП (по определенному линку 'один из параметров') в промежуточную область. Всего 11 процедур на разные таблицы.

Тормоза замечаю на каждой итерации, к примеру, подумает секунд 15-20 и начинает переливать данные, льет примерно 2-3 секунды, и снова в задумку уходит....
27 окт 16, 11:50    [19827473]     Ответить | Цитировать Сообщить модератору
 Re: Получить в SSIS пакете номер ошибки SQL  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Linked Server там зачем и процедуры? Используйте прямые запросы к данным.
27 окт 16, 11:53    [19827497]     Ответить | Цитировать Сообщить модератору
 Re: Получить в SSIS пакете номер ошибки SQL  [new]
IDVT
Member

Откуда:
Сообщений: 313
пока нет возможности все переписать с T-SQL на SSIS. Поэтому и пользуюсь ХП, некий переходной вариант. Тормоза могут возникать в следствии использования линков?
27 окт 16, 11:58    [19827526]     Ответить | Цитировать Сообщить модератору
 Re: Получить в SSIS пакете номер ошибки SQL  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
IDVT,

SSIS же проверяет корректность пакета - структур данных, подключения, код и прочее.
Процедуры могут перекомпилироваться, затраты на подключение, что угодно.
27 окт 16, 12:29    [19827711]     Ответить | Цитировать Сообщить модератору
 Re: Получить в SSIS пакете номер ошибки SQL  [new]
IDVT
Member

Откуда:
Сообщений: 313
Владислав Колосов
IDVT,

SSIS же проверяет корректность пакета - структур данных, подключения, код и прочее.
Процедуры могут перекомпилироваться, затраты на подключение, что угодно.

Подскажите пожалуйста, есть возможность отключить в SSIS эту проверку, на подобие, как отключение проверки в режиме проектирования (DelayValidation), все что упадет в ошибку отловлю обработчиком событий, напрягает этот простой....
27 окт 16, 13:01    [19827930]     Ответить | Цитировать Сообщить модератору
 Re: Получить в SSIS пакете номер ошибки SQL  [new]
Ferdipux
Member

Откуда: Москва
Сообщений: 554
IDVT
Подскажите пожалуйста, есть возможность отключить в SSIS эту проверку, на подобие, как отключение проверки в режиме проектирования (DelayValidation), все что упадет в ошибку отловлю обработчиком событий, напрягает этот простой....

DelayValidation управляет моментом, когда будет осуществляться валидация. Это делается или при старте пакета (если = false) или непосредственно перед исполнением задачи (= true). Отложенная валидация полезна, к примеру, когда у вас используются временные таблицы, и до начала работы их просто не существует, а к моменту выполнения задачи - они вполне живы.
А где у вас тратится время? Каждая задача состоит из фаз - Validate, Prepare to Execute, Execute, Post Execute. Что именно тормозит?
27 окт 16, 14:58    [19828803]     Ответить | Цитировать Сообщить модератору
 Re: Получить в SSIS пакете номер ошибки SQL  [new]
IDVT
Member

Откуда:
Сообщений: 313
Все отлично, разобрался, ВСЕМ большое спасибо за помощь!!!!
27 окт 16, 17:35    [19829958]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить