Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
100
Добавлен:
11.04.2015
Размер:
246.27 Кб
Скачать

Методы загрузки данных черезSql*Loader

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

Обычный метод

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

Прямой метод

При загрузке прямым методом отсутствует конкуренция с другими пользователями за ресурсы базы данных. Этим методом устраняются большинство причин замедления посредством форматирования блоков данных Oracleи прямой записью их в файлы данных, пропуская большую часть обработки данных, происходящую в обычном режиме работы. Таким образом, загрузка прямым методом обычно может быть выполнена быстрее, чем обычным методом. Однако есть несколько ограничений на выполнение загрузки прямым методом, из-за чего этот метод может вам не подойти. К примеру, прямой метод загрузки не может быть использован для кластерных таблиц или для таблиц с незавершенными транзакциями.

Смотрите Утилиты Oracle Databaseдля получения полной информации о ситуациях, в которых может или не может быть применен прямой метод загрузки.

Внешние таблицы

Загрузка во внешнюю таблицу - это создание внешней таблицы для тех данных, которые содержатся в файле данных. Загрузка выполняет операторы INSERTдля вставки данных из файла данных в целевую таблицу. Загрузка во внешнюю таблицу позволяет модифицировать загружаемые данные с помощьюSQLиPL/SQLфункций в составе оператораINSERT, используемого для создания внешней таблицы.

Смотрите Руководство администратора базы данных Oracleдля получения дополнительной информации о внешних таблицах.

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

Вы можете использовать SQL*Loaderдля:

  • Загрузки данных по сети. Иными словами, вы можете запустить SQL*Loaderне на сервере, а на любом другом клиенте.

  • Загрузки данных из нескольких файлов данных в течение одной операции загрузки.

  • Загрузки данных одновременно в несколько таблиц одной операцией загрузки.

  • Указания символьного набора данных.

  • Выборочной загрузки данных (вы можете загружать записи в зависимости от значений отдельных полей).

  • Изменения данных перед их загрузкой, используя функции SQL.

  • Генерации уникальных последовательных значений ключа в указанных столбцах.

  • Доступа к файлам данных средствами операционной системы.

  • Загрузки данных с диска, кассеты или именованного шлюза (namedpipe).

  • Генерации замысловатых отчетов об ошибках, которые могут значительно помочь в локализации ошибок.

  • Загрузки сколь угодно сложных объектно-реляционных данных.

  • Для загрузки данных типа LOBи коллекций из вспомогательных файлов данных.

Пример: ИспользованиеSql*Loader

В следующем примере будет создана новая таблица dependentsв схемеHR. В ней будет содержаться информация о подчиненных, перечисленных в таблицеemployeesсхемыHR. После создания таблицы будет использованSQL*Loaderдля загрузки данных о подчиненных из текстового файла данных в таблицуdependents.

Для этого примера требуются файл данных и управляющий файл SQL*Loader, которые мы создадим на первых двух этапах.

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

100,"Susan, Susie",Kochhar,17-JUN-1997,daughter,101,NULL,

102,David,Kochhar,02-APR-1999,son,101,NULL,

104,Jill,Colmenares,10-FEB-1992,daughter,119,NULL,

106,"Victoria, Vicki",Chen,17-JUN-1997,daughter,110,NULL,

108,"Donald, Donnie",Weiss,24-OCT-1989,son,120,NULL,

Такой файл называют CSV-файлом (comma-separatedvalues) - в нем запятые играют роль разделителей между отдельными полями. Поле, в котором содержится имя подчиненного, заключено в двойные кавычки на тот случай, если в официальном имени вдруг встретится запятая.

  1. Создайте управляющий файл SQL*Loaderdependents.ctlв своем текущем рабочем каталоге. Вы можете создать этот файл в любом текстовом редакторе. Содержимое должно быть следующим:

  2. LOAD DATA

  3. INFILE dependents.dat

  4. INTO TABLE dependents

  5. REPLACE

  6. FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'

  7. (

  8. dep_id,

  9. first_name,

  10. last_name,

  11. birthdate,

  12. relation,

  13. relative_id,

  14. benefits

  15. )

  16. Выполните одно из:

  • Под Windows: Войдите в систему на сервереOracleDatabaseXEпод тем пользователем, который произвел установкуOracleDatabaseXEи откройте командное окно.

  • Запустите командную строку SQL(SQL*Plus) и подключитесь под пользователемhrпосредством команды:

  • sqlplus hr/hr

  • Через командную строку SQLсоздайте таблицуdependentsкомандой:

  • CREATE TABLE dependents (

  • dep_id NUMBER(6),

  • first_name VARCHAR2(20),

  • last_name VARCHAR2(25) CONSTRAINT dep_last_name_nn NOT NULL,

  • birthdate DATE,

  • relation VARCHAR2(25),

  • relative_id NUMBER(6) CONSTRAINT emp_dep_rel_id_fk REFERENCES employees

  • (employee_id),

  • benefits CLOB

  • )

  • /

  • Ограничение (constraint) для столбцаlast_nameуказывает, что значение обязательно должно присутствовать. Ограничение для столбцаrelative_idуказывает, что значению должно соответствовать одно из значений столбцаemployee_idтаблицыemployees. Столбецbenefitsимеет тип данныхCLOB, поэтому мы можем сохранять здесь большие блоки текстовых данных. (В данном примере никаких льгот не предусмотрено, поэтому в файле данныхdependents.datпроставленоNULLв соответствущих полях.)

    После получения сообщения Table createdвведитеexitдля выхода из командной строкиSQL.

    1. Из своего текущего рабочего каталога (в котором вы создали управляющий файл и файл данных) выполните следующую команду SQL*Loaderв приглашении командной строки:

    2. sqlldr hr/hr DATA=dependents.dat CONTROL=dependents.ctl LOG=dependents.log

    Данные из файла dependents.datзагрузятся в таблицуdependentsи отобразится следующее сообщение:

    Commit point reached - logical record count 5

    Информация о загрузке будет записана в файл журнала dependents.log. Содержимое файла журнала будет аналогично следующему:

    Copyright (c) 1982, 2005, Oracle. All rights reserved.

    Control File: dependents.ctl

    Data File: dependents.dat

    Bad File: dependents.bad

    Discard File: none specified

    (Allow all discards)

    Number to load: ALL

    Number to skip: 0

    Errors allowed: 50

    Bind array: 64 rows, maximum of 256000 bytes

    Continuation: none specified

    Path used: Conventional

    Table DEPENDENTS, loaded from every logical record.

    Insert option in effect for this table: REPLACE

    Column Name Position Len Term Encl Datatype

    ------------------------------ ---------- ----- ---- ---- ---------------------

    DEP_ID FIRST * , O(") CHARACTER

    FIRST_NAME NEXT * , O(") CHARACTER

    LAST_NAME NEXT * , O(") CHARACTER

    BIRTHDATE NEXT * , O(") CHARACTER

    RELATION NEXT * , O(") CHARACTER

    RELATIVE_ID NEXT * , O(") CHARACTER

    BENEFITS NEXT * , O(") CHARACTER

    Table DEPENDENTS:

    5 Rows successfully loaded.

    0 Rows not loaded due to data errors.

    0 Rows not loaded because all WHEN clauses were failed.

    0 Rows not loaded because all fields were null.

    Space allocated for bind array: 115584 bytes(64 rows)

    Read buffer bytes: 1048576

    Total logical records skipped: 0

    Total logical records read: 5

    Total logical records rejected: 0

    Total logical records discarded: 0

    Run began on Mon Dec 05 16:16:29 2005

    Run ended on Mon Dec 05 16:16:42 2005

    Elapsed time was: 00:00:12.22

    CPU time was: 00:00:00.09

    Теперь вы можете работать с таблицей dependentsкак с любой другой.

  • Соседние файлы в папке Oracle_XE