Oracle. взаимосвязь между job который изменяет данные (update) и ошибкой при срабатывании триггера (after update) . Oracle chains
Для расчета витрин данных на БД Oracle 11.2 использую Chains https://docs.oracle.com/cd/B28359_01/server.111/b28310/scheduse009.htm#ADMIN10021.
На последнем шаге есть программа которая обновляет значение в специальной таблице DM.param на 1 (на первом шаге аналогичная программа сбрасывает в 0). Это флаг для других внешних систем, что расчет витрин успешно завершён.
Код самой программы:
dbms_scheduler.create_program(
program_name => 'P_DM_PARAM_FINISH',
program_type => 'PLSQL_BLOCK',
program_action => 'update DM.param set the_end = 1, SYSMOMENT = sysdate;',
enabled => TRUE
На эту же таблицу "DM.param" завязан триггер (AFTER UPDATE ON DM.PARAM) который рассылает на почту уведомление о расчете витрины. Но напрямую триггер в коде расчета витрин или job'e не используется. Сегодня программа P_DM_PARAM_FINISH завершилась со статусом FAILD и ошибкой ORA-29278: SMTP transient error, ошибка связана сугубо с отправкой email и триггером. Что для меня странно, т.к напрямую job и триггер не связаны. Как триггер оказал влияние на работу job'a если триггер срабатывает после выполнения update, т.е. закрытия транзакции. (увы не могу точно сказать прошел ли update, т.к. перезапустили расчет и значение затерлось)
Кто-то может объяснить причины такого поведения?
Ответы (1 шт):
Триггер выполняется в той же транзакции, что и update. Так что ошибка в триггере, если ее не обработать, ведет к ошибке всей операции UPDATE и откату транзакции.