
- •10 Импорт, экспорт, загрузка и выгрузка данных
- •Об импорте, экспорте, загрузке и выгрузке данных
- •Выбор подходящего варианта импорта/эспорта/загрузки/выгрузки
- •Выгрузка и загрузка данных
- •Выгрузка и загрузка данных при помощи мастеров
- •Пример: Выгрузка данных при помощи мастера выгрузки
- •Пример: Загрузка данных при помощи мастера загрузки
- •Загрузка данных при помощиSql*Loader
- •Методы загрузки данных черезSql*Loader
- •ВозможностиSql*Loader
- •Пример: ИспользованиеSql*Loader
- •Экспорт и импорт данных
- •Экспорт и импорт с помощью помпы данных экспорта и помпы данных импорта
- •Пример: Использование помпы данных экспорта и помпы данных импорта
- •Экспорт и импорт данных с помощью утилит экспорта и импорта
Методы загрузки данных через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, которые мы создадим на первых двух этапах.
Создайте файл данных 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) - в нем запятые играют роль разделителей между отдельными полями. Поле, в котором содержится имя подчиненного, заключено в двойные кавычки на тот случай, если в официальном имени вдруг встретится запятая.
Создайте управляющий файл SQL*Loaderdependents.ctlв своем текущем рабочем каталоге. Вы можете создать этот файл в любом текстовом редакторе. Содержимое должно быть следующим:
LOAD DATA
INFILE dependents.dat
INTO TABLE dependents
REPLACE
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
(
dep_id,
first_name,
last_name,
birthdate,
relation,
relative_id,
benefits
)
Выполните одно из:
Под 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.
Из своего текущего рабочего каталога (в котором вы создали управляющий файл и файл данных) выполните следующую команду SQL*Loaderв приглашении командной строки:
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как с любой другой.