Честно говоря, думал, получится средних размеров заметка.
С кучей скриншотов и разными экспериментами по использованию опции Автокоммит в процедурах ODI. А на самом деле вышло вот что.
В, например, стандартном модуле знаний "IKM SQL Control Append" есть такая последовательность шагов
Если в процессе работы модуля знаний ошибок в шагах 90 и 100 не произошло, то в 110 шаге изменения в целевой таблице будут закреплены в БД.
Если же в шаге 90 или 100 возникнет исключение, ни одно из изменений не будет закоммичено в БД. Или, по другому говоря, если при вставке данных возникнет ошибка, предыдущая команда на удаления всех данных из целевой таблицы тоже откатится.
В процедурах (или модулях знаний) использование нескольких уровней транзакций может задаваться для каждого шага процедуры, как для команды на источнике (Command on Source) так и для приемника данных (Command on Target).
Если выбрана одна из транзакций (которых всего 10 - от 0 до 9), появляется выбор:
Не делать коммит, делать, делать после 1000 строк. Пример использования данной возможности как раз и показан парой скриншотов выше.
Эксперимент 1:
Процедура без шага автокоммита. Просто добавляем запись в таблицу в первом шаге процедуры, и больше никаких команд нет:
Результат - строка добавилась в таблицу, что значит что по окончанию работы процедуры произошла автоматическая фиксация транзакции.
Эксперимент 2:
Процедура находится в пакете, после процедуры стоит шаг задержки на 100 секунд, во время которых проверяется, закрепились ли изменения в целевой таблице.
Результат - строка появилась в таблице только по окончанию работы пакета.
Эксперимент 3:
За первой процедурой со вставкой одной строки, добавляется вторая процедура, в которой находится команда коммит для Транзакции номер 3, затем ставится команда задержки, во время которой процеряется целевая таблица.
Результат - строка появилась в таблице сразу, т.е. можно в рамках одного пакета делать вставку/модификацию данных и их коммит разными процедурами. Кстати, если во второй процедуре сделать коммит на другой номер транзакции, изменения будет закреплены только по окончанию работы пакета.
И последний эксперимент, номер 4:
Берем процедуру с несколькими шагами, каждый из которых добавляет строки в целевую таблицу, при этом один из шагов содержит ошибку. После шагов стоит коммит.
Ошибочный шаг - шаг под номером 10. Для этого шага я специально установил опцию игнорирования ошибок.
Результат - несмотря на наличие ошибочного шага, строки из шагов Insert 1 и Insert 3 добавлены в целевую таблицу.
Надеюсь, вам будет полезно это маленькое исследование работы процедур в Oracle Data Integrator.
Смотри также: Один сценарий ODI - одна сессия в СУБД Oracle.
Комментариев нет:
Отправить комментарий
Примечание. Отправлять комментарии могут только участники этого блога.