Загрузка LOB данных используя SQL*Loader

Источник: all-oracle

Рекомендовано для:
  • Oracle Database 10g R1
  • Oracle Database 10g R2
  • Oracle Database 11g R1
 

В этой статье будет показано как использовать SQL*Loader для загрузки CLOB и BLOB данных, активировать параллельные операции загрузки при загрузке больших объемов данных. Существует несколько методов загрузки LOB средствами SQL*Loader, но в статье мы остановимся на методе LOBFILE, используя один LOB в одном файле.

Создадим 4 файла со следующим содержимым и поместим их в директорию, например в /tmp:

clob_test1.txt

This is demo CLOB file clob_test1.txt

clob_test2.txt

This is demo CLOB file clob_test2.txt

blob_test1.doc

This is demo BLOB file blob_test1.doc

blob_test2.doc

This is demo BLOB file blob_test2.doc

Первые два файла - обычные текстовые файлы,  два других - документы Microsoft Word. Документы  содержащие CLOB и BLOB данные будут загружены с использованием SQL*Loader.

Создается текстовый файл lob_test_data.txt содержащий регулярные данные и ссылку на файлы с CLOB и BLOB содержимым:

1,one,10-OKT-2008,clob_test1.txt,blob_test1.doc
2,two,11-OKT-2008,clob_test2.txt,blob_test2.doc

Теперь есть все необходимые данные для загрузки. Создаем таблицу, в которую будем загружать данные:

DROP TABLE lob_tab;
CREATE TABLE lob_tab (
  number_content    NUMBER(10),
  varchar2_content  VARCHAR2(100),
  date_content      DATE,
  clob_content      CLOB,
  blob_content      BLOB
);

После создания таблицы, определяем управляющий файл SQL*Loader - lob_test.ctl, со следующим содержимым:

LOAD DATA
INFILE 'lob_test_data.txt'
   INTO TABLE lob_tab
   FIELDS TERMINATED BY ','
   (number_content    CHAR(10),
    varchar2_content  CHAR(100),
    date_content      DATE "DD-MON-YYYY" ":date_content",
    clob_filename     FILLER CHAR(100),
    clob_content      LOBFILE(clob_filename) TERMINATED BY EOF,
    blob_filename     FILLER CHAR(100),
    blob_content      LOBFILE(blob_filename) TERMINATED BY EOF)

Следует отметить, что колонки содержащие имя файла отмечены как FILLER, они не загружаются, но используются при определении LOBFILE, для определения места содержания LOB информации.

Затем данные загружаются, для этого из командной строки выполняется команда, из той же директории где лежат файлы:

sqlldr userid=test/test@db10g control=lob_test.ctl log=lob_test.log bad=lob_test.bad

Выполним следующий запрос, и он покажет, что данные были успешно загружены:

COLUMN varchar2_content FORMAT A16
COLUMN date_content FORMAT A12
COLUMN clob_content FORMAT A20
SELECT number_content,
       varchar2_content,
       TO_CHAR(date_content, 'DD-MON-YYYY') AS date_content,
       clob_content,
       DBMS_LOB.getlength(blob_content) AS blob_length
FROM   lob_tab;
NUMBER_CONTENT VARCHAR2_CONTENT DATE_CONTENT CLOB_CONTENT         BLOB_LENGTH
-------------- ---------------- ------------ -------------------- -----------
             1 one              10-OKT-2008  This is a CLOB test1       24064
             2 two              11-OKT-2008  This is a CLOB test2       24064
2 rows selected.
SQL>


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=20306