Sqlldr oracle как установить

Обновлено: 04.07.2024

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

Итак, допустим нам надо импортировать данные из такого вот файла.

  • импортировать все, кроме строк с поля Id, text;
  • пропустить поля void1, void2;
  • вместо полей value1 и value2 импортировать их сумму, т.е. value1+value2;
  • импортировать бинарный файл, имя которого находится в поле file.

Данные будем импортировать в эту таблицу:

  • scott/scott@dbstart - типовая строка подключения к базе;
  • control.txt - этот так называемый управляющий файл;
  • loader.log - это файл логирования процесса загрузки.
  • options (skip=1) - указание пропустить первую строку файла (заголовок);
  • load data characterset CL8MSWIN1251 - задание кодировки файла данных;
  • infile 'example.dat' - файл с исходными данными;
  • badfile 'example.bad' - в этот файл запишутся данные, которые не были импортированы по причине ошибок, например, строка в поле типа number;
  • discardfile 'example.dis' - в этот файл попадут строки, которые не соответствуют условию загрузки, в нашем случае здесь будет строка с - говорит о том, что если в таблице уже есть данные, их надо заменить;
  • into table tLoader when id<>'20' - указание имени таблицы и условия фильтрации данных;
  • fields terminated by ';' optionally encosed by '"' - поля разделяются символом ";", и могут содержать кавычки;
  • поле Id - целое число;
  • поля void1 и void2 пропускаем;
  • поле char_data помещаем в таблицу;
  • Поле value1 пропускаем, но значение запоминаем;
  • Значение val получаем как сумму значения текущего поля и предыдущего, которое запомнили;
  • Имя файла blob_filename зачитываем и сохраняем и выполняем загрузку image_data LOBFILE(blob_filename) TERMINATED BY EOF бинарного фалйа.

Как видите, SQL*Loader - это мощное средство СУБД Oracle, которое позволяет решить большинство типовых задач импорта данных.

Возможности SQL*Loader

  • Загрузка данных из разных файлов в одной сессии
  • Загрузка данных в разные таблицы в одной сессии
  • Указание кодировки файла данных
  • Использование SQL функций перед загрузкой
  • Генерация уникальных ключей для колонок
  • Ограничение вставляемых данных по условию
  • Загрузка двоичных данных
  • Запись ошибочных данных в файл ошибок




На входе требуется два файла:

1) Файл данных

2) Управляющий файл (.CTL)

Файл описания структуры данных (loader control file), содержит описание типов данных столбцов, способ разделения столбцов, как обрабатывать данные и т.д. Именно в этом файле задаются настройки обработки файла данных. Часть настроек, можно переопределить через командную строку при запуске Oracle SQL*Loader.

Выходные данные:

1) Данные в таблице БД

2) Файл отчета (Log file)

Управляющий файл SQL*Loader (CTL)

INSERT Используется по умолчанию. Таблица перед загрузкой не должна содержать данные. Если в таблице есть строки данных, то выполнение загрузки SQL*Loader-ом не будет выполнено
APPEND Позволяет добавлять строки в таблицу таким образом, чтобы они не оказывали воздействия на уже существующие строки данных.
REPLACE Удаляются все имеющиеся в таблице строки, а затем загружаются новые. При удалении строк срабатывают триггеры существующие на таблице.
TRUNCATE Удаляются все имеющиеся в таблице строки. Триггеры не срабатывают.

Запуск импорта данныхSQL*Loader

Для запуска загрузки данных через SQL*Loader

Помните, что перед запуском скрипта загрузки, таблица уже должна быть создана.

Опции командной строки SQL*Loader

Список параметров можно получить запустив SQL*Loader без указания параметров:

Данные для загрузки непосредственно в управляющем файле

Пример данных содержащихся в управляющем файле. Начало данных определяет оператор BEGINDATA

Выполняем скрипт test.sh и смотрим результат:

Плюс создался файл лога XX_MYEXAMPLE.log

Данные с разными разделителями в данных + форматирование даты


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

1- Что такое Oracle Client?

Если у вас есть 2 компьютера A и B. На компьютере B установлен Oracle Database. Если на компьютере A вы хотите работать с базой данных Oracle компьютера B, компьютер A должен установить Oracle Client.


Oracle Client это часть программного обеспечения Oracle Database, который не является базой данных. Но помогает разговаривать с базой данных Oracle.

Примечание: Oracle Database и есть Oracle Client.

2- Download Oracle Client

Самая новая версия Oracle Client является 12.x, она может работать с разными версиями Oracle Database (10, 11, 12), поэтому вам стоит скачать данную версию.

Чтобы скачать Oracle Client, перейдите по данной ссылке:



Здесь у вас есть 2 выбора для скачивания, это Oracle Client 32bit или Oracle Client 64bit, если вы хотите работать с такими визуальными инструментами как PL/SQL Developer, Toad, .. вам стоит скачать и установить версию 32bit.

Здесь я скачаю версию 32bit. Чтобы скачать требуется зарегистрироваться с аккаунтом, если у вас его нет, вы можете зарегистрироваться бесплатно.



3- Установка Oracle Client


Данный вид установки устанавливает только разделенные библиотеки требуемые для "Приложений интерфеса вызовов Oracle" (Oracle Call Interface Applications), это приложения использующие свойство Instant Client. Оно требует намного меньше пространства на диске, чем другие виды установок Oracle Client.

Примечание: Если вы выбрали установку Instant Client, то вы не можете применить обновления программного обеспечения за все время сеанса установки. Чтобы скачать и применить новейшие обновления программного обеспечения, вам нужно выбрать вид установки Administrator, Runtime, или Custom.

Этот вид установки устанавливает Oracle Enterprise Manager Standalone Console, сетевые службы Oracle и программное обеспечение Client позволяет приложениям или персональным приложениям подключиться к базе данных Oracle. Он так же устанавливает инструменты разработки, которые вы можете использовать для разработки приложений.

Этот вид установки устанавливает ограниченное количество компонентов для пользователя, использующего приложение базы данных. За исключением Oracle Enterprise Manager Standalone Console, который будет устанавливать компоненты идентично виду установки Administrator.

Этот вид установки позволяет вам выбрать приложение Client и утилиты, которые вы хотите установить.

Грузим большие объемы (порядка 500 тыс. записей) каждые 5 минут с помощью sqlldr в секционированную таблицу. Секции по часам, плюс есть еще подсекции (12 штук). Контрол файл:

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

Как такое можно объяснить? По окончании загрузки в лог файле видим:


140k 10 10 золотых знаков 46 46 серебряных знаков 115 115 бронзовых знаков


А где именно это можно глянуть? В контрол файле не стоит. @Smithson Это sql loader. у него нет никакого SQL кода и никакого аутокоммита Где писать? В контрол файле? Насколько я понимаю, автокоммит в sqlldr по умолчанию. И управлять частотой коммита можно только через опцию ROWS. Не пришлете ссылочку, где про "SET AUTOCOMMIT OFF" для SQL Loader есть информация.

Нет, отката (rollback), в привычном понимании этого термина, с установленой опцией direct=true SQL*Loader не производит.

Direct path load не пишет, ни UNDO, ни (по умолчанию) redo logs. Загружаемые данные подготавливаются в буфере и пишутся напрямую в datafile, используя не отформатированные блоки поверх HWM (high-water-mark).

При возникновении ошибки (errors=0) или, если порог допостимых ошибок превышен (errors>0), SQL*Loader прерывает загрузку, но все уже загруженые страницы сохранятся. Подробнее о прерывании загрузки в секции Interrupted Loads.

Воиспроводимый пример для наглядности. Попробуем записать null в колонку с ограничением not null :

Генеририруем 100 записей данных с null в 66 строке:

В контроль-файл установим: прервать по первой ошибке, страница - 30 записей:

Заметьте, Save data point reached, а не Commit data point reached.

В лог файле видно, что первая, вторая и частично (до ошибочной записи) третья страницы сохранились, и на этом SQL*Loader прервал загрузку:

Читайте также: