используя sqlldr из Java - PullRequest
0 голосов
/ 19 мая 2011

У меня есть утилита Java для импорта базы данных.Я хотел бы иметь возможность использовать sqlldr для производительности на Oracle.Я мог бы создать файлы control и data, но это не похоже на The Right Thing ™.Я должен иметь возможность потоковой передачи данных, предоставив INFILE "-" в контрольном файле ( q1 - как? Из командной строки, я могу передать "echo <data...>" к sqlldr, но должен быть способпросто поток строки во входной поток для процесса? никогда раньше не использовал Java для этого).Я не вижу, как транслировать сам управляющий файл ( q2 - или я упускаю что-то очевидное?).Я мог бы использовать именованные каналы, но я понятия не имею, как создать экземпляр и использовать их из Java в Windows ( q3 - это будет работать и как?).

<moan> почему оракул должен быть таким сложным?в MySQL это было тривиально ... <moan>

Ответы [ 2 ]

1 голос
/ 19 мая 2011

"Почему оракул должен быть таким сложным? было тривиально в MySQL "

Что вы должны помнить, так это то, что Oracle - почтенный продукт. SQL Loader в качестве утилиты должно быть двадцать лет, а может и больше. Поэтому, естественно, труднее работать с некоторыми более новыми инструментами.

И именно поэтому вам следует прекратить попытки встроить SQL Loader в ваше новое приложение Java :-) Вместо этого посмотрите на внешние таблицы. Поскольку это объекты базы данных, мы можем использовать SQL SELECT против них, поэтому автоматизировать процессы загрузки с ними намного проще. Я написал немного больше о внешних таблицах в своем ответе на другой вопрос. Проверьте это.

0 голосов
/ 20 мая 2011

По сути, SQLLDR - это получение данных из одного или нескольких файлов в таблицу базы данных. Он эффективен в этой роли, особенно при работе с несколькими файлами или параллельной загрузкой из одного файла (он может иметь несколько потоков / процессов, считывающих из одного файла одновременно).

Не все из них хорошо подходят для чтения из чего-то, что не является реальным файлом. Если ваш поток данных поступает из веб-службы, я бы извлек его с помощью UTL_HTTP. Если он приходит с FTP, я бы отправил FTP прямо в базу данных как CLOB / BLOB и обработал бы его оттуда.

В зависимости от вашей версии, также обратите внимание на возможности препроцессора внешних таблиц

...