Загрузка больших объемов данных в базу данных Oracle SQL.

Мне было интересно, есть ли у кого-нибудь опыт в том, что я собираюсь предпринять. У меня есть несколько CSV-файлов размером около ГБ, и мне нужно загрузить их в базу данных оракула. Хотя большая часть моей работы после загрузки будет доступна только для чтения, мне нужно время от времени загружать обновления. В основном мне просто нужен хороший инструмент для загрузки нескольких строк данных за раз до моей базы данных.

Вот что я нашел до сих пор:

  1. Я мог бы использовать SQL Loader, чтобы сделать большую часть работы

  2. Я мог бы использовать команды массовой вставки

  3. Какая-то пакетная вставка.

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


person James    schedule 07.06.2010    source источник


Ответы (3)


Я был бы очень удивлен, если бы вы могли создать собственную утилиту, которая будет превосходить Загрузка прямого пути SQL*Loader. Oracle создал эту утилиту именно для этой цели - вероятность построить что-то более эффективное практически равна нулю. Существует также параллельная загрузка прямого пути, что позволяет одновременно запускать несколько процессов прямой загрузки.

Из руководства:

Вместо того, чтобы заполнять буфер массива связывания и передавать его в базу данных Oracle с помощью оператора SQL INSERT, загрузка прямого пути использует API прямого пути для передачи данных, которые должны быть загружены, в механизм загрузки на сервере. Механизм загрузки строит структуру массива столбцов из переданных ему данных.

Механизм загрузки прямого пути использует структуру массива столбцов для форматирования блоков данных Oracle и построения индексных ключей. Недавно отформатированные блоки базы данных записываются непосредственно в базу данных (несколько блоков на запрос ввода-вывода с использованием асинхронной записи, если хост-платформа поддерживает асинхронный ввод-вывод).

Внутри для отформатированных блоков используется несколько буферов. Пока один буфер заполняется, один или несколько буферов записываются, если на хост-платформе доступен асинхронный ввод-вывод. Перекрывающиеся вычисления с вводом-выводом повышают производительность нагрузки.

В некоторых случаях загрузка по прямому пути нельзя использовать< /а>.

person DCookie    schedule 07.06.2010
comment
Вам по-прежнему нужен большой и сложный управляющий файл для использования SQL*Loader; а SQL*Plus имеет ограничение длины строки в 3000 символов). Это может быть молниеносно после того, что вы потратите значительное количество времени на настройку всего. - person vesperto; 09.01.2019

С таким объемом данных вам лучше быть уверенным в своем резервном хранилище - свободном месте на дисках dbf.

sqldr — это скриптовый диск, очень эффективный, как правило, более эффективный, чем скрипт sql. Единственное, что меня интересует, это величина данных. Я лично рассматривал бы несколько процессов sqlldr и назначал бы каждому из них подмножество данных и позволял бы процессам работать параллельно.

Вы сказали, что хотите загрузить несколько записей одновременно? Это может занять гораздо больше времени, чем вы думаете. Вы имели в виду несколько файлов одновременно?

person jim mcnamara    schedule 07.06.2010
comment
Я разделил данные на несколько файлов, чтобы все происходило параллельно. Я думал, что передача нескольких записей за один раз будет проходить быстрее... так как мне не придется иметь накладные расходы на взаимодействие с сервером для каждой записи. - person James; 07.06.2010
comment
@James — файлы фиксированной ширины можно загружать параллельно с SQL*Loader или внешними таблицами. Так что разделяйте свои файлы по содержимому, а не старайтесь перехитрить Oracle. - person PaulJ; 08.06.2010

Возможно, вы сможете создать внешнюю таблицу в файлах CSV и загрузить их, выбрав из внешней таблицы в другую таблицу. Будет ли этот метод быстрее, не уверен, однако может быть быстрее с точки зрения возни с тем, чтобы заставить sql*loader работать, особенно если у вас есть критерии для ОБНОВЛЕНИЙ.

person Stellios    schedule 08.06.2010