Шаг 136 - БД Oracle - SQL*Loader структура загрузчика

Для начала давайте посмотрим на саму структуру загрузчика SQL*Loader. Она представлена ниже на рисунке:

136_1.gif (7702 b)

Здесь, так называемый, "контрольный файл" - является основным звеном в работе загрузчика. Он задает параметры преобразования информации, в данные размещаемые в таблицах БД. При этом типы данных во внешних файлах могут не совпадать с типами данных в соответствующих столбцах таблиц вашей БД. Как правило при этом производится неявное преобразование типов. В контрольном файле используется специальный язык определения данных SQL*Loader DDL. Собственно сам загрузчик SQL*Loader может воспринимать файлы данных в различных форматах - переменной длины, фиксированной длинны и т.д. Это что касается файлов с входными данными. Файл некорректных данных, получает данные отвергнутые загрузчиком при чтении. При этом имеется две стадии определения корректности данных загрузки. Первая это проверка соответствия формата данных спецификации заданной в контрольном файле. Если имеются несоответствия, то данные помещаются в файл некорректных данных. Вторая стадия это когда сама БД, отвергает записи при загрузке, скажем, по причине нарушения ограничений ссылочной целостности. Такие данные так же помещаются в файл некорректных данных. При этом что, самое интересное, что некорректные данные помещаются в том же формате, что и исходные данные и после устранения недочетов все можно повторить снова и залить данные уже полностью. Файл отброшенных данных, формируется если при записи в БД, имеются данные не удовлетворяющие некоторому условию, заранее заданному в начале. При этом количество отброшенных записей не ограничивается, если есть такая необходимость это можно сделать, установив соответствующий параметр при загрузке. И последнее это журнальные файлы. Они формируются при загрузке данных и отражают весь ход процесса загрузки. Если по какой-либо причине создать файл загрузки не удастся, то SQL*Loader не будет запущен! Файл журнала имеет тоже имя, что и контрольный файл, но при этом его расширение меняется на log.

Теперь давайте рассмотрим контрольный файл и процесс и правила его создания. Контрольный файл как правило начинается ключевыми словами:

LOAD DATA

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

INFILE 'mydata.dat'

или

INFILE 'loaddata.txt'

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

МетодОписание
INSERTМетод используемый по умолчанию. При этом предполагается, что таблица перед загрузкой пустая! Если в таблице есть строки данных, то выполнение загрузки SQL*Loader-ом будет прекращено!
APPENDЭтот метод позволяет добавлять строки в таблицу таким образом, чтобы они не оказывали воздействия на уже существующие строки данных.
REPLACEПри использовании этого метода вначале удаляются все имеющиеся в таблице строки, а затем загружаются новые. Заметим, что при удалении строк срабатывают триггеры установленные на удаление данных в этой таблице.
TRUNCATEДля удаления старых строк используется SQL команда TRUNCATE. Она намного удобнее чем REPLACE поскольку при срабатывании триггеров удаления не генерируются сегменты отката транзакции. Но команда TRUNCATE является необратимой, так как происходит усечение таблицы и установка указателя таблицы на нулевую отметку. При применении данного способа требуется так же убрать все ограничения ссылочной целостности с таблиц БД.

Дальше идет определение таблицы для загрузки данных вот в таком формате:

INTO TABLE имя_таблицы (метод)

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

(поле1, поле2, ..... поле-n)

Вот так собственно строится контрольный файл для загрузки данных в таблицы БД Oracle. Для примера давайте я покажу вам как выглядит контрольный файл для таблички нашей учебной БД PRODUCTS. Вот его внутренность:

..\\products.ctl->

LOAD DATA

INFILE 'products.dat'

INTO TABLE PRODUCTS

FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS

	(MFR_ID, PRODUCT_ID, DESCRIPTION, PRICE, QTY_ON_HAND)

Здесь хорошо видны все секции необходимые для выполнения загрузки данных. Далее, мы с вами рассмотрим примеры загрузки данных в таблицы БД, на основе нашей учебной БД и не только! А пока усваивайте пройденное.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Летучий Сергей - 16.05.2004