Почему регистрация ошибок dml игнорируется в параллельном операторе - PullRequest
1 голос
/ 28 марта 2019

У меня есть insert-select заявление, которое я выполняю параллельно.

Я пытаюсь добавить dml error logging для захвата исключений.

Но когда я изменяюсеанс параллельного ведения журнала ошибок просто игнорируется.

-- This is my error table:
TRUNCATE TABLE DWH.ERR$_DWH_CONV;

-- This code is finish with no error and insert rows to DWH.ERR$_DWH_CONV
BEGIN
EXECUTE IMMEDIATE
'alter session enable parallel dml';

INSERT
        /*+ monitor parallel(1) */
INTO    DWH.PURCHASE
select *
FROM    DWH.PURCHASE_C LOG ERRORS
INTO    DWH.ERR$_DWH_CONV ('DWH.PURCHASE') REJECT LIMIT UNLIMITED ;

commit;
END;

Но когда я запускаю этот код (параллель 6) - возникает исключение (ORA-12801), а таблица ошибок не имеетлюбое изменение:

BEGIN
EXECUTE IMMEDIATE
'alter session enable parallel dml';
INSERT
        /*+ monitor parallel(6) */
INTO    DWH.PURCHASE
select *
FROM    DWH.PURCHASE_C LOG ERRORS
INTO    DWH.ERR$_DWH_CONV ('DWH.PURCHASE') REJECT LIMIT UNLIMITED ;
commit;
END;

Эта разница также появляется, если я включаю или отключаю alter-session.

Я использую Oracle 11g.

СогласноДокументы Oracle, я не видел никаких ограничений на использование dml error logging с parallel ..

1 Ответ

2 голосов
/ 01 апреля 2019

Согласно документации для error_logging_clause

Ограничения на ведение журнала ошибок DML

  • Следующие условия приводят к сбою оператора и его откату без вызова возможности регистрации ошибок:

    ...

    • Любая операция INSERT или MERGE с прямым путем, которая вызывает уникальное ограничение или нарушение индекса.

Параллельный DML использует запись по прямому пути по умолчанию, но вы можете отключить прямой путь с помощью подсказки NOAPPEND. Это позволит утверждению использовать параллелизм, но с обычными записями. Это не так быстро, как параллельная прямая запись, но, по крайней мере, лучше, чем однопоточная обычная запись.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...