Отправляет email-рассылки с помощью сервиса Sendsay

СУБД Oracle "с нуля"

  Все выпуски  

Использование инструмента Oracle SQL*Loader


Информационный Канал Subscribe.Ru

Выпуск 18

Здравствуйте, дорогие читатели рассылки!

Сегодня мы продолжаем тему импорта данных, начатую в предыдущем выпуске. Как показывает практика, это довольно частая задача. Ведь у Вас нет никакого желания вносить массу данных с клавиатуры вручную??? Ручной ввод требует много терпения и времени, и, зачастую это очень физически-тяжелая работа.

Я буду очень рад, если смогу этой статьей облегчить чей-то труд :)

А теперь несколько вопросов по предыдущему выпуску:

  1. Для чего используется инструмент Oracle Export ?
  2. А для чего используется Import ?
  3. Назовите две причины использования связки Export-Import .

Использование инструмента SQL*Loader

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

Для работы с SQL*Loader необходимы два файла. Первым является входной файл данных (чаще всего используются простые текстовые файлы), а второй – это файл описания структуры данных (называемый также управляющим файлом загрузчика – loader control file). Управляющий файл загрузчика включает в себя описание типов данных столбцов, способ разделения столбцов и дополнительные параметры.

Управляющий файл загрузчика

Итак, управляющий файл загрузчика описывает способ интерпретации данных. Иными словами, входной файл содержит ЧТО мы хотим загрузить, а управляющий файл загрузчика определяет КАК надо загрузить.

Управляющий файл загрузчика – это текстовый файл, который можно легко написать или отредактировать в простейших редакторах вроде блокнота или vim . Он должен содержать набор директив (параметров), каждая из которых может занимать несколько строк. Все директивы нечувствительны к регистру, за исключением строк указанных в одинарных или двойных кавычках. Управляющий файл загрузчика может также содержать комментарии, которые начинаются с двойного дефиса (--).

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

В основе управляющего файла загрузчика лежит следующая информация:

  • Что необходимо сделать;
  • Где найти входной файл данных;
  • Куда надо выгрузить данные;
  • Какой формат данных.

Данные могут быть фиксированной длины или с разделителями.

Формат с фиксированной длиной записей

Если все поля записей имеют идентичную длину, то надо указать границы полей в управляющем файле загрузчика. Например:

LOAD DATA
INFILE 'E:\database\load\books1.dat'
INTO TABLE "LIBRARY".books1 (
Id POSITION (01:04) INTEGER EXTERNAL,
ISBN POSITION (05:18) CHAR,
OWNER_ID POSITION (22:24) INTEGER EXTERNAL,
PUBLISHER_ID POSITION (25:29) INTEGER EXTERNAL,
REM POSITION (30:40) CHAR)

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

Формат с переменной длиной записей

Если колонки в файле данных разного размера, то необходимо указать разделитель колонок. Этот разделитель является символом (или набором символов), который указывает SQL*Loader-у где колонки начинаются, и где они заканчиваются. Далее пример управляющего файла с записями переменной длины:

LOAD DATA
INFILE 'D:\database\load\books2.dat'
INTO TABLE "LIBRARY".books2
FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"'
(id, ISBN CHAR, owner_id, publisher_id, rem CHAR)

В этом примере используется та же самая информация, что и в предыдущем. За одним исключением: предполагается, что в файле данных все записи разделены запятыми. Существуют еще несколько дополнительных параметров, это:

  • BAD = имя_файла – Здесь можно указать файл, куда запишутся все данные, которые SQL*Loader по каким-либо причинам не смог загрузить.
  • CONTROL = имя_файла – имя управляющего файла загрузчика (этот параметр указывается в командной строке).
  • DATA = имя_файла – имя входного файла данных .
  • DIRECT = ( TRUE или FALSE ) – Использовать ли прямой метод загрузки данных. Этот метод рассмотрим чуть ниже.
  • PARALLEL = ( TRUE или FALSE ) – это директива параллельной загрузки данных.
  • LOAD = n – Количество записей, которые надо загрузить. По-умолчанию – все.
  • LOG = имя_файла – Имя файла журнала произведенных действий (будет записан весь консольный вывод).
  • ROWS = n – Для обычного режима загрузки этот параметр указывает количество команд INSERT , после которых необходимо осуществлять фиксацию транзакции. Для прямого режима это количество строк данных, которые читаются в оперативную память перед записью их на физический носитель. Обычный ( conventional ) и прямой ( direct ) режимы рассмотрим ниже.
  • SKIP = n – Количество строк файла данных (от начала), которые надо пропустить при загрузке. Обычно используется для продолжения прерванной операции загрузки данных.

Прямой (direct) режим загрузки данных

В обычном режиме загрузки данных используются SQL -операторы INSERT . При этом каждая команда выполняется, проходя всю логику SQL -анализатора. Для улучшения производительности загрузки данных (т.е. для ускорения этого процесса) используют дополнительный режим, называемый «прямым» ( direct path ).

При использовании прямого режима, данные записываются в файлы данных БД напрямую, минуя SQL -логику. Этот режим быстрее и намного эффективнее, но имеет несколько ограничений. Вот некоторые из ситуаций, когда нельзя применять прямой режим загрузки:

  • загружаемая таблица - кластерная;
  • с таблицей, в которую происходит загрузка данных, работают посторонние транзакции;
  • таблица, в которую направляются данные, индексирована.

Как и все прочие инструменты Oracle , SQL*Loader работает в командной строке и в графическом режиме ( Data Manager ). Для работы в командной строке, надо набрать команду "sqlldr" с параметрами. Например, так:

> SQLLDR CONTROL=my_control.ctl, LOG=my_log.log, BAD=my_bad.bad,
DATA=my_data.dat USERID=scott/tiger, LOAD=2000

Итак, сегодня мы узнали простой и эффективный способ загрузки внешних данных в БД Oracle . Как видите, для пополнения таблиц новыми данными, не надо быть шаманом, танцующим с бубнами. Все довольно тривиально. Самая сложная работа – это создать управляющий файл загрузчика. Надеюсь, эта статья поможет Вам не заблудиться в джунглях SQL*Loader .

Если Вы хотите поэкспериментировать с загрузкой данных, то советую все-таки почитать оригинальную документацию, поскольку существует еще масса возможностей, которые здесь не рассмотрены. И не играйте с производственными базами!!!

Что дальше?

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

Вопросы – Ответы

Вопрос: Так чем же отличаются Loader и Import?
Ответ: Import может загружать ТОЛЬКО данные файла экспорта, а SQL*Loader файлы любого формата, если известна их структура.

Вопрос: Какие данные можно загрузить с помощью SQL*Loader?
Ответ: Любые данные.

Вопрос: Какая разница между обычным и прямым режимами загрузки данных?
Ответ: В обычном режиме данные загружаются посредством транзакций с участием операторов INSERT, а в прямом ( direct ) режиме данные загружаются, минуя SQL-логику, и записываются в сегменты данных напрямую.

Упражнения

В качестве упражнения, предлагаю создать небольшую табличку и попробовать загрузить в нее данные при помощи SQL*Loader. Все возникшие при этом проблемы можно обсудить на форуме сайта oranet.ru. На этом же сайте Вы можете прочитать все предыдущие выпуски рассылки.

На этом, я прощаюсь.
Всего наилучшего, Lemon .

Злыгостев А.А. – lemon@oranet.ru или zlygostev@gmail.com


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.db.oraclefromzero
Отписаться
Вспомнить пароль

В избранное