суббота, 16 ноября 2013 г.

Какой-ты, комит?

Честно говоря, думал, получится средних размеров заметка.

С кучей скриншотов и разными экспериментами по использованию опции Автокоммит в процедурах 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.

Комментариев нет:

Отправить комментарий