Загрузка больших объемов данных в базу данных Oracle SQL - PullRequest
3 голосов
/ 07 июня 2010

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

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

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

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

  3. Какой-то пакетный вкладыш.

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

Ответы [ 3 ]

5 голосов
/ 08 июня 2010

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

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

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

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

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

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

0 голосов
/ 08 июня 2010

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

0 голосов
/ 07 июня 2010

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

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

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

...