Что может заставить Oracle игнорировать подсказку добавления, требующую от него выполнения прямой загрузки пути?
Я хочу сделать последовательную, регистрирующую вставку массовых данных из одной таблицы в другую. Это когда-то было частью миграции данных, поэтому замена разделов и т. д. не является ответом.
SQL будет иметь следующую структуру:
INSERT /*+ APPEND */ ... SELECT FROM ....
Что может заставить Oracle запустить эту условную вставку, а не вставку прямого пути?
Например, я считаю, что наличие триггера на столе заставит Oracle выполнить обычную вставку. Есть ли окончательный список ограничения?
1 ответ:
Цитата из http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1211797200346279484 :
"insert /*+ append * / игнорирует подсказку append и использует обычную загрузку пути, когда таблица имеет ссылочную целостность или триггер...- Том Кайт
Из https://docs.oracle.com/cd/E18283_01/server.112/e17118/statements_9014.htm#sthref6486
Однако приведенный в руководстве список не является исчерпывающим и не является полностью точным. Например, ограничения ссылочной целостности не блокируют вставку прямого пути, если это ограничение является частью ссылочного разбиения .Вставка прямого пути подчиняется ряду ограничений. Если таковые имеются эти ограничения нарушаются, после чего выполняется Oracle Database обычная вставка последовательно без возврата какого-либо сообщения, если только в противном случае отмечается:
В одной транзакции может быть несколько операторов вставки прямого пути, с другими операторами DML или без них. Однако, после одного Оператор DML изменяет конкретную таблицу, секцию или индекс, не более Оператор DML в транзакции может получить доступ к этой таблице, разделу или индекс.
Запросы, которые доступ к одной и той же таблице, разделу или индексу разрешен до инструкции Direct-path INSERT, но не после нее.
Если какой-либо последовательный или параллельный оператор пытается получить доступ к таблице, которая уже была изменена вставкой прямого пути в том же самом транзакция, после чего база данных возвращает ошибку и отклоняет заявление.
Целевая таблица не может принадлежать кластеру.
Целевая таблица не может содержать тип объекта столбцы.
Вставка прямого пути не поддерживается для таблицы, организованной по индексу (IOT), если она не секционирована, если она имеет таблицу сопоставления или если она является ссылка на материализованный вид.
Вставка прямого пути в одну секцию индексно-организованной таблицы (IOT) или в секционированную IOT только с одной секцией будет быть сделано последовательно, даже если IOT был создан в параллельном режиме или вы укажите подсказку APPEND или APPEND_VALUES. Однако, вставка прямого пути операции в секционированном IOT будут выполняться в параллельном режиме до тех пор, пока расширенное имя раздела не используется, и IOT имеет более одного имени. раздел.
В целевой таблице не могут быть определены триггеры или ограничения ссылочной целостности.
Целевая таблица не может быть реплицирована.
Транзакция, содержащая инструкцию INSERT прямого пути, не может быть распределена или стать распределенной.