Как запустить файл сценария вставки в Oracle с около 2,5 миллионов операторов вставки?

У меня есть файл сценария вставки в Oracle с около 2,5 миллионов операторов вставки. Идею нужно вставить в таблицу Oracle.

Я попытался вставить с помощью SQL Developer, выполнив файл напрямую @path\script.sql, Но это время вышло.

4 ответа

2,5 миллиона отдельных операторов INSERT всегда будут отстойными: вам нужно использовать что-то более подходящее для больших объемов данных

"Это экспорт, я пытаюсь вставить эти записи в другую таблицу"

Наилучшим подходом было бы повторить экспорт в другом формате, например, используя datadump.

В качестве альтернативы, как рекомендует @thatjeffsmith, вы можете экспортировать записи в формате CSV и импортировать их с помощью SQL * Loader;

SQL Developer имеет варианты, чтобы помочь с этим.

В крайнем случае удалите по сценарию INSERT часть утверждений и оставить только значения в csv формат.

Определить EXTERNAL TABLE или загрузить его SQL*Loader

Если это одноразовый скрипт, потратьте несколько минут, чтобы вручную сгруппировать операторы в анонимные блоки PL/SQL, добавив несколько BEGIN а также END; / в файл. Нет необходимости использовать альтернативный формат или инструмент, если вы не собираетесь постоянно восстанавливать этот файл.

Сценарии с большим количеством операторов обычно работают медленно из-за задержки в сети. Каждый оператор отправляется на сервер, выполняется и возвращает статус. Даже при работе на том же хосте накладные расходы на связь могут по-прежнему превышать количество времени, затрачиваемое на выполнение реальной работы.

Блоки PL/SQL отправляются на сервер как единое целое. Если вы отправляете блоки по 100 операторов за раз, нагрузка на сеть будет снижена на 99%. Вы не увидите большого улучшения при использовании блоков 1000, 10000 и т. Д., Но чем больше блок, тем меньше ручного редактирования вам нужно. Но будьте осторожны, если блок слишком большой, он превысит лимит компиляции и выдаст ошибку.

Предполагая, что эти записи чистые, вы можете отключить ведение журнала и индексирование для таблиц, которые вы хотите вставить. Также я бы сделал коммит после 1000 записей или согласно вашему требованию.

Другие вопросы по тегам