2016-10-06 5 views
1

Недавно я взял дампы данных из базы данных Oracle. Многие из них большие по размеру (~ 5 ГБ). Я пытаюсь вставить затопленные данные в другую базу данных Oracle, выполнив следующий SQL в SQL DeveloperOracle Bulk Insert с использованием SQL Developer

@C:\path\to\table_dump1.sql; 
@C:\path\to\table_dump2.sql; 
@C:\path\to\table_dump3.sql; 
      : 

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

+0

Какая у вас свалка? являются ли эти файлы списком инструкций вставки или что-то еще? – Aleksej

ответ

1

SQL * Loader - мой любимый способ массовой загрузки больших объемов данных в Oracle. Используйте опцию прямого вставки пути для максимальной скорости, но понимайте воздействие нагрузок с прямым трактом (например, все данные вставлены мимо метки высокой воды, что прекрасно, если вы усекаете свою таблицу). У него даже есть допущение для плохих строк, поэтому, если ваши данные имеют «некоторые» ошибки, они все равно могут работать.

SQL * Loader может приостанавливать индексы и строить их все в конце, что делает массовую вставку очень быстрой.

Пример SQL * Loader вызова:

$SQLDIR/sqlldr /@MyDatabase direct=false silent=feedback \ 
    control=mydata.ctl log=/apps/logs/mydata.log bad=/apps/logs/mydata.bad \ 
    rows=200000 

И mydata.ctl будет выглядеть примерно так:

LOAD DATA 
INFILE '/apps/load_files/mytable.dat' 
INTO TABLE my_schema.my_able 
FIELDS TERMINATED BY "|" 
(ORDER_ID, 
    ORDER_DATE, 
    PART_NUMBER, 
    QUANTITY) 

... В качестве альтернативы, если вы просто скопировать все содержимое одна таблица в другую, через базы данных, вы можете сделать это, если ваш DBA настроит DBlink (30-секундный процесс), предполагая, что ваша БД настроена с повторным пространством для этого.

truncate table my_schema.my_table; 

insert into my_schema.my_table 
select * from [email protected]_remote_db; 

Использование /* +append */ намека еще может использовать прямую вставку пути.

+0

Мои файлы дампа - это всего лишь миллионы строк вставляемых операторов SQL. Могу ли я использовать SQL Loader для загрузки данных? –

+0

Нет, не совсем ... вместо инструкций вставки вы хотите изменить файлы как файлы с фиксированной шириной, так и файлы с разделителями. Каково происхождение данных? Мое предположение было бы проще извлечь его в виде файла данных, чем ряд операторов SQL ... Если нет, вы могли бы сценарий SQL в файл данных (например, с использованием Perl) – Hambone

+0

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