Утилит Data Pump Export и Import для импорта и экспорта в базу данных Oracle

Data Pump Export и Import  утилиты импорта и экспорта в базе данных OracleПочти все администраторы баз данных Oracle знакомы с предлагаемыми в Oracle утилитами для экспорта и импорта (imp и exp), которые помогают осуществлять загрузку и выгрузку данных из баз данных. В выпусках Oracle Database 10g, Oracle Database 11g и 12c для экспорта и импорта данных необходимо применять более универсальные и мощные утилиты Data Pump Export (Помпа данных для экспорта) и Data Pump Import (Помпа данных для импорта).

 

Оглавление статьи

Введение в технологию Data Pump

Мониторинг выполнения заданий Data Pump

Использование API-интерфейса Data Pump

 

Старые утилиты для экспорта и импорта (imp и exp) по-прежнему доступны в Oracle Database 11g, но рекомендуется использовать все-таки технологию Data Pump (Помпа данных), поскольку она предлагает более совершенные функциональные возможности. Например, она позволяет делать прерывать выполнение операций экспорта и импорта посередине процесса и затем снова его возобновлять; запускать завершившиеся неудачей задания заново; переопределять атрибуты объектов с целью их изменения; легко следить за заданиями Data Pump из другого сеанса и даже изменять их атрибуты на лету во время их выполнения; быстро перемещать большие объемы данных за счет применения приемов распараллеливания; вставлять задания Data Pump Export и Data Pump Import в программы PL/SQL, благодаря API-интерфейсам, которые предусмотрены в Oracle специально для технологии Data Pump.

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

В этой статье блога приводится подробное описание как технологии Data Pump. Механизм переносимых табличных пространств (Transportable tablespaces), которые также используется для экспорта данных в другую базу данных Oracle, был уже рассмотрен в наших блогах.

 

Введение в технологию Data Pump

Технология Data Pump, которая впервые появилась в Oracle Database 10g, представляет собой работающую на стороне сервера инфраструктуру для быстрого перемещения данных между базами Oracle. Она позволяет администраторам баз данных переносить большие объемы данных и метаданных на очень большой скорости по сравнению с прежней технологией для экспорта и импорта. Для достижения максимальной пропускной способности она осуществляет управление множеством параллельных потоков данных. В Oracle заявляют, что Data Pump способна сокращать общее время выполнения экспорта на целых два порядка в большинстве из заданий, требующих обработки большого количества данных. Что касается импорта, то такие операции Data Pump предположительно позволяет выполнять в 15–45 раз быстрее, чем исходная утилита для импорта (в случае использования для их выполнения одного единственного потока; а в случае нескольких параллельных потоков все происходит даже еще быстрее). Более высокая скорость в основном получается при использовании для выполнения чтения и записи экспортных файлов дампа параллелизма.

Технология Data Pump, по сути, представляет собой расширенный вариант исходных утилит для экспорта и импорта с несколькими дополнительными возможностями. Она позволяет подсчитывать время выполнения заданий, производить точную выборку объектов, наблюдать за выполнением заданий эффективным образом и напрямую загружать базу данных из удаленного экземпляра через сеть.

Для совместимости Oracle по-прежнему предлагает в составе Oracle Database 11g и старые утилиты для экспорта и импорта. Поэтому при наличии более старых сценариев для экспорта и импорта данных их можно продолжать использовать обычным образом, безо всяких изменений. Увидев, насколько и почему более новые утилиты Data Pump лучше прежних, однако, многие наверняка предпочтут использовать именно их. Исходную утилиту для экспорта Oracle со временем выведет из эксплуатации, но первоначальную утилиту для импорта будет поддерживать постоянно. Это означает, что возможность импортировать файлы дампа из более ранних версий Oracle будет доступна всегда. Утилита Data Pump Import не будет работать с базами данных более старой, чем Oracle Database 10g Release 1 (10.1) версии. Также стоит обратить внимание и на то, что новая технология Data Pump позволяет экспортировать данные только на диск. Использовать ленточный носитель при выполнении экспорта с помощью Data Pump нельзя.

В состав технологии Data Pump входит два компонента: утилита Data Pump Export, предназначенная для выгрузки объектов данных из базы данных, и утилита Data Pump Import, предназначенная для загрузки объектов данных в базу данных. Доступ к обеим этим утилитам Data Pump получается через пару клиентов, которые называются expdp и impdp. По этим названиям видно, что первый клиент соответствует утилите Data Pump Export, а второй — Data Pump Import. Управлять выполнением заданий Data Pump Export и Data Pump Import можно через несколько параметров. В целом синтаксис для вызова этих утилит выглядит так: 

$ expdp имя_пользователя/пароль (различные параметры)
$ impdp имя_пользователя/пароль (различные параметры)

В отличие от старых утилит для экспорта и импорта, утилиты Data Pump обладают набором параметров, которые можно использовать в командной строке, и набором специальных команд, которые можно применять только в интерактивном режиме. Обо всех основных параметрах, командах и других важных функциональных возможностях Data Pump будет подробно рассказываться позже в этой статье, в разделе “Выполнение операций экспорта и импорта с помощью утилит Data Pump Export и Data Pump Import”. Краткие справочные сведения обо всех параметрах и командах Data Pump (включая интерактивные команды) всегда можно быстро получить, набрав в командной строке либо expdp help=y, либо impdp help=y.

Утилита Data Pump Export выгружает данные в файлы операционной системы, называемые файлами дампа (dump files), в специальном формате, который может понимать только утилита Data Pump Import. Эти файлы дампа Data Pump Export затем можно брать из операционной системы и импортировать в базу данных, функционирующую на другой платформе, точно так же, как это было можно и в старых утилитах для экспорта и импорта.


Внимание! Файлы дампа исходной утилиты для экспорта и файлы дампа утилиты Data Pump не совместимы между собой. Считывать файлы дампа более старой утилиты для экспорта с помощью Data Pump Import и файлы дампа Data Pump Export с помощью старой утилиты для импорта нельзя.


Помимо expdp и impdp можно заставлять и других клиентов выполнять операции экспорта и импорта Data Pump за счет применения API-интерфейса Data Pump. Для реализации этого API-интерфейса база данных использует поставляемый с Oracle пакет DBMS_DATAPUMP, посредством которого можно программно получать доступ к утилитам Data Pump Export и Data Pump Import. Это означает, что с помощью технологии Data Pump можно даже создавать мощные специальные утилиты для перемещения данных.

Традиционная утилита для экспорта представляет собой обычный пользовательский процесс, который выполняет запись данных на локальные диски. Старая утилита для экспорта извлекает эти данные из серверного процесса в виде части обычного сеанса. В отличие от этого, пользовательский процесс Data Pump expdp запускает отдельный серверный процесс, который записывает данные на диски, находящиеся на узле сервера, и работает независимо от установленного клиентом expdp сеанса.

 

Преимущества технологии Data Pump

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

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

  • Увеличенная производительность. Преимущества в плане производительности очень существенны при переносе больших объемов данных.
  • Возможность перезапуска заданий. Можно легко перезапускать задания, выполнение которые остановилось из-за нехватки места или вообще прекратилось по какой-то другой причине. Вдобавок можно вручную останавливать задания, а затем запускать их снова.
  • Возможности параллельного выполнения. За счет указания значения для параметра PARALLEL можно выбирать для выполнения задания Data Pump Export или Data Pump Import любое желаемое количество активных потоков выполнения.
  • Возможность подключаться к выполняющимся заданиям. Можно подключаться (attach) к выполняющемуся заданию Data Pump и взаимодействовать с ними с другого экрана или места. Это позволяет следить за ходом выполнения заданий, а также интерактивно изменять их параметры. Data Pump является неотъемлемой частью сервера баз данных Oracle и потому не нуждается в запуске клиента после начала выполнения задания.
  • Возможность оценивать требуемый объем пространства. Перед фактическим выполнением задания Data Pump Export можно легко подсчитывать объем пространства, который для него потребуется, за счет применения либо используемого по умолчанию метода BLOCKS, либо метода ESTIMATES (оба они подробно рассматриваются позже в этой статье в разделе “Параметры утилиты Data Pump Export”).
  • Сетевой режим работы. После создания связи базы данных можно легко осуществлять как экспорт данных из удаленной базы прямо в набор файлов дампа, так и импорт данных непосредственно в целевое место без использования файлов дампа. Сетевой режим, по сути, является средством передачи данных из одной базы в другую через связи баз данных, без необходимости в их временном размещении на диске.
  • Возможность выполнения точного импорта данных. В Oracle 9i предлагался лишь параметр QUERY, который позволял указывать утилите для экспорта, что требуется извлечь только определенный набор строк таблицы. В Data Pump же доступна целая масса значительно улучшенных вариантов уточнения благодаря таким новым параметрам, как INCLUDE и EXCLUDE.
  • Возможности переопределения. При выполнении операций импорта Data Pump можно переопределять схемы и табличные пространства, а также имена файлов за счет применения новых параметров REMAP_*. Эти параметры позволяют изменять объекты во время процесса импорта данных путем замены старых атрибутов новыми значениями. Например, параметр REMAP_SCHEMA позволяет отображать всю схему пользователя HR на схему нового пользователя OE. Он похож на параметр TOUSER, который предлагался в прежней утилите для импорта.

 

Сферы применения утилит Data Pump Export и Data Pump Import

Утилита SQL*Loader, в основном предназначена для перемещения данных в одну или более таблиц из неструктурированных (плоских) файлов. Для экспорта и импорта целых схем или даже баз данных нужно использовать утилиты Data Pump Export и Data Pump Import. Ниже перечислены некоторые основные сферы применения этих утилит Data Pump.

  • Миграция баз данных из среды разработки в тестовую или производственную среду.
  • Копирование тестовых данных из разрабатываемых или тестируемых баз данных в производственные или наоборот.
  • Пересылка данных между базами данных Oracle, находящимися на платформах с разными операционными системами.
  • Резервное копирование важных таблиц перед внесением в них каких-либо изменений.
  • Резервное копирование баз данных.
  • Перемещение объектов базы данных из одного табличного пространства в другое.
  • Перенос табличных пространств между базами данных.
  • Реорганизация фрагментированных табличных данных.
  • Извлечение DDL-операторов для таблиц и других объектов баз данных, например, хранимых процедур и пакетов.

На заметку! Создавать идеальную резервную копию Data Pump не позволяет: никаких точных до минуты данных в файле экспорта при возникновении аварии не будет. Однако для экспорта небольших баз данных и отдельных табличных пространств утилита экспорта Data Pump все равно является вполне пригодным средством резервного копирования.


Как будет показано, утилиты Data Pump Export и Data Pump Import чрезвычайно универсальны и удобны в плане эксплуатации. Они позволяют экспортировать и импортировать как только DDL-операторы объектов, так целые объекты со всеми их данными, а также отдельные таблицы (или даже только их конкретную часть), все таблицы в табличном пространстве, целую схему или всю базу данных.

Компоненты Data Pump

На первый взгляд, expdp и impdp довольно похожи на традиционные утилиты экспорта и импорта. Однако хотя exp и imp и обладают синтаксической схожестью с клиентами Data Pump, они представляют собой обычные пользовательские процессы, в которых применяются SQL-операторы вроде SELECT, INSERT и CREATE. Что же касается новых утилит Data Pump, то они скорее представляют собой управляющие процессы, которые инициируют задания. За их работу отвечает экземпляр самой базы данных. В целом технология Data Pump состоит из трех главных компонентов.

  • Пакет DBMS_DATAPUMP. Это главный механизм для осуществления загрузки и выгрузки метаданных словаря данных. В пакете DBMS_DATAPUMP (Data Pump API — API-интерфейсе Data Pump) содержатся основополагающие элементы технологии Data Pump в виде процедур, которые в действительности приводят в действие задания по загрузке и выгрузке данных. Содержимое этого пакета отвечает за работу как утилиты Data Pump Export, так и утилиты Data Pump Import.
  • Пакет DBMS_METADATA. Для извлечения и изменения метаданных Oracle предоставляет пакет DBMS_METADATA (Metadata API — API-интерфейс метаданных), который является доступным, начиная ее с версии Oracle9i. В традиционных утилитах для экспорта и импорта метаданные объектов включаются в файл дампа экспорта, а в технологии Data Pump для извлечения соответствующих метаданных необходимо использовать пакет DBMS_METADATA.
  • Клиенты с интерфейсом командной строки. Прежние утилиты exp и imp заменены двумя новыми утилитами с интерфейсом командной строки — expdp и impdp. Утилита expdp вызывает утилиту Data Pump Export, а утилита impdp — Data Pump Import. Файлы дампа, создаваемые с помощью этих новых утилит, с прежними утилитами экспорта и импорта не совместимы.

Обратите внимание на то, что пакеты DBMS_DATAPUMP и DBMS_METADATA работают как API-интерфейсы (Data Pump API и Metadata API), а это значит, что любой из них можно использовать в программах для загрузки и выгрузки данных напрямую, не прибегая к помощи клиентов expdp и impdp.

 

Методы доступа к данным

Доступ к данным в заданиях Data Pump Import и Data Pump Export может осуществляться двумя способами.

  • Путем прямого доступа. Такой доступ подразумевает использование API-интерфейса Direct Path. Выполнение операций импорта и экспорта напрямую приводит к улучшению производительности, поскольку формат прямого внутреннего потока совпадает с форматом данных, хранящихся в файле дампа Oracle. Это сокращает количество требуемых операций по преобразованию данных. Главное преимущество прямого режима доступа состоит в том, что он позволяет Oracle обходить буфер базы данных и не генерировать никаких данных отката.
  • Через внешние таблицы. Механизм внешних таблиц позволяет Oracle считывать и записывать данные в файлы операционной системы, находящиеся за пределами базы данных. 

То, какой метод доступа использовать для каждого задания Data Pump Import или Data Pump Export, решает Oracle. Она всегда пытается применять для загрузки и выгрузки данных метод прямого доступа, но в некоторых условиях это может не получиться. В частности, в перечисленных ниже случаях структура таблицы и/или индексов препятствует применению метода прямого доступа, и поэтому Data Pump будет использовать внешние таблицы:

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

На заметку! Формат файлов данных выглядит одинаково как при использовании прямого метода доступа, так и при использовании внешних таблиц. Поэтому при желании можно легко выполнять экспорт данных с помощью одного метода, а импорт — с помощью другого.


 

Файлы Data Pump

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

  • Файлы дампа. В эти файлы помещаются данные и метаданные таблиц, которые загружаются или выгружаются.
  • Журнальные файлы. Эти файлы являются стандартными файлами для регистрации сообщений и генерируются в результате выполнения операций Data Pump.
  • Файлы SQL. Утилита Data Pump Import поддерживает специальный параметр SQLFILE, позволяющий записывать все DDL-операторы, которые утилите придется выполнять во время операции импорта, в отдельный файл. При использовании этого параметра Data Pump Import в действительности не выполняет сам SQL- код, а просто записывает обнаруживаемые DDL-операторы в файл, который был указан в параметре SQLFILE. Файлы SQL применяются исключительно для размещения вывода команды SQLFILE при выполнении задания Data Pump Import. Об этом параметре будет более подробно рассказываться позже в этой статье в разделе “Параметры утилиты Data Pump Import”.

Как и в прежних утилитах для экспорта и импорта, все новые журнальные файлы (и файлы SQL) будут приводить к перезаписи более старых файлов с таким же именем. При наличии более старого файла дампа с таким же именем, будет выдаваться ошибка.

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

 

Использование объектов каталогов

Все необходимые для выполнения задания Data Pump файлы дампа создаются на сервере, а не клиентской машине, с которой возможно это задание было запущено. За все связанные с файлами дампа операции ввода-вывода отвечают фоновые процессы Oracle, функционирующие от имени владельца программного обеспечения Oracle (каковым обычно является пользователь oracle). Это означает, что ради безопасности нельзя позволять никакому пользователю указывать абсолютный путь к файлу на сервере. Вдобавок это еще также является и мерой предосторожности, поскольку получив возможность записывать файлы дампа где угодно в системе, пользователь сможет случайно перезаписать важный файл сервера, а также начать читать все файлы, к которым у сервера имеется доступ, даже если никаких специальных прав ему на это не предоставлялось. Во избежание возникновения проблем подобного рода в Data Pump как раз и используются объекты каталогов.


Внимание! Задания Data Pump Export и Data Pump Import не будут запускаться, если для них предварительно не будет создан объект каталога и, следовательно, предоставлены все необходимые в данной файловой системе привилегии для доступа к нему.


Объектами каталогов (directory objects) называются именованные объекты, которые Data Pump отображает на конкретный каталог операционной системы. Например, объект каталога по имени dpump_dir1 может указывать на такой каталог на сервере, как /u01/app/oracle/admin/export. Это позволяет далее получать доступ к этому каталогу за счет указания имени dpump_dir1. При создании новой базы данных или обновлении старой базы данных до текущей версии Oracle создает подлежащий использованию по умолчанию объект каталога с именем DATA_PUMP_DIR. Этот применяемый по умолчанию объект каталога DATA_PUMP_DIR указывает на каталог dpdump. Используемый по умолчанию каталог Data Pump автоматически создается Oracle в одном из следующих мест: 

ORACLE_BASE/admin/SID
ORACLE_HOME/admin/SID

Если каталог ORACLE_BASE был определен, Oracle создает применяемый по умолчанию каталог Data Pump в нем, а если нет — тогда, соответственно, в каталоге ORACLE_HOME. Утилиты Data Pump будут записывать все файлы дампа, файлы SQL и журнальные файлы именно в тот каталог, который был указан для объекта DATA_PUMP_DIR. Чтобы увидеть, в каком именно месте находится объект каталога DATA_PUMP_DIR, можно выдать следующий запрос к представлению DBA_DIRECTORIES:

SQL> SELECT * FROM dba_directories;
OWNER DIRECTORY_NAME DIRECTORY_PATH
------------------------------------------------------------------------------
SYS DATA_PUMP_DIR /u01/app/oracle/product/10.2.0/db_1/admin/orcl/dpdump/
SQL>

Использовать объект каталога DATA_PUMP_DIR могут только привилегированные пользователи вроде SYS или SYSTEM. Таким образом, пользователь SYSTEM может запускать задание Data Pump Export без предоставления имени каталога. В листинге ниже приведен пример выполнения задания Data Pump Export.


C:\>expdp system/sammyy1
Export: Release 11.1.0.6.0 - Production on Saturday, 22 March, 2008 11:10:36
Copyright (c) 2003, 2007, Oracle. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
FLASHBACK automatically enabled to preserve database integrity.
Starting "SYSTEM"."SYS_EXPORT_SCHEMA_01": system/********
Estimate in progress using BLOCKS method . . .
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 320 KB
Processing object type SCHEMA_EXPORT/USER
. . .
Processing object type SCHEMA_EXPORT/POST_SCHEMA/PROCACT_SCHEMA
. . exported "SYSTEM"."REPCAT$_AUDIT_ATTRIBUTE" 6.398 KB 2 rows
. . .
. . exported "SYSTEM"."SQLPLUS_PRODUCT_PROFILE" 0 KB 0 rows
Master table "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_SCHEMA_01 is:
C:\ORCL\APP\ORACLE\ADMIN\ORCL\DPDUMP\EXPDAT.DMP
Job "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully completed at 11:11:52
C:\>

Прежде чем непривилегированный пользователь сможет выполнять задания Data Pump Export или Data Pump Import, однако, администратор баз данных должен создать объект каталога или предоставить ему права на использование этого уже существующего каталога. Помимо администратора баз данных создать объект каталога может любой пользователь, обладающий привилегией CREATE ANY DIRECTORY. Ниже показано, как создается объект каталога: 

SQL> CREATE DIRECTORY dpump_dir1 AS '/u01/finance/oradata/dump_dir';

Для того чтобы пользовать мог работать с конкретным каталогом, он должен обязательно обладать правами на доступ к объекту этого каталога. Например, чтобы позволить базе данных выполнять в новом объекте каталога dpump_dir1 чтение и запись файлов от имени пользователя salapati, потребуется предоставить следующие привилегии: 

SQL> GRANT READ, WRITE ON DIRECTORY dpump_dir1 TO salapati
Grant succeeded.
SQL>

Эта команда разрешит базе данных Oracle выполнять в объекте каталога dpump_dir1 операции чтения и записи файлов от имени данного пользователя, но не предоставит никаких прямых привилегий в этом каталоге самому пользователю. Для выполнения задания Data Pump Export ему потребуется иметь права на запись во все файлы, а для выполнения задания Data Pump Import — права на чтение экспортного файла дампа, а также на запись в каталог для того, чтобы иметь возможность записывать данные в журнальный файл. В случае выдачи пользователю прав на выполнение в объекте каталога операций чтения и записи происходит следующее.

  • Он может считывать и записывать данные в файлы, отображаемые на этот объект каталога только через Oracle.
  • База данных Oracle должна обладать привилегиями на выполнение чтения и записи данных в этом каталоге.

После создания каталога и предоставления необходимых прав во всех заданиях Data Pump Export и Data Pump Import становится возможным использовать параметр DIRECTORY (подробно рассматривается ниже) для указания имени объекта каталога (DIRECTORY=dpump_dir1). Вот пример: 

$ expdp salapati/password DIRECTORY=dpump_dir1 dumpfile=testexp01.dmp

Если пользователь попытается использовать утилиту expdp или impdp до того, как администратор баз данных создаст каталог и выдаст права доступа к нему, он получит ошибку, сообщающую, что Oracle не удается найти объект каталога и, следовательно, запустить задание Data Pump, как показано в листинге ниже. 


C:\> expdp hr/hr
Export: Release 11.1.0.6.0 - Production on Saturday, 22 March, 2008 11:13:29
Copyright (c) 2003, 2007, Oracle. All rights reserved.
Connected to: Oracle Database 11g Enterprise
Edition Release 11.1.0.6.0 - Prodution
With the Partitioning, OLAP, Data Mining and Real Application Testing options
ORA-39002: invalid operation
недействительная операция
ORA-39070: Unable to open the log file.
не удается открыть журнальный файл.
ORA-39145: directory object parameter must be specified and non-null
параметр объекта каталога должен быть задан и быть ненулевым
C:\>

Для того чтобы утилиты Data Pump знали, где следует размещать или брать данные для импорта и экспорта, при использовании клиентов expdp и impdp им необходимо указывать соответствующий путь.

Как уже известно, использовать абсолютный путь для заданий Data Pump нельзя, вместо него нужно всегда применять объект каталога. Указывать имя этого объекта каталога непосредственно во время выполнения самого задания можно несколькими способами.

  • С помощью параметра DIRECTORY. При выполнении задания Data Pump Export указывать имя объекта каталога можно с использованием параметра DIRECTORY, как показано ниже:
      $ expdp hr/hr DIRECTORY=dpump_dir1 ... 
  • С помощью обозначения DIRECTORY:FILE. Вместо применения параметра DIRECTORY можно также указывать имя объекта каталога в виде части значения конкретного файла Data Pump (файла дампа, журнального файла или файла SQL). Для отделения имени каталога от имени файла в таком случае служит символ двоеточия (:). Ниже приведен пример, в котором dpump_dir2 представляет собой имя объекта каталога, а salapati.log — имя конкретного файла Data Pump:
      $ expdp LOGFILE=dpump_dir2:salapati.log ... 
  • С помощью переменной среды DATA_DUMP_DIR. Для указания на объект каталога на сервере можно использовать переменную среды DATA_DUMP_DIR. Однако перед ее применением понадобится создать сам объект каталога на сервере.

Например, можно было бы сначала создать новый объект каталога на сервере с помощью переменной DATA_DUMP_DIR, а затем командой export сохранить значение этой переменной в среде операционной системы. После превращения переменной DATA_DUMP_DIR в часть среды операционной системы указывать фактическое имя каталога (data_dump_dir2, если брать рассматриваемый пример) явным образом (в параметре DIRECTORY) при выполнении экспорта Data Pump больше не требуется. Вполне достаточно использовать только параметр DUMPFILE и указывать для него в качестве значения не весь путь, а лишь имя требуемого файла.

Например, сначала можно создать объект каталога data_dump_dir2

SQL> CREATE DIRECTORY data_dump_dir2 AS
'/u01/app/oracle/datapump/dumpfiles_02';

Затем необходимо экспортировать переменную среды DATA_PUMP_DIR со значением data_dump_dir2:

$ export DATA_PUMP_DIR data_dump_dir2 

После этого операции экспорта можно начинать выполнять и без явного применения параметра DIRECTORY, поскольку его значение было сохранено в переменной среды DATA_PUMP_DIR. Достаточно указать параметр DUMPFILE, и поиск любого заданного в нем файла (например, employees.dmp) будет автоматически выполняться в каталоге/u01/app/oracle/datapump/dumpfiles_02

$ expdp salapati/password TABLES=employees DUMPFILE=employees.dmp

 

Порядок старшинства путей к файлам

Теперь, когда мы рассказали о различных способах, которыми может определяться объект каталога для задания Data Pump, вам наверняка интересно узнать, каким образом Oracle узнает, какой именно путь использовать в случае конфликта, т.е., например, в случае сохранения имени объекта каталога в переменной среды DATA_DUMP_DIR и указания отдельного пути в параметре DIRECTORY при непосредственном выполнении задания Data Pump Export. Ниже описан порядок старшинства, которым Oracle пользуется при обработке объектов каталогов.

  1. Сначала Oracle проверяет, не было ли имя каталога указано в виде части значения какого-нибудь касающегося файлов параметра (например, параметра LOGFILE). Не забывайте, что в таких случаях имя объекта каталога отделяется от имени файла символом двоеточия (:).
  2. Далее Oracle проверяет, не был ли объект каталога указан при выполнении задания Data Pump Import или Data Pump Export с помощью параметра DIRECTORY (например: DIRECTORY=dpump_dir1...). В случае явного задания параметра DIRECTORY указывать имя каталога в виде части значения касающегося файла параметра не требуется.
  3. Если объект каталога не был указан явно или в параметре DIRECTORY, Oracle проверяет, не используют ли клиенты Data Pump Import или Data Pump Export переменную среды DATA_PUMP_DIR.
  4. И, наконец, напоследок Oracle проверяет, не доступен ли на севере установленный по умолчанию объект каталога DATA_PUMP_DIR. Как отмечалось ранее, Oracle автоматически создает такой каталог при создании новой базы данных или обновлении прежней базы данных до текущей версии. Обратите внимание на то, что подлежащий использованию по умолчанию объект DATA_PUMP_DIR доступен только администраторам баз данных и другим привилегированным пользователям.

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

 

Привилегии Data Pump

По умолчанию все пользователи Oracle могут работать с утилитами Data Pump. Однако для решения более сложных задач требуется обладать специальными привилегиями EXP_FULL_DATABASE и IMP_FULL_DATABASE. В частности, предоставление этих привилегий делает пользователя привилегированным и позволяет ему выполнять следующие задачи.

  • Экспортировать и импортировать объекты базы данных, принадлежащие любым пользователям.
  • Подключать и изменять задания, запущенные другими пользователями.
  • Пользоваться при выполнении заданий Data Pump Import всеми новыми возможностями переопределения.

 

Механика выполнения заданий Data Pump

Утилиты Data Pump Export и Data Pump Import используют для выполнения своих заданий несколько процессов, а именно — главный, рабочий, теневой и клиентский процессы. Давайте рассмотрим эти важные процессы Data Pump более подробно.

 

Главный процесс

Главный процесс (master process), а точнее — главный управляющий процесс (Master Control Process — MCP), носит имя DMnn. Полностью имя этого процесса выглядит как <экземпляр>_DMnn_<идентификационный-номер-процесса>. На каждое задание приходится только один главный процесс. Главный процесс управляет выполнением и упорядочением всего задания Data Pump. Если говорить более конкретно, то он решает следующие задачи:

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

Для регистрации размещения различных объектов базы данных в экспортном файле дампа главный процесс использует специальную таблицу, называемую главной таблицей (master table). Главная таблица похожа на любую другую таблицу в Oracle и играет центральную роль в каждом задании Data Pump Export и Data Pump Import. Главный процесс сохраняет в ней информацию о состоянии и перезапуске заданий. Oracle создает главную таблицу в начале каждого задания Data Pump Export в схеме того пользователя, который запускает это задание. В главной таблице содержатся различные касающиеся текущего задания сведения, такие как сведения о состоянии объектов в задании, сведения о размещении объектов в наборе файлов дампа, сведения об используемых в задании параметрах и сведения о состоянии всех рабочих процессов. Имя главной таблицы всегда совпадает с именем самого задания Data Pump Export, т.е., например, может выглядеть как SYS_EXPORT_SCHEMA_01.

Главный процесс использует главную таблицу только на протяжении выполнения экспорта. В конце операции экспорта, в качестве последнего шага в задании Data Pump Export, он записывает содержимое главной таблицы в экспортный файл дампа и автоматически удаляет ее из базы данных.

Удаление главной таблицы происходит автоматически только при условии успешного выполнения экспорта (или применения команды KILL_JOB). В случае неудачного завершения операции экспорта по какой-то причине или применении команды STOP_JOB для остановки задания, главная таблица из базы данных не удаляется. (Команды, которые могут применяться в отношении заданий Data Pump Export, будут более подробно рассматриваться позже в этой статье в разделе “Параметры утилиты Data Pump Export”). При перезапуске задания для него тогда используется та же самая главная таблица. Поскольку в главной таблице отслеживается состояние всех объектов, Data Pump может легко определять, какие объекты находятся посередине процесса экспорта, а какие уже были успешно экспортированы в файлы дампа.

Главный процесс воссоздает главную таблицу, сохраненную утилитой Data Pump Export (в файле дампа) в схеме того пользователя, который запускает операцию импорта. Этот шаг выполняется первым в любом задании Data Pump Import. Утилита Data Pump Import считывает содержимое главной таблицы для проверки правильности последовательности, в которой ей следует импортировать различные экспортированные объекты базы данных. Как и при выполнении экспорта, в случае успешного завершения операции импорта Oracle автоматически удаляет главную таблицу из базы данных.


На заметку! В главной таблице содержится вся информация, которая необходима для перезапуска остановленного задания. Поэтому она играет ключевую роль в способности Data Pump перезапускать задание, независимо от того, было оно остановлено преднамеренно или уничтожено неожиданно.


 

Рабочий процесс

Имя рабочего процесса (worker process) выглядит так:

<экземпляр>_DWnn_<идентификационный_номер_процесса> 

Он представляет собой процесс, который на самом деле выполняет всю работу по загрузке и выгрузке данных. Его создает главный процесс (DMnn). Главный процесс может создавать и несколько рабочих процессов; то, сколько именно он будет создавать, зависит от выбираемой пользователем степени параллелизма.

Рабочие процессы поддерживают строки в главной таблице. По мере экспорта и импорта различных объектов, они обновляют в ней информацию о состоянии различных заданий: завершено (COMPLETED), не завершено (PENDING) или произошел сбой (FAILED).

 

Теневой процесс

Когда клиент подключается к серверу Oracle, база данных создает отдельный процесс Oracle для обслуживания запросов к API-интерфейсу Data Pump (Data Pump API). Этот процесс называется теневым (shadow process) и приводит к созданию задания, состоящего из главной таблицы и главного процесса. После отключения клиента теневой процесс автоматически исчезает.

 

Клиентские процессы

Клиентские процессы (client processes) обращаются к API-интерфейсу Data Pump. Операции экспорта и импорта выполняются с помощью двух клиентов — expdp и impdp. В следующем разделе вы узнаете о различных параметрах, которые могут задаваться при вызове этих клиентов.

 

Выполнение операций экспорта и импорта с помощью утилит Data Pump Export и Data Pump Import

Утилита Data Pump Export загружает данные строк из таблиц базы данных, а также метаданные объектов, в наборы файлов дампа в специальном формате, прочитать который может только утилита Data Pump Import. В этих наборах файлов дампа, которые представляют собой файлы операционной системы, содержатся данные, метаданные и управляющая информация. Под наборами файлов дампа (dump file sets) обычно подразумевается какой-то один файл, например стандартный экспортный файла дампа expdat.dmp.

Что касается утилиты Data Pump Import, то довольно многие из ее функциональных возможностей являются зеркальным отражением функциональных возможностей утилиты Data Pump Export. Но некоторые из них, однако, все-таки свойственны исключительно утилите Data Pump Import.

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

 

Способы применения утилиты Data Pump Export

Взаимодействовать с утилитами Data Pump Export и Data Pump Import можно посредством командной строки, с помощью файла параметров и интерактивным образом. Давайте рассмотрим каждый из этих способов более подробно.


На заметку! Выполнять экспорт и импорт данных ручными методами утомительно и чревато ошибками. В OEM предусмотрены замечательные мастера для экспорта и импорта, которые позволяют выполнять операции экспорта и импорта быстро и легко. Вдобавок с помощью OEM можно создавать график выполнения этих операций. Прежде чем прибегать к доступным в OEM мастерам, однако, все-таки не помешает ознакомиться с ручными способами, чтобы лучше понимать, что подразумевает под собой использование утилит Data Pump Export и Data Pump Import.


 

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

Из командной строки использовать утилиту Data Pump Export можно примерно так же, как и традиционную утилиту для экспорта. Обратите внимание на то, что по умолчанию после ключевого слова expdp необходимо указывать имя пользователя и пароль. Ниже приведен простой пример: 

$ expdp system/manager DIRECTORY=dpump_dir1 DUMPFILE=expdat1.dmp

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

 

Использование файла параметров

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

SCHEMAS=HR
DIRECTORY=dpump_dir1
DUMPFILE=system1.dmp
SCHEMAS=hr

После создания этого файла параметров, все, что останется сделать для того, чтобы экспортировать схему HR — это вызвать expdp с единственным параметром PARFILE

$ expdp PARFILE=myfile.txt

На заметку! В файле параметров можно использовать все те же параметры экспорта, что и в командной строке, кроме разве что самого параметра PARFILE.


 

Использование Data Pump Export интерактивным образом

Некоторые уже возможно знакомы с интерактивной возможностью прежних утилит для экспорта и импорта. Раньше для выполнения экспорта или импорта интерактивным образом достаточно было лишь ввести в командной строке команду exp или imp и Oracle тут же начинала отображать приглашения на ввод всей остальной информации. Интерактивный режим утилит Data Pump существенно отличается от интерактивного режима прежних утилит. Как будет показано в последующих разделах, интерактивный режим Data Pump не предназначен для использования тем же образом, каким был предназначен режим exp/imp — запускать интерактивное задание при применении утилиты Data Pump Export (или Data Pump Import) нельзя. Интерактивный режим теперь можно применять только для вмешательства в ход уже выполняющегося задания.

В Data Pump Export интерактивный метод применяется только с одной целью: для изменения параметров экспорта посередине выполнения задания. Для перехода в интерактивный режим предусмотрено два способа. Первый заключается в нажатии на клавиатуре комбинации <Ctrl+С>, что приводит к прерыванию выполняющегося задания и отображению на экране приглашения export>, после чего с утилитой Data Pump Export можно начинать работать интерактивным образом при помощи специального набора интересных команд (которые более подробно рассматриваются в разделе “Параметры (команды) выполнения экспорта в интерактивном режиме” далее в этой статье).

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


На заметку! В Data Pump интерактивный режим подразумевает остановку вывода на экран информации о ходе выполнения операции экспорта или импорта и отображение приглашения export> (или, соответственно, import>), после которого можно начинать вводить специальные интерактивные команды. Обратите внимание на то, что задания Data Pump Export или Data Pump Import при этом все равно продолжают выполняться безо всякого прерывания.


Операции Data Pump Export и Data Pump Import можно также выполнять через предлагаемый в OEM интерфейс Database Control (Управление базой данных). Достаточно запустить Database Control, выбрать раздел Maintenance (Обслуживание) и перейти на страницу Utilities (Утилиты), на которой, помимо прочего, будут также предлагаться и различные варианты для экспорта и импорта данных.

 

Режимы утилиты Data Pump Export

Как и обычные утилиты экспорта, Data Pump Export поддерживает несколько режимов для выполнения заданий.

  • Режим экспорта всей базы данных. Позволяет выполнять экспорт всей базы данных за один сеанс экспорта с помощью параметра FULL. Для использования этого режима необходимы привилегии EXPORT_FULL_DATABASE.
  • Режим схем. Позволяет выполнять экспорт данных и/или объектов только конкретного пользователя с помощью параметра SCHEMAS.
  • Режим табличных пространств. Позволяет выполнять экспорт всех таблиц, которые содержатся в одном или нескольких табличных пространствах, с помощью параметра TABLESPACES или только метаданных тех объектов, которые содержатся в одном или нескольких табличных пространствах, с помощью параметра TRANSPORT_TABLESPACES. Напоминаем, что выполнять экспорт табличных пространств между базами данных можно, сначала выполнив экспорт метаданных, затем скопировав файлы табличного пространства на целевой сервер, а потом импортировав метаданные в целевую базу данных.
  • Режим таблиц. Позволяет выполнять экспорт только одной или нескольких конкретных таблиц с помощью параметра TABLES. Параметр TABLES работает примерно так же, как работал в прежней утилите для экспорта.

По умолчанию для выполнения заданий Data Pump Export и Data Pump Import используется режим схем. В случае входа показанным ниже образом, например, Data Pump автоматически выполнит экспорт всех объектов схемы пользователя SYSTEM

$ expdp system/sammyy1

Если же у пользователя SYSTEM возникнет желание выполнить экспорт объектов какой-то другой схемы, тогда он может применить параметр SCHEMAS явным образом, как показано в листинге ниже: 


$ expdp system/sammyy1 DUMPFILE=scott.dmp SCHEMAS=SCOTT
Export: Release 11.1.0.6.0 - Production on Tuesday, 25 March, 2008 12:19:31
Copyright (c) 2003, 2007, Oracle. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 –
Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
FLASHBACK automatically enabled to preserve database integrity.
Master table "SCOTT"."SYS_SQL_FILE_SCHEMA_01" successfully loaded/unloaded
Starting "SYSTEM"."SYS_EXPORT_SCHEMA_01": system/******** dumpfile=scott.dmp
schemas=SCOTT
total estimation using BLOCKS method: 192 KB
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/CONSTRAINT/REF_CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
. . exported "SCOTT"."DEPT"
. . exported "SCOTT"."EMP"
. . exported "SCOTT"."SALGRADE"
. . exported "SCOTT"."BONUS"
Dump file set for SYSTEM.SYS_EXPORT_SCHEMA_01 is:
/u01/app/oracle/product/10.2.0/db_1/admin/orcl/dpdump/scott.dmp
Job "SYSTEM"."SYS-EXPORT_SCHEMA_01" successfully completed AT 18:25:16

 

Параметры утилиты Data Pump Export

Некоторые параметры утилиты Data Pump Export совпадают с параметрами традиционной утилиты для экспорта, а некоторые являются совершенно новыми. В этом разделе дается краткий обзор всех этих параметров; наиболее важные из них описываются более детально. Для удобства автор поделил параметры на следующие категории.

  • Параметры, касающиеся файлов и каталогов.
  • Параметры, касающиеся режима экспорта.
  • Параметры фильтрации экспортируемых данных.
  • Параметры, касающиеся шифрования.
  • Параметры оценки.
  • Параметр NETWORK_LINK.
  • Параметры экспорта данных в интерактивном режиме.
  • Параметры, касающиеся заданий.

Обратите внимание на то, что все параметры экспорта, за исключением лишь перечисленных в разделе “Параметры экспорта данных в интерактивном режиме”, можно использовать как в командной строке, так и в файле параметров.

 

Параметры, касающиеся файлов и каталогов

При выполнении задания Data Pump Export можно задавать несколько параметров, касающихся файлов и каталогов. Выглядят эти параметры так: DIRECTORY, DUMPFILE, FILESIZE, PARFILE, LOGFILE, NOLOGFILE и COMPRESSION.

Параметр DIRECTORY

Параметр DIRECTORY позволяет указывать объект каталога, который должен использоваться для файлов дампа и файлов журнала. Более подробно о нем уже говорилось ранее в этой нашей статье блога в разделе “Использование объектов каталогов”.

Параметр DUMPFILE

Параметр DUMPFILE позволяет указывать имя одного или нескольких файлов, в которые должны записываться данные дампа экспорта. Он заменяет параметр FILE, который использовался в прежней утилите экспорта. Предоставлять несколько имен файлов дампа можно несколькими способами.

  • Созданием нескольких файлов дампа за счет использования переменной подстановки %U. Значение этой переменной начинается с 01 и может достигать 99. Например, спецификация вроде exp%U.dmp может преобразовываться в такие имена файлов, как exp01.dmp, exp02.dmp, exp03.dmp и т.д.
  • Указанием нескольких имен файлов в виде разделенного запятыми списка.
  • Указанием параметра DUMPFILE по несколько раз для одного и того же экспортного задания.

На заметку! В случае использования обозначения %U для указания нескольких файлов дампа, количество файлов, которое можно создать, равняется значению параметра PARALLEL.


Если не задавать параметр DUMPFILE, Oracle будет использовать принятое по умолчанию имя expdat.dmp для экспортного файла дампа, точно так же, как это было и в предыдущей утилите экспорта.

Параметр FILESIZE

Параметр FILESIZE является необязательным и по умолчанию позволяет указывать размер файла дампа в байтах, Кбайт, Мбайт и Гбайт. Если опустить этот параметр, у файла дампа не будет никаких ограничений по размеру, а если задать в нем, например, что максимальный размер файла дампа должен составлять 10 Мбайт, тогда в случае достижения файлом дампа своего лимита по размеру процесс экспорта будет останавливаться, и запустить его снова будет возможно только после устранения проблемы.

Параметр PARFILE

Параметр PARFILE делает то же самое, что делал в прежней утилите экспорта, а именно — позволяет использовать файл параметров. Как уже объяснялось ранее в этой статье, параметры экспорта можно задавать и в файле параметров, а не только вводить напрямую в командной строке.

Параметры LOGFILE и NOLOGFILE

Параметр LOGFILE позволяет указывать журнальный файл для заданий Data Pump Export. О нем нужно помнить следующие моменты.

  • Если он задается вместе с параметром DIRECTORY, Oracle автоматически создает журнальный файл в том каталоге, который был указан в параметре DIRECTORY.
  • Если он не задается, Oracle автоматически создает журнальный файл по имени 
      export.log. 

В случае использования параметра NOLOGFILE Oracle не создает свой журнальный файл (export.log). Информация о ходе выполнения экспортного задания на экране все равно отображается, но запись отдельного журнального файла для этого задания при этом подавляется.

Параметр REUSE_DUMPFILES

Параметр REUSE_DUMPFILES позволяет перезаписывать экспортный файл дампа. По умолчанию база данных не перезаписывает файлы дампа. За счет установки для этого параметра значения Y можно указывать, что требуется перезаписать файл дампа, а установкой значения N — что требуется использовать поведение по умолчанию, т.е. не применять более старые файлы дампа. Ниже приведен пример, показывающий, как задавать этот параметр при выполнении экспорта: 

$ expdp hr DIRECTORY=dpump_dir1 DUMPFILE=hr.dmp
TABLES=employees REUSE_DUMPFILES=y

Конечно, необходимо удостовериться в том, что содержимое существующего файла дампа hr.dmp уже больше не нужно.

Параметр COMPRESSION

Параметр COMPRESSION позволяет указывать, какие данные должны сжиматься перед записью данных экспорта в файл дампа. По умолчанию перед записью в файл дампа сжимаются все метаданные. Отключить их сжатие можно, указав для параметра COMPRESSION значение NONE

$ expdp hr/hr DIRECTORY=dpump_dir1 DUMPFILE=hr_comp.dmp COMPRESSION=NONE

В общем случае параметр COMPRESSION может принимать любое из четырех следующих значений:

  • ALL — указывает, что требуется включить функцию сжатия на весь период выполнения операции;
  • DATA_ONLY — указывает, что в сжатом формате в файл дампа должны записываться все данные;
  • METADATA_ONLY — указывает, что в сжатом формате в файл дампа должны записываться только метаданные;
  • NONE — указывает, что требуется вообще отключить функцию сжатия для всех типов данных.

 

Параметры, касающиеся режима экспорта

Параметры, касающиеся режима экспорта, выглядят так: FULL, SCHEMAS, TABLES,TABLESPACES, TRANSPORT_TABLESPACES и TRANSPORT_FULL_CHECK. Обо всех них, кроме последнего (TRANSPORT_FULL_CHECK), уже рассказывалось ранее в этой статье в разделе “Режимы утилиты Data Pump Export”.

Что касается параметра TRANSPORT_FULL_CHECK, то он позволяет выполнять проверку для получения уверенности в том, что подлежащие переносу табличные пространства удовлетворяют всем условиям, которым должны удовлетворять для того, чтобы считаться переносимыми. С помощью этого параметра можно указывать, должна ли выполняться проверка на предмет наличия зависимостей между объектами в переносимом наборе и другими объектами в базе данных. Например, индекс полностью зависит от таблицы, поскольку без таблицы не имеет абсолютно никакого смысла. Но таблица от индекса не зависит, так как может существовать и без него.

Для параметра TRANSPORT_FULL_CHECK можно устанавливать два значения: Y и N. В случае установки для него значения Y (TRANSPORT_FULL_CHECK=Y) во время выполнения задания Data Pump Export будет предприниматься проверка на предмет наличия двусторонних зависимостей. И если таблица находится в пригодном для переноса табличном пространстве, а ее индексы — нет, или наоборот, выполнение задания Data Pump Export потерпит неудачу. В случае же установки для параметра TRANSPORT_FULL_CHECK значения N (TRANSPORT_FULL_CHECK=N) во время выполнения задания Data Pump Export будет выполняться проверка на предмет наличия только односторонних зависимостей. То есть если в переносимом наборе табличных пространств содержатся таблицы без индексов, выполнение задания Data Pump Export будет завершаться успехом, но если в нем содержатся индексы без таблиц, то выполнение задания Data Pump Export завершится неудачей.

 

Параметры фильтрации экспортируемых данных

В Data Pump содержится несколько параметров, касающихся фильтрации экспортируемых данных. Некоторые из них просто заменяют собой прежние параметры, а некоторые предлагают совершенно новые функциональные возможности. Давайте рассмотрим эти важные параметры более подробно.

Параметр CONTENT

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

  • ALL — указывает, что требуется экспортировать как данные таблиц, так и определения этих таблиц и других объектов (метаданных);
  • DATA_ONLY — указывает, что требуется экспортировать только строки таблиц;
  • METADATA_ONLY — указывает, что требуется экспортировать только метаданные.

Ниже приведен пример:

$ expdp system/manager DUMPFILE=expdat1.dmp CONTENT=DATA_ONLY

На заметку! Параметр CONTENT=METADATA_ONLY равнозначен параметру ROWS=N, который применялся в исходной утилите экспорта.


Параметры EXCLUDE и INCLUDE

Параметры EXCLUDE и INCLUDE — это два взаимоисключающих параметра, которые можно применять для выполнения так называемой фильтрации метаданных (metadata filtering). Фильтрация метаданных позволяет выборочно исключать или наоборот включать определенные типы объектов во время выполнения задания Data Pump Export или Data Pump Import. В прежней утилите экспорта для указания того, требуется ли экспортировать такие объекты, применялись параметры CONSTRAINTS, GRANTS и INDEXES. За счет использования параметров EXCLUDE и INCLUDE теперь стало можно включать и исключать объекты и многих других видов помимо тех четырех, фильтрацию которых можно было осуществлять ранее. Например, если необходимо сделать так, чтобы во время экспорта не экспортировались никакие пакеты, такое поведение задается с помощью параметра EXCLUDE.


На заметку! При использовании параметра CONTENT=DATA_ONLY (равнозначного параметру ROWS=Y) никакие объекты не экспортируются — экспортируются только содержащиеся в строках таблиц данные. Поэтому в таком случае, естественно, использовать ни EXCLUDE, ни INCLUDE нельзя.


Проще говоря, параметр EXCLUDE помогает пропускать определенные типы объектов базы данных во время операции экспорта или импорта, а параметр INCLUDE наоборот — включать в эти операции только определенный набор объектов. Ниже показано, как в общем случае выглядит синтаксис этих параметров: 

EXCLUDE=тип_объекта[:конструкция_имени]
INCLUDE=тип_объекта[:конструкция_имени]

Как для параметра EXCLUDE, так и для параметра INCLUDE, элемент конструкция_имени является необязательным. Как известно, некоторые объекты в базе данных, например, таблицы, индексы, пакеты и процедуры, обладают именами, а некоторые, например, объекты GRANTS — нет. Элемент конструкция_имени в параметре EXCLUDE или INCLUDE позволяет применять SQL-функцию для фильтрации именованных объектов.

Ниже приведен простой пример исключения всех таблиц, имя которых начинается с EMP:

EXCLUDE=TABLE:"LIKE 'EMP%'"

В этом примере "LIKE 'EMP%'" представляет собой конструкцию имени. Элемент конструкция_имени является необязательным в параметрах EXCLUDE и INCLUDE. Он представляет собой просто средство фильтрации, позволяющее более точно определять тип подлежащих исключению или включению объектов (индексов, таблиц и т.д.). В случае его пропуска включаться или исключаться будут все объекты указанного типа.

В следующем примере Oracle исключит из операции экспорта все индексы, потому в элементе конструкция_имени не было указано никакого значения, требующего, чтобы исключались только определенные индексы: 

EXCLUDE=INDEX

Вдобавок параметр EXCLUDE может применяться для исключения целой схемы, как показано в следующем примере: 

EXCLUDE=SCHEMA:"='HR'"

Параметр INCLUDE является противоположностью параметру EXCLUDE и позволяет принудительно включать в операцию экспорта только определенный набор объектов. Как и в случае параметра EXCLUDE, для указания того, какие точно объекты требуется экспортировать, вместе с INCLUDE тоже можно использовать элемент конструкция_имени. Это дает возможность осуществлять выбор объектов на более точном уровне.

Ниже приведены три примера, демонстрирующие применение элемента конструкция_имени для ограничения выбираемых объектов:

INCLUDE=TABLE:"IN ('EMPLOYEES', 'DEPARTMENTS')"
INCLUDE=PROCEDURE
INCLUDE=INDEX:"LIKE 'EMP%'"

В первом примере параметр INCLUDE указывает, что в процессе экспорта должны принимать участие только две таблицы: EMPLOYEES и DEPARTMENTS, во втором — только процедуры, а в третьем — только индексы, причем лишь те, имя у которых начинается с EMP.

В следующем примере показано, как использовать символ косой черты для отмены двойных кавычек: 

$ expdp scott/tiger DUMPFILE=dumphere:file%U.dmp
schemas=SCOTT EXCLUDE=TABLE:\"='EMP'\", EXCLUDE=FUNCTION:\"='MY_FUNCTION''\",

На заметку! Параметры EXCLUDE и INCLUDE являются взаимоисключающими. Поэтому во время выполнения одного и того же задания применять можно только какой-то один из них; использовать тот и другой одновременно нельзя.


При выполнении фильтрации метаданных за счет применения параметра EXCLUDE и INCLUDE нужно помнить о том, что все объекты, которые зависят от какого-то из фильтруемых объектов, будут обрабатываться тем же образом, что и сам этот фильтруемый объект. Например, в случае использования параметра EXCLUDE для исключения некоторой таблицы также автоматически будут исключаться индексы, ограничения, триггеры и прочие зависящие от этой таблицы объекты.

Параметр REMAP_DATA

Параметр REMAP_DATA позволяет заменять содержащиеся в столбце значения новыми. Новые значения для столбца задаются с помощью функции переопределения (remap function). Этот параметр может быть удобно использовать при перемещении данных из производственной системы в тестовую и желании изменить некоторые содержащие секретную информацию столбцы для безопасности. Одну и ту же функцию переопределения можно применять для переопределения как дочерних, так и родительских столбцов в ссылочном ограничении.

Ниже приведен пример применения функций переопределения к двум столбцам в таблице:

$ expdp hr DIRECTORY=dpump_dir1 DUMPFILE=remap1.dmp TABLES=employees
REMAP_DATA=hr.employees.employee_id:hr.remap.minus10
REMAP_DATA=hr.employees.first_name:hr.remap.plusx

В этом примере два столбца из таблицы EMPLOYEES, а именно — EMPLOYEE_ID и FIRST_NAME, подвергаются изменению с помощью, соответственно, функций REMAP10 и PLUSX, принадлежащих пакету REMAP.

Параметр DATA_OPTIONS

Параметр DATA_OPTIONS позволяет задавать параметры, которые должны применяться для обработки конкретных типов данных во время экспорта. Для него пока можно указывать только значение XML_CLOBS (DATA_OPTIONS=XML_CLOBS).

Параметр QUERY

Параметр QUERY выполняет ту же функцию, которую выполнял и в прежней утилите для экспорта, а именно — позволяет осуществлять выборочный экспорт содержащихся в строках таблицы данных с помощью оператора SQL. Он разрешает указывать в SQL- операторе имя таблицы, чтобы тот применялся только в отношении конкретной таблицы. Ниже приведен пример: 

QUERY=OE.ORDERS: "WHERE order_id > 100000"

В этом примере экспортироваться будут только те строки из таблицы ORDERS (владельцем которой является пользователь OE), в которых значение order_id превышает 100 000.

Параметр SAMPLE

С помощью параметра SAMPLE, который впервые появился лишь во втором выпуске Oracle Database 10g, из таблицы можно экспортировать только определенное подмножество данных. Параметр SAMPLE позволяет указывать значение в процентах от .000001 до 100. В общем, синтаксис этого параметра выглядит следующим образом: 

SAMPLE=[[имя_схемы.]имя_таблицы:]объем_выборки_в_процентах

Ниже приведен пример использования этого параметра:

SAMPLE="HR"."EMPLOYEES":50

Требуемый объем выборки указывается значением конструкции объем_выборки_в_процентах. Имя схемы и имя таблицы задавать не обязательно. В случае не указания имени схемы предполагается, что должна использоваться текущая схема. В случае же указания имени схемы нужно обязательно задать и имя таблицы. В противном случае значение требуемого объема выборки будет использоваться для всех таблиц в задании Data Pump Export. В следующем примере объем выборки будет составлять 70% для всех таблиц в Data Pump Export, потому что имя никакой конкретной таблицы указано не было: 

$ expdp hr/hr DIRECTORY=dpump_dir1 DUMPFILE=sample.dmp SAMPLE=70
Параметр TRANSPORTABLE

Параметр TRANSPORTABLE позволяет указывать базе данных, должны ли экспортироваться метаданные для определенных таблиц (а также разделов и подразделов) при выполнении экспорта в режиме таблиц. Для него можно устанавливать либо значение ALWAYS, либо значение NEVER. Ниже приведен пример его использования:

$ expdp sh DIRECTORY=dpump_dir1 DUMPFILE=hr.dmp
TABLES=employees TRANSPORTABLE=always

Значения по умолчанию у этого параметра нет.

 

Принудительное шифрование экспортируемых данных

Для указания того, должны ли данные шифроваться перед записыванием в файл дампа, можно использовать один и более из следующих специально предназначенных для шифрования параметров: ENCRYPTION, ENCRYPTION_ALGORITHM, ENCRYPTION_MODE и ENCRYPTION_PASSWORD. Давайте рассмотрим каждый из них более подробно.

Параметр ENCRYPTION

Параметр ENCRYPTION позволяет указывать, требуется выполнять шифрование данных перед их записыванием в файл дампа или нет. Он может принимать одно из следующих значений:

  • ALL — указывает, что требуется выполнять шифрование всех данных и метаданных;
  • DATA_ONLY — указывает, что требуется выполнять шифрование только данных, записываемых в файл дампа;
  • ENCRYPTED_COLUMNS_ONLY — указывает, что требуется выполнять шифрование только шифрованных столбцов с использованием механизма TDE;
  • METADATA_ONLY — указывает, что требуется выполнять шифрование только метаданных;
  • NONE — указывает, что шифрование данных выполнять не требуется.

На заметку! Принудительно применять шифрование можно как путем задания параметра ENCRYPTION, так и путем задания параметра ENCRYPTION_PASSWORD, либо того и другого вместе. В случае задания только ENCRYPTION_PASSWORD для параметра ENCRYPTION по умолчанию будет использоваться значение ALL.


Если не задается ни параметр ENCRYPTION, ни параметр ENCRYPTION_PASSWORD, для ENCRYPTION по умолчанию используется значение NULL. Если же параметр ENCRYTPION не задан, но задан ENCRYPTION_PASSWORD, тогда для параметра ENCRYPTION по умолчанию устанавливается значение ALL.

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

$ expdp hr DIRECTORY=dpump_dir1 DUMPFILE=hr.dmp JOB_NAME=test1
ENCRYPTION=data_only ENCRYPTION_PASSWORD=foobar
Параметр ENCRYPTION_ALGORITHM

Параметр ENCRYPTION_ALGORITHM позволяет указывать, какой алгоритм должен применяться для шифрования данных. По умолчанию для него используется значение AES128, но могут быть также указаны значения AE192 и AES256. Приведенный ниже пример показывает, как установить этот параметр: 

$ expdp hr DIRECTORY=dpump_dir1 DUMPFILE=hr.dmp
ENCRYPTION_PASSWORD=foobar ENCRYPTION_ALGORITHM=AES128
Параметр ENCRYPTION_MODE

Параметр ENCRYPTION_MODE позволяет указывать, какой тип защиты должен применяться при шифровании данных во время экспорта. Он может принимать три значения: DUAL, PASSWORD и TRANSPARENT. То, какое значение будет использоваться по умолчанию, зависит от состояния других связанных с шифрованием параметров, как показано ниже.

  • В случае задания только параметра ENCRYPTION, для ENCRYPTION_MODE по умолчанию будет использоваться значение TRANSPARENT.
  • В случае задания параметра ENCRYPTION_PASSWORD и наличии открытого бумажника Oracle Encryption Wallet, для параметра ENCRYPTION_MODE по умолчанию будет использоваться значение DUAL.
  • В случае задания параметра ENCRYPTION_PASSWORD и отсутствия открытого бумажника Oracle Encryption Wallet, для параметра ENCRYPTION_MODE по умолчанию будет использоваться значение PASSWORD.

Режим DUAL позволяет создавать набор файлов дампа, которые позже можно импортировать с использованием либо Oracle Encryption Wallet, либо пароля, который был задан в параметре ENCRYPTION_PASSWORD. Его удобно применять при необходимости импортировать данные на сайт, где нет бумажника Oracle Encryption Wallet.

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

Что касается режима TRANSPARENT, то он позволяет создавать набор файлов дампа без применения параметра ENCRYPTION_PASSWORD. Его удобно применять при импорте той же базы данных, из которой экспортировался набор файлов дампа.

Ниже приведен пример, в котором для параметра ENCRYPTION_MODE указывается значение DUAL

$ expdp hr DIRECTORY=dpump_dir1 DUMPFILE=hr.dmp
ENCRYPTION=all ENCRYPTION_PASSWORD=encrypt_pwd
ENCRYPTION_ALGORITHM=AES256 ENCRYPTION_MODE=dual
Параметр ENCRYPTION_PASSWORD

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


На заметку! В случае выполнения экспорта таблицы с шифрованными столбцами без задания параметра ENCRYPTION_PASSWORD шифрованный столбец или столбцы этой таблицы будут сохраняться в файле дампа в виде открытого текста. При возникновении подобной ситуации база данных будет выдавать соответствующее предупреждение.


При экспорте таблицы можно предоставлять любой пароль, даже если таблица содержит шифрованные столбцы. Этот пароль вовсе необязательно должен совпадать с тем, который использовался при шифровании столбца. При установке для параметра ENCRYPTION_MODE значения PASSWORD или DUAL указание значения для параметра ENCRYPTION_PASSWORD является обязательным.

Ниже приведен пример передачи параметру ENCRYPTION_PASSWORD значения testpass

$ expdp hr TABLES=employee_s_encrypt DIRECTORY=dpump_dir
DUMPFILE=hr.dmp ENCRYPTION=ENCRYPTED_COLUMNS_ONLY
ENCRYPTION_PASSWORD=testpass

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

 

Параметры оценки

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

Параметр ESTIMATE

Параметр ESTIMATE будет сообщать, сколько пространства придется использовать для выполнения новой операции экспорта. Пространство всегда измеряется в байтах. Объем предоставляемого базой данных пространства может определяться либо в виде количества блоков базы данных (опция BLOCK), если речь идет о подлежащих экспорту объектах, либо в виде статических показателей оптимизатора (опция STATISTICS), если речь идет о таблицах. В целом, синтаксис параметра ESTIMATE выглядит так:

ESTIMATE={BLOCKS | STATISTICS}

По умолчанию Oracle подсчитывает объем требуемого для выполнения операции экспорта пространства с помощью блоков. Она берет размер блока базы данных и умножает его на количество блоков, которое потребуется всем объектам вместе. Ниже приведен пример информации, которая может появляться в журнальном файле (или на экране) в таком случае: 

Estimate in progress using BLOCKS method . . .
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 654 KB

Поскольку выполнение подсчета требуемого объема пространства с использованием блоков является поведением по умолчанию, в принципе задавать параметр ESTIMATE во время экспорта не требуется. Однако, в случае проведения недавнего анализа таблиц, можно предложить утилите Data Pump Export выяснить необходимый объем пространства за счет использования статистических данных, которые база данных уже собрала для каждой из таблиц. Чтобы заставить базу данных использовать статистические данные (вместо принятого по умолчанию метода BLOCKS), необходимо установить параметр ESTIMATE следующим образом: 

ESTIMATE=STATISTICS

Ниже приведен пример информации, которая может появляться в журнальном файле в случае применения параметра ESTIMATE=STATISTICS:

Estimate in progress using STATISTICS method . . .
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. estimated "SYSTEM"."HELP" 35.32 KB
Total estimation using STATISTICS method: 65.72 KB
Параметр ESTIMATE_ONLY

Если параметр ESTIMATE работает только во время фактического выполнения операции экспорта, то ESTIMATE_ONLY может использоваться и без запуска задания Data Pump Export. В листинге ниже приведен соответствующий пример. 


$ expdp system/sammyy1 estimate_only=y
Export: Release 11.1.0.6.0 - Production on Saturday, 22 March, 2008 11:19:4
Copyright (c) 2003, 2007, Oracle. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 -
Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
FLASHBACK automatically enabled to preserve database integrity.
Starting "SYSTEM"."SYS_EXPORT_SCHEMA_01": system/******** estimate_only=y
Estimate in progress using BLOCKS method . . .
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. estimated "SYSTEM"."REPCAT$_AUDIT_ATTRIBUTE" 64 KB
. . .
. estimated "SYSTEM"."SQLPLUS_PRODUCT_PROFILE" 0 KB
Total estimation using BLOCKS method: 320 KB
Job "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully completed at 11:20:16
C:\>

Хотя в журнале говорится, что операция экспорта уже была “успешно выполнена” (successfully completed), на самом деле был выполнен лишь подсчет объема пространства, который потребуется для выполнения настоящей операции экспорта.

Параметр NETWORK_LINK

Утилита Data Pump Export также поддерживает возможность выполнения экспорта и по сети (network export). С помощью параметра NETWORK_LINK можно инициировать задание Data Pump Export с сервера и заставить Data Pump экспортировать данные из удаленной базы в файлы дампа, находящиеся в экземпляре, из которого было непосредственно инициировано задание Data Pump Export.

Ниже приведен пример выполнения экспорта по сети: 

$ expdp hr/hr DIRECTORY=dpump_dir1 NETWORK_LINK=finance
DUMPFILE=network_export.dmp LOGFILE=network_export.log

В этом примере значение параметра NETWORK_LINK должно обязательно представлять собой действительную связь базы данных. Это означает, что такая связь должна создаваться заранее. В этом примере требуется выполнить экспорт данных из базы finance, находящейся на сервере prod1.

Давайте предположим, что есть две базы данных: local и remote. Тогда, чтобы использовать параметр NETWORK_LINK и передать данные прямо по сети, потребуется выполнить следующие шаги.

1. Создать ссылку на удаленную базу данных, каковой в рассматриваемом примере является база по имени remote:

SQL> CREATE DATABASE LINK remote
2 CONNECT TO scott IDENTIFIED BY tiger
3 USING 'remote.world';

2. Создать объект каталога Data Pump, если его еще не существует:

SQL> CREATE DIRECTORY remote_dir1 AS '/u01/app/oracle/dp_dir'; 

3. Назначить этот новый каталог каталогом по умолчанию, экспортировав значение каталога:

$ export DATA_PUMP_DIR=remote_dir1 

4. Выполнить по сети экспорт данных из базы по имени remote:

$ expdp system/sammyy1 SCHEMAS=SCOTT FILE_NAME=network.dmp NETWORK_LINK=finance 

Это приведет к созданию файла дампа network.dmp (в каталоге, который был указан в remote_dir1) на сервере, обслуживающем базу данных local. Данные внутри этого файла дампа, однако, будут экспортированы из схемы пользователя scott, принадлежащей удаленной базе данных (каковой в примере является база данных remote). Из этого следует, что параметр NETWORK_LINK позволяет переносить файлы дампа по сети с удаленного сервера на локальный. Все, что для этого требуется — это связь между базой данных, находящейся на локальном сервере, и исходной базой данных, расположенной на удаленном сервере.


Внимание! Использовать Data Pump обычным образом для экспортирования данных из доступной только для чтения базы данных нельзя. Все дело в том, что Data Pump не умеет создавать необходимые главные (master) и внешние таблицы в доступном только для чтения табличном пространстве. За счет использования сетевого режима, однако, все-таки можно выполнять экспорт данных из доступной только для чтения базы данных на сервере A в файлы дампа на сервере B с работающей утилитой Data Pump.


Параметр ENCRYPTION_PASSWORD

Если в файл дампа требуется экспортировать какие-то шифрованные столбцы данных, лучше использовать новый параметр ENCRYPTION_PASSWORD для предоставления пароля во избежание записи данных шифрованных столбцов в файле дампа в виде открытого текста. Тогда при импортировании файла дампа, который был создан с использованием такого пароля шифрования, тоже понадобится ввести пароль. Ниже приведен пример применения параметра ENCRYPTION_PASSWORD:

$ expdp hr/hr TABLES=employees DUMPFILE=test.dmp ENCRYPTION_PASSWORD=123456

Параметры, касающиеся заданий

К категории параметров, касающихся заданий, относятся сразу несколько параметров Data Pump Export. Наиболее важные из них вкратце описываются ниже.

Параметр JOB_NAME

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

Параметр STATUS

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


$ expdp system/manager STATUS=60 . . .
. . .
Worker 1 Status:
State: EXECUTING
..Object Schema: SYSTEM
..Object Name: SYS_EXPORT_SCHEMA_01
Object Type: SCHEMA_EXPORT/TABLE/TABLE_DATA
Completed Objects: 1
Total Objects: 65
. . exported "SYSTEM"."REPCAT$_SITES_NEW"
Job: SYS_EXPORT_SCHEMA_01
Operation: EXPORT
Mode: SCHEMA
State: EXECUTING
Bytes Processed: 69,312
Percent Done: 99
Current Parallelism: 1
Job Error Count: 0
Dump File: C:\ORACLE\PRODUCT\11.1.0\ADMIN\EXPORT\EXPDAT6.DMP
bytes written: 1,748,992
. . .

В частности, параметр STATUS отображает информацию о том, насколько всего процентов уже было выполнено задание, о состоянии рабочих процессов и о состоянии объектов данных, обрабатываемых в текущий момент. Обратите внимание, что в журнальном файле Data Pump будут содержаться сведения просто о том, как завершилось выполнение задания, а в выводе параметра STATUS — о том, как именно проходит его выполнение.

Параметр FLASHBACK_SCN

Параметр FLASHBACK_SCN позволяет указывать системный номер изменения (System Change Number — SCN), который утилита Data Pump Export должна использовать для включения утилиты Flashback. В случае установки этого параметра операция экспорта будет выполняться в соответствии с указанным номером SCN.

Приведенный ниже пример показывает, как экспортировать схему HR вплоть до SCN-номера 150222

$ expdp hr/hr DIRECTORY=dpump_dir1 DUMPFILE=hr_exp.dmp FLASHBACK_SCN=150222
Параметр FLASHBACK_TIME

Параметр FLASHBACK_TIME похож на параметр FLASHBACK_SCN и отличается от него лишь тем, что в нем для ограничения экспортируемых данных вместо SCN-номера указывается значение времени. Oracle отыскивает SCN-номер, который ближе всего подходит к указанному времени, и использует его для включения утилиты Flashback, после чего операция Data Pump выполняется в соответствии с этим номером. Ниже приведен пример: 

$ expdp system/sammyy1 DIRECTORY=dpump_dir1 DUMPFILE=hr_time.dmp
FLASHBACK_TIME="TO_TIMESTAMP('25-05-2008 17:22:00', 'DD-MM-YYYY HH24:MI:SS')"

На заметку! Параметры FLASHBACK_SCN и FLASHBACK_TIME являются взаимоисключающими.


Параметр PARALLEL

Параметр PARALLEL является очень мощным и позволяет указывать для экспортного задания более одного активного потока выполнения (рабочего процесса). Применение параметра PARALLEL означает, что для выполнения заданий будет использоваться несколько потоков. Степень параллелизма может изменяться на лету с помощью команды ATTACH. Обратите внимание на то, что параметр PARALLEL утилиты Data Pump не имеет никакого отношения к функциям параллельного выполнения Oracle, но может работать вместе с ними.

По умолчанию для параметра PARALLEL устанавливается значение 1, подразумевающее, что операция экспорта должна выполняться с использованием одного потока и записью данных в один файл дампа. В случае указания для него значения больше 1 следует также не забыть указать соответствующее количество файлов дампов, чтобы несколько потоков выполнения могли одновременно осуществлять запись данных в несколько файлов дампа. Ниже приведен пример установки для параметра PARALLEL значения 3, вынуждающего Data Pump Export параллельно выполнять запись данных в три файла дампа: 

$ expdp system/manager DIRECTORY=dpump_dir1 DUMPFILE=par_exp%U.dmp PARALLEL=3

В этом примере в параметре DUMPFILE для указания того, что требуется сгенерировать несколько файлов, используется переменная подстановки %U в формате par_expNN.dmp, где на месте NN может быть любое состоящее из двух знаков целое число, начиная с 01. Поскольку для параметра PARALLEL установлено значение 3, эта переменная подстановки приведет к созданию трех файлов со следующими именами: par_exp01.dmp, par_exp02.dmp и par_exp03.dmp.

Следует отметить, что применять переменную подстановки %U для генерации нескольких файлов дампа при выборе для параметра PARALLEL значение, большего, чем 1, вовсе не обязательно. Вместо нее можно также использовать и просто разделенный запятыми список значений, как показано ниже: 

$ expdp system/manager DIRECTORY=dpump_dir1
DUMPFILE=(par_exp01.dmp,par_exp02.dmp,par_exp03.dmp)

Имейте в виду, что при недостаточной пропускной способности ввода-вывода применение параметра PARALLEL может на самом деле даже приводить к снижению производительности Data Pump.


Внимание! При использовании параметра PARALLEL обязательно указывайте соответствующее степени параллелизма количество файлов дампа; кроме того, чем выше степень параллелизма, тем больше требуется ресурсов памяти, ЦП и пропускной способности сети.


Параметр ATTACH

Параметр ATTACH позволяет подключать клиентский сеанс Data Pump к выполняющемуся заданию и переводить его в интерактивный режим. Его можно использовать только вместе с именем пользователя и паролем и больше ни с какими другими параметрами экспорта. Ниже приведен пример: 

$ expdp hr/hr ATTACH=hr.export_job

Параметр ATTACH очень важен, поскольку представляет собой один из двух возможных способов открытия интерактивного задания Data Pump, о котором более подробно рассказывается в следующем разделе.

 

Параметры (команды) выполнения экспорта в интерактивном режиме

Как уже упоминалось ранее в этой статье, интерактивный режим Data Pump существенно отличается от интерактивного режима, предлагавшегося в прежних утилитах экспорта и импорта. Раньше интерактивный режим предоставлял возможность вводить в командной строке ограниченный набор параметров экспорта или импорта в ответ на запросы от утилиты EXP или IMP. В новой технологии Data Pump интерактивный режим применяется лишь для вмешательства в процесс выполнения задания с целью либо временно приостановить его, либо изменить какие-то его аспекты. Входить в интерактивный режим Data Pump Export можно двумя способами.

  • Нажать на клавиатуре комбинацию клавиш <Ctrl+C> во время выполнения задания Data Pump Export, если необходимо войти в интерактивный режим из того же сеанса, в котором выполняется это задание.
  • Применить команду ATACH, если нужно подключиться к выполняющемуся сеансу из отдельного сеанса или даже с отдельного сервера. (С помощью этой команды можно также подключаться и к остановленному заданию.) После успешного подключения к заданию появляется возможность работать в интерактивном режиме и использовать специальные параметры экспорта, которые также называются интерактивными командами экспорта.

На заметку! В утилите Data Pump Export (а также в утилите Data Pump Import) переходить в интерактивный режим работы можно только с использованием комбинации клавиш <Ctrl+C>, или же открыв другой сеанс и подключившись из него к нужному сеансу с помощью команды ATACH. Запускать интерактивный сеанс Data Pump из командной строки нельзя.


Давайте посмотрим, когда удобно использовать интерактивный режим при выполнении задания Data Pump Export. Предположим, что вы запустили процесс выполнения задания вечером на работе и ушли домой, а ночью проверяете его состояние и обнаруживаете, что оно еле сдвинулось с места. В таком случае вы можете запустить другой сеанс, а затем подключиться из него к выполняющемуся заданию и понаблюдать за его продвижением с помощью команды ATTACH. Когда вы сделаете это, процесс выполнения задания не будет приостановлен. Вместо этого задание откроется в интерактивном окне, где можно будет изменить его параметры для того, чтобы ускорить его выполнение, за счет применения специальных интерактивных команд Data Pump Export. Подход с использованием команды ATTACH предоставляет возможность возобновлять выполнение тех заданий, которые застряли на полпути из-за нехватки места в файловой системе, а не запускать их заново с самого начала. Он оказывается особенно полезным при выполнении экспорта и импорта больших объемов данных.

В листинге ниже показан пример применения команды ATTACH.


[orcl] $ expdp system/sammyy1 ATTACH=system.sys_export_schema_01
Export: Release 11.1.0.6.0 - Production on Tuesday, 25 March, 2008 11:58:08
Copyright (c) 2003, 2007, Oracle. All rights reserved.
Job: SYS_EXPORT_SCHEMA_01
Owner: SYSTEM
Operation: EXPORT
Creator Privs: FALSE
GUID: F24953A52C006A63E0340060B0B2C268
Start Time: Monday, 14 March, 2005 11:03:03
Mode: SCHEMA
Instance: orcl
Max Parallelism: 1
EXPORT Job Parameters:
Parameter Name Parameter Value:
CLIENT_COMMAND system/********
State: EXECUTING
Bytes Processed: 0
Current Parallelism: 1
Job Error Count: 0
Dump File: /u01/app/oracle/product/10.2.0/db_1/admin/orcl/dpdump/expdat.dmp
bytes written: 4,096
Worker 1 Status:
State: EXECUTING

На заметку! К одному заданию можно подключать несколько клиентов


Подключаться к выполняющемуся заданию можно как за счет применения команды ATTACH, как показывалось выше, так и за счет использования на сервере, где на самом деле выполняется задание, комбинации клавиш <Ctrl+C> (<^C>). После нажатия комбинации клавиш <Ctrl+C> появляется интерактивное приглашение export>, обозначающее, что утилита Data Pump ожидает ввода интерактивных команд. Ниже приведен пример: 

Starting "SYSTEM"."SYS_EXPORT_SCHEMA_01": system/********
Estimate in progress using BLOCKS method . . .
(You stop the export job by using the ^C sequence)
export>
Запуск "SYSTEM"."SYS_EXPORT_SCHEMA_01": system/********
Идет процесс оценки с использованием метода BLOCKS . . .
(Остановить операцию экспорта можно с помощью последовательности ^C)

Обратите внимание, что ни команда ATTACH, ни комбинация <Ctrl+C> для интерактивного подключения к заданию к остановке выполнения самого задания не приводят, вместо этого они прекращают отображение на экране связанных с выполнением задания сообщений и вызывают появление интерактивного приглашения export>.

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

Processing object type SCHEMA_EXPORT/TABLE/COMMENT
Processing object type SCHEMA_EXPORT/VIEW/VIEW
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
ORA-39095: Dump file space has been exhausted: Unable to allocate 524288 bytes
Job "SYSTEM"."SYS_EXPORT_SCHEMA_01" stopped due to fatal error at 18:40
. . .
ORA-39095: место в файле дампа закончилось: не удается выделить 524288 байта.
Выполнение задания Job "SYSTEM"."SYS_EXPORT_SCHEMA_01" было прервано
из-за фатальной ошибки в 18:40

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

export> KILL_JOB

Однако более вероятно, что возникнет желание не завершить, а возобновить выполнение этого задания за счет добавления дополнительного места в каталог. Ниже показано, как использовать команду ADD_FILE для добавления файлов в каталог экспорта: 

export> ADD_FILE=data_dump_dir:expdat02.dmp

После добавления места в каталог экспорта возобновить выполнение приостановленного задания можно будет с помощью интерактивной команды START_JOB, как показано ниже: 

export> START_JOB

Возобновить отображение вывода на экране можно посредством команды CONTINUE_CLIENT

export> CONTINUE_CLIENT
Job SYS_EXPORT_SCHEMA_01 has been reopened at Sunday, 20 March, 2005 19:15
Restarting "SYSTEM"."SYS_EXPORT_SCHEMA_01": system/********
parfile=test_export.par 

При выполнении заданий Data Pump Import связанные с пространством проблемы чаще всего будут возникать из-за нехватки места в табличных пространствах, содержащих таблицы, в которые выполняется импорт данных, и тоже приводить к их приостановке. В таком случае можно будет добавить место в соответствующие табличные пространства и возобновить выполнение зависшего задания за счет подключения к нему командой ATTACH и затем выполнения для него команд START_JOB и CONTINUE_CLIENT подобно тому, как показывалось выше.


На заметку! Для того чтобы подключаться и работать с заданиями Data Pump, принадлежащими другим пользователям, потребуется либо быть администратором баз данных, либо обладать привилегиями EXP_FULL_DATABASE или IMP_FULL_DATABASE.


В таблице №1 ниже вкратце перечислены все интерактивные команды, которые поддерживает утилита Data Pump Export.

Команда Описание
ADD_FILE Позволяет добавлять файл дампа в набор файлов дампа.
CONTINUE_CLIENT Позволяет возвращаться в режим регистрации. Задание будет запускаться снова, если находилось в состоянии простоя.
EXIT_CLIENT Позволяет выйти из сеанса клиента и оставить задание выполняться.
HELP Позволяет получать краткие справочные сведения о применении интерактивных команд.
KILL_JOB Позволяет отсоединять и удалять задание.
PARALLEL Позволяет изменять количество активных рабочих процессов для текущего задания.
START_JOB Позволяет запускать или возобновлять выполнение текущего задания.
STATUS Позволяет указывать частоту, с которой должно проверяться состояние выполнения задания (в секундах). В случае использования значения по умолчанию (0) новая информация о состоянии будет отображаться сразу же, как будет становиться доступна.
STOP_JOB Позволяет аккуратно завершать выполнение задания и выходить из клиентского сеанса.

Совет. Команда STOP_JOB=IMMEDIATE позволяет немедленно завершать выполнение задания Data Pump.


О наиболее важных интерактивных параметрах Data Pump более подробно рассказывается в следующих подразделах. Для удобства они были поделены на три следующих категории: интерактивные параметры, касающиеся клиента; интерактивные параметры, касающиеся заданий; другие интерактивные параметры.

 

Интерактивные параметры, касающиеся клиента

Параметр CONTINUE_CLIENT приводит к выходу из интерактивного режима и возобновлению выполнения задания Data Pump Export. Клиентское соединение при этом остается нетронутым, и на экране снова начинают появляться сообщения, связанные с выполняемой операцией экспорта. Параметр EXIT_CLIENT, однако, приводит к завершению не только интерактивного, но и клиентского сеанса. В обоих случаях выполнение самого задания Data Pump Export продолжается без проблем.

 

Интерактивные параметры, касающиеся заданий

В любом интерактивном сеансе, открываемом с помощью команды ATTACH, можно использовать несколько параметров, касающихся заданий. В частности, для аккуратного завершения выполнения задания служит команда STOP_JOB, для немедленного завершения выполнения задания — команда STOP_JOB=IMMEDIATE, а для возобновления выполнения любого из остановленных подобных образом заданий — команда START_JOB.

При нежелании продолжать выполнение задания, к которому было установлено подключение с помощью команды ATTACH, можно завершать его с помощью параметра KILL_JOB. В отличие от EXIT_CLIENT, параметр KILL_JOB приводит к завершению и клиентского сеанса и самого задания.

В общем, интерактивные параметры, касающиеся заданий, работают следующим образом:

  • STOP_JOB останавливает выполняющиеся задания Data Pump;
  • START_JOB возобновляет выполнение остановленных заданий Data Pump;
  • KILL_JOB уничтожает как само задание Data Pump, так и сеанс клиента.

На заметку! Любое задание, выполнение которого было остановлено как из-за применения команды STOP_JOB, так и по причине сбоя в работе системе, можно запускать заново при условии наличия доступа к главной таблице и неповрежденного набора файлов дампа.


 

Другие интерактивные параметры

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

 

Примеры заданий Data Pump Export

Давайте рассмотрим несколько простых примеров спецификации заданий Data Pump Export, чтобы увидеть, как некоторые из описанных в этой статье концепций выглядят в действии. Первый пример демонстрирует создание файла дампа для экспорта всего лишь двух таблиц — EMPLOYEES и JOBS

$ expdp hr/hr TABLES=employees,jobs DUMPFILE=dpump_dir1:table.dmp NOLOGFILE=Y

В следующем примере показано, как использовать файл параметров, а также параметры CONTENT и EXCLUDE. Спецификация CONTENT=DATA_ONLY указывает, что требуется экспортировать только строки данных и исключать все определения объектов (метаданные). Параметр EXCLUDE требует, чтобы таблицы COUNTRIES, LOCATIONS и REGIONS не принимали участия в операции экспорта, а параметр QUERY — чтобы из таблицы EMPLOYEES экспортировались все данные, кроме тех, что относятся к department_id, равному 20. В целом содержимое файла параметров exp.par выглядит следующим образом:

DIRECTORY=dpump_dir1
DUMPFILE=dataonly.dmp
CONTENT=DATA_ONLY
EXCLUDE=TABLE:"IN ('COUNTRIES', 'LOCATIONS', 'REGIONS')"
QUERY=employees:"WHERE department_id !=20 ORDER BY employee_id"

Для выполнения файла параметров exp.par можно использовать следующую команду:

$ expdp hr/hr PARFILE=exp.par 

Следующий пример демонстрирует выполнение экспорта в режиме схемы. Параметр SCHEMA нигде не упоминается, потому Data Pump по умолчанию будет экспортировать именно схему (принадлежащую выполняющему экспорт пользователю). 

$ expdp hr/hr DUMPFILE=dpump_dir1:expschema.dmp
LOGFILE=dpump_dir1:expschema.log

На заметку! По умолчанию утилита Data Pump будет всегда выполнять экспорт в режиме схемы.


В следующем примере показано, как выполнить экспорт конкретных таблиц из конкретной схемы: 

$ expdp hr/hr TABLES=employees,jobs DUMPFILE=dpump_dir1:hrtable.dmp NOLOGFILE=Y

Ниже приведен интересный пример спецификации задания Data Pump Export, показывающий, как использовать параметры PARALLEL, FILESIZE и JOB_NAME, а также параметр DUMPFILE при наличии нескольких файлов дампа: 

$ expdp hr/hr FULL=Y DUMPFILE=dpump_dir1:full1%U.dmp, dpump_dir2:full2%U.dmp
FILESIZE=2G PARALLEL=3 LOGFILE=dpump_dir1:expfull.log JOB_NAME=expfull

Теперь, когда вы увидели, как работает утилита Data Pump Export, можно переходить к рассмотрению функциональных возможностей утилиты Data Pump Import.

 

Типы и режимы утилиты Data Pump Import

Как и задание Data Pump Export, задание Data Pump Import может выполняться в командной строке и с применением файла параметров. Возможность интерактивного доступа к Data Pump Import поддерживается, но отличается от той, что предлагалась в прежних утилитах импорта. В целом интерактивный доступ к Data Pump Import напоминает интерактивный доступ к Data Pump Export, в чем вы вскоре убедитесь.

Работать с Data Pump Import можно в тех же самых режимах, что и с Data Pump Export: в режиме таблиц, режиме схем, режиме табличных пространств и режиме импорта всей базы данных. Кроме того, можно использовать параметр TRANSPORTABLE_TABLESPACES для выполнения импорта метаданных, необходимых для реализации механизма переносимых табличных пространств.

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


На заметку! Привилегии IMPORT_FULL_DATABASE также нужны и тогда, когда должен быть выполнен импорт файла дампа, создававшегося с использованием привилегий EXPORT_FULL_DATABASE.


 

Параметры утилиты Data Pump Import

Как и в случае утилиты Data Pump Export, управление заданиями Data Pump Import осуществляется за счет использования при вызове утилиты impdp ряда параметров. Для удобства эти параметры были поделены на следующие категории:

  • Параметры, касающиеся файлов и каталогов.
  • Параметры фильтрации.
  • Параметры, касающиеся заданий.
  • Параметры, касающиеся режима импорта.
  • Параметры переопределения.
  • Параметр TRANSFORM.
  • Параметр NETWORK_LINK.
  • Параметры Flashback.

 

Параметры, касающиеся файлов и каталогов

Утилита Data Pump Import, как и Data Pump Export, поддерживает параметры PARFILE, DIRECTORY, DUMPFILE, LOGFILE и NOLOGFILE. Однако у нее также есть и один свой, уникальный параметр, касающийся файлов, и называется он SQLFILE.

Параметр SQLFILE похож на параметр INDEXFILE, который предлагался в прежней утилите импорта. При выполнении задания Data Pump Import иногда может возникать желание извлечь из экспортного файла дампа весь код DDL. Именно это и позволяет делать параметр SQLFILE, как показано в следующем примере: 

$ impdp system/sammyy1 DIRECTORY=dpump_dir1 DUMPFILE=scott.dmp
SQLFILE=dpump_dir2:finance.sql SCHEMAS=scott

В этом примере параметр SQLFILE указывает утилите Data Pump Import, что весь DDL-код, имеющий отношение к схеме пользователя scott, требуется записать в отдельный файл scott.dmp, расположенный в каталоге dpump_dir2. Разумеется, перед выполнением этой команды должен быть создан каталог dpump_dir2 с помощью команды CREATE DIRECTORY AS. Значение параметра DIRECTORY=dpump_dir1 указывает утилите Data Pump Import, где следует искать исходный файл дампа scott.dmp, из которого нужно извлекать DDL, имеющий отношение к схеме пользователя scott. Вдобавок этот пример показывает, как можно использовать несколько каталогов в одном задании Data Pump.

В листинге ниже приведен вывод, полученный после выполнения показанного выше задания Data Pump Import. 


[oracle@localhost ] $ impdp system/sammyy1 DIRECTORY=dpump_dir1
DUMPFILE=scott.dmp SQLFILE=dpump_dir2:finance.sql SCHEMAS=scott
Import: Release 11.1.0.6.0 - Production on Tuesday, 25 March, 2008 12:23:07
Copyright (c) 2003, 2007, Oracle. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 –
Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Master table "SYSTEM"."SYS_SQL_FILE_SCHEMA_01" successfully loaded/unloaded
Starting "SCOTT"."SYS_SQL_FILE_SCHEMA_01": system/******** dumpfile=scott.dmp
sqlfile=scott.sql schemas=scott
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/CONSTRAINT/REF_CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Job "SYSTEM"."SYS_SQL_FILE_SCHEMA_01" successfully completed at 18:42:20
[oracle@localhost] $

Важно запомнить, что параметр SQLFILE приводит лишь к извлечению SQL-кода DDL в указанный файл — импорта фактических данных при этом не происходит. С помощью этого параметра можно извлекать из экспортного файла дампа целый SQL-сценарий со всеми DDL-операторами. Просмотр DDL-операторов, извлеченных в указанный в SQLFILE файл, позволяет понять, к выполнению каких операций приведет задание Data Pump Import.

Просмотр файл finance.sql, например, позволит увидеть, что в нем содержатся не комментированные, готовые к использованию SQL DDL-операторы для воссоздания схемы пользователя scott. В листинге ниже показаны несколько первых строк того сценария, который был получен за счет использования параметра SQLFILE


-- CONNECT SYSTEM
-- new object type path is: SCHEMA_EXPORT/USER
CREATE USER "SCOTT" IDENTIFIED BY VALUES 'F894844C34402B67'
DEFAULT TABLESPACE "USERS"
TEMPORARY TABLESPACE "TEMP"
PASSWORD EXPIRE
ACCOUNT UNLOCK;
-- new object type path is: SCHEMA_EXPORT/SYSTEM_GRANT
GRANT UNLIMITED TABLESPACE TO "SCOTT";
-- new object type path is: SCHEMA_EXPORT/ROLE_GRANT
GRANT "CONNECT" TO "SCOTT";
GRANT "RESOURCE" TO "SCOTT";
-- new object type path is: SCHEMA_EXPORT/DEFAULT_ROLE
ALTER USER "SCOTT" DEFAULT ROLE ALL;
-- new object type path is: DATABASE_EXPORT/SCHEMA/PROCACT_SCHEMA
-- CONNECT SCOTT
BEGIN
sys.dbms_logrep_imp.instantiate_schema(schema_name=>'SCOTT',
export_db_name=>'SALES', inst_scn=>'643491');
COMMIT;
END;
/
new object type path is: SCHEMA_EXPORT/TABLE/TABLE
--CONNECT SYSTEM
CREATE TABLE "SCOTT"."DEPT"
( "DEPTNO" NUMBER(2,0),
"DNAME" VARCHAR2(14),
"LOC" VARCHAR2(13)
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "USERS" ;
. . .

Обратите внимание на то, что были получены SQL-операторы для воссоздания не только таблиц и индексов, но и всех объектов, функций и процедур в схеме пользователя scott.

Другим важным параметром Data Pump Import, касающимся файлов, является новый параметр REUSE_DATAFILES. Он указывает утилите Data Pump Import, следует ли использовать существующие файлы данных для создания табличных пространств во время импорта. В случае установки для него значения Y (REUSE_DATAFILES=Y) утилита Data Pump Import будет выполнять запись поверх существующих файлов данных.

 

Параметры фильтрации

Параметр CONTENT применяется в Data Pump Import, как и в Data Pump Export, для указания того, должны ли загружаться только строки (CONTENT=DATA_ONLY), строки и метаданные (CONTENT=ALL) либо только метаданные (CONTENT=METADATA_ONLY).

Параметры EXCLUDE и INCLUDE имеют в Data Pump Import точно такое же предназначение, как и в Data Pump Export, и являются взаимоисключающими, а в частности:

  • параметр INCLUDE используется для перечисления объектов, которые необходимо импортировать;
  • параметр EXCLUDE применяется для перечисления объектов, которые импортировать не требуется.

Ниже приведен простой пример использования параметра INCLUDE. В этом примере импорт ограничивается только объектами таблиц. В результате импортирована будет только таблица PERSONS.

INCLUDE=TABLE:"= 'persons'" 

Для импорта только тех таблиц, имя у которых начинается с букв PER, можно использовать конструкцию INCLUDE=TABLE:"LIKE 'PER%'". Вдобавок параметр INCLUDE можно применять и отрицательным образом, указывая то, что все объекты с определенным синтаксисом должны игнорироваться:

INCLUDE=TABLE:"NOT LIKE 'PER%'" 

Обратите внимание на то, что в случае установки для параметра CONTENT значения DATA_ONLY (CONTENT=DATA_ONLY) использовать во время импорта ни параметр EXCLUDE, ни параметр INCLUDE нельзя.

Кроме того, для фильтрации данных во время импорта можно применять параметр QUERY. (В прежних утилитах экспорта и импорта этот параметр можно было использовать только во время экспорта.) В частности, параметр QUERY можно применять для указания целой схемы или одной таблицы. В случае применения параметра QUERY во время импорта Data Pump будет использовать для получения доступа к данным не метод прямого доступа (Direct Path), а метод загрузки данных из внешних таблиц.

Параметр TABLE_EXISTS_ACTION позволяет указывать Data Pump Import, что следует делать в случае, если таблица уже существует. Для этого параметра можно устанавливать четыре разных значения:

  • SKIP (значение по умолчанию) — пропускать таблицу, если таковая уже существует;
  • APPEND — присоединять строки к таблице;
  • TRUNCATE — усекать таблицу и загружать данные и экспортного файла дампа;
  • REPLACE — удалять таблицу, если таковая существует, создавать ее заново и снова загружать в нее данные.

 

Параметры, касающиеся заданий

 Параметры JOB_NAME, STATUS и PARALLEL имеют в Data Pump Import то же самое предназначение, что и их аналоги в Data Pump Export. Главное помнить о том, что при наличии нескольких файлов дампа, их следует указывать либо явно, либо с использованием обозначения U%, как уже показывалось ранее при рассмотрении параметров Data Pump Export.

 

Параметры, касающиеся режима импортирования

Задания Data Pump Import, как и задания Data Pump Export, можно выполнять в нескольких различных режимах за счет применения таких параметров, как TABLE, SCHEMAS, TABLESPACES и FULL. При желании переносить табличные пространства между базами данных можно использовать параметр TRANSPORTABLE_TABLESPACES.

При выполнении операции по переносу табличных пространств в утилите Data Pump Import так же, как и в Data Pump Export, можно применять параметр TRANSPORT_FULL_CHECK, но только вместе с параметром NETWORK_LINK.

Параметр TRANSPORT_DATAFILES позволяет указывать во время выполнения операции по переносу табличных пространств список файлов данных, которые Data Pump Import следует импортировать в целевую базу данных. Сначала, однако, требуется копировать эти файлы из исходной системы на целевой сервер. Ниже приведен простой пример, показывающий, как работать с параметрами импорта, связанными с переносом табличных пространств:

$ impdp salapati/sammyy1 DIRECTORY=dpump_dir1 \
> NETWORK_LINK=source_database_link \
> TRANSPORT_TABLESPACES=users TRANSPORT_FULL_CHECK=Y \
> TRANSPORT_DATAFILES='/wkdir/data/tbs6.f'

 

Параметры переопределения

Параметры переопределения очевидным образом подчеркивают превосходство этой утилиты над прежней утилитой для импорта, расширяя способность Oracle переопределять объекты во время процесса импорта данных. Выглядят эти параметры так: REMAP_TABLES, REMAP_SCHEMA, REMAP_DATAFILE и REMAP_TABLESPACE. Хотя в прежних утилитах экспорта и импорта и существовала возможность переопределять схемы (за счет применения спецификации FROMUSER/TOUSER), переопределять файлы данных и табличные пространства было невозможно. Все доступные теперь параметры переопределения вкратце описываются в следующих разделах.

Параметр REMAP_TABLE

Параметр REMAP_TABLE позволяет переименовывать таблицу при выполнении операции импорта с использованием метода переноса табличных пространств. Помимо этого, его также можно применять и для предоставления своих собственных имен отдельным разделам поделенной таблицы, которая была экспортирована с использованием метода переноса табличных пространства, и тем самым предотвращать присвоение Oracle импортируемым разделам и подразделам имен по умолчанию. Ниже приведен пример, показывающий, как можно задавать параметр REMAP_TABLE для переименования таблицы: 

$ impdp hr/HR DIRECTORY=dpump_dir1 DUMPFILE=newdump.dmp –
TABLES=hr.employees REMAP_TABLE=hr.employees:emp

В этом примере параметр REMAP_TABLE указывает, что при выполнении операции импорта имя таблицы hr.employees должно быть изменено на hr.emp.

Параметр REMAP_SCHEMA

Параметр REMAP_SCHEMA позволяет перемещать объекты из одной схемы в другую. Задается этот параметр примерно так: 

$ impdp system/manager DUMPFILE=newdump.dmp REMAP_SCHEMA=hr:oe

В этом примере параметр REMAP_SCHEMA указывает, что при выполнении операции импорта требуется переместить все объекты из исходной схемы HR в целевую схему OE. Утилита Data Pump Import может даже создать схему OE, если таковой в целевой базе данных не существует. Конечно, при желании импортировать из схемы HR в схему OE только одну или более таблиц, это тоже можно сделать с помощью параметра TABLES.

Параметр REMAP_DATAFILE

При перемещении баз данных между двумя различными платформами, на каждой из которых используется свое соглашение по именованию файлов, параметр REMAP_DATAFILE приходится очень кстати, поскольку позволяет изменять формат именования файлов. Ниже приведен пример, показывающий, как с помощью этого параметра указать утилите Data Pump Import, что вместо формата файловой системы Windows требуется использовать формат файловой системы UNIX. После этого при обнаружении в экспортном файле дампа любой ссылки на файл с именем в формате файловой системы Windows, утилита Data Pump Import будет автоматически изменять имя файла в соответствии с форматом файловой системы UNIX. 

$ impdp hr/hr FULL=Y DIRECTORY=dpump_dir1 DUMPFILE=db_full.dmp \
REMAP_DATAFILE='DB1$:[HRDATA.PAYROLL]tbs6.f':'/db1/hrdata/payroll/tbs6.f'
Параметр REMAP_TABLESPACE

Иногда бывает нужно, чтобы табличное пространство, в которое выполняется импорт данных, отличалось от используемого в исходной базе данных. Параметр REMAP_TABLESPACE позволяет осуществлять во время импорта перемещение объектов из одного табличного пространства в другое, как показано в приведенном ниже примере. В этом примере он указывает утилите Data Pump Import, что требуется переместить все объекты из табличного пространства example_tbs в табличное пространство new_tbs

$ impdp hr/hr REMAP_TABLESPACE='example_tbs':'new_tbs' DIRECTORY=dpump_dir1 \
PARALLEL=2 JOB_NAME=TESTJOB_01 DUMPFILE=employees.dmp NOLOGFILE=Y
Параметр REMAP_DATA

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

Ниже приведен пример, показывающий, как именно можно задавать параметр REMAP_DATA во время импорта: 

$ impdp hr DIRECTORY=dpump_dir1 DUMPFILE=expschema.dmp
TABLES=hr.employees REMAP_DATA=hr.employees.first_name:hr.remap.plusx

В этом примере для переопределения значения столбца FIRST_NAME используется функция PLUSX из пакета REMAP.

Параметр TRANSPORTABLE

Параметр TRANSPORTABLE позволяет указывать базе данных, следует ли применять метод переноса табличных пространств при выполнении импорта в режиме таблиц. Он может принимать либо значение ALWAYS, либо значение NEVER, которое является значением по умолчанию.

Обратите внимание на то, что параметр TRANSPORTABLE может применяться только вместе с параметром NETWORK_LINK, как, например, показано ниже: 

$ impdp system TABLES=hr.sales TRANSPORTABLE=always
DIRECTORY=dpump_dir1 NETWORK_LINK=dbs1
PARTITION_OPTIONS=departition
TRANSPORT_DATAFILES=datafile_name

Если параметр TRANSPORTABLE не задан, во время импорта по умолчанию используется либо метод прямого доступа, либо метод загрузки данных из внешних таблиц.

Параметр DATA_OPTIONS

Параметр DATA_OPTIONS в Data Pump Import является аналогом параметра DATA_OPTIONS, который применяется в Data Pump Export. Во время импорта для этого параметра можно указывать только значение SKIP_CONSTRAINT_ERRORS (DATA_OPTIONS=SKIP_CONSTRAINT_ERRORS). Это значение позволяет операции импорта продолжаться даже в случае столкновения базы данных с неотложными нарушениями ограничений.

Параметр TRANSFORM

Предположим, что требуется импортировать таблицу из другой схемы или даже другой базы данных и не импортировать при этом другие атрибуты хранения объектов, т.е. необходимо просто перенести содержащиеся в таблице данные. Параметр TRANSFORM позволяет указать утилите Data Pump Import не импортировать определенные атрибуты хранения и атрибуты других видов. За счет применения параметра TRANSFORM можно исключать из таблицы или индекса конструкции STORAGE и TABLESPACE или только конструкции STORAGE.

При выполнении импорта с помощью Data Pump (или традиционной утилиты IMP) Oracle создает объекты с использованием DDL-операторов, которые находит в экспортных файлах дампа. Параметр TRANSFORM, по сути, указывает утилите Data Pump Import изменять приводящие к созданию объектов операторы DDL определенным образом. В целом синтаксис параметра TRANSFORM выглядит так: 

TRANSFORM = название_трансформации:значение[:тип_объекта]

Ниже приведено краткое описание того, что собой представляет каждый элемент.

  • Название_трансформации. Существуют всего четыре опции, которые могут указываться на месте этого элемента. Эти опции позволяют, соответственно, изменять четыре основных вида характеристик объекта.
  • SEGMENT ATTRIBUTES. Эта опция позволяет влиять на атрибуты сегмента, в число в которых входят физические атрибуты, атрибуты хранения, табличные пространства и журналы. Принуждать Data Pump Import включать все эти атрибуты можно, указав на месте название_трансформации этой опции со значением Y (SEGMENT_ATTRIBUTES=Y), которое является для этого параметра значением по умолчанию. В таком случае Data Pump Import будет включать все четыре атрибута сегмента вместе с их операторами DDL.
  • STORAGE. За счет указания на месте название_трансформации опции STORAGE со значением Y (STORAGE=Y), представляющее собой значение по умолчанию, можно получать лишь атрибуты хранения тех объектов, которые являются частью задания Data Pump Import.

OID. В случае указания на месте название_трансформации опции OID со значением Y (OID=Y), которое является для нее значением по умолчанию, объектным таблицам во время импорта будет присваиваться новый OID.

PCTSPACE. За счет указания на месте название_трансформации опции PCTSPACE с положительным числом в качестве значения можно увеличивать выделяемый под объекты и файлы данных объем пространства на соответствующее количество процентов.

Значение. На месте элемента значение в параметре TRANSFORM может указываться либо значение Y (да), либо значение N (нет). Как упоминалось выше, для первых трех опций, которые могут указываться на месте название_трансформации, по умолчанию устанавливается значение Y. Это означает, что по умолчанию Data Pump предусматривает выполнение импорта как атрибутов сегмента, так и атрибутов хранения объекта. В качестве альтернативного варианта, для этих опций можно устанавливать значение N и тем самым указывать Data Pump не импортировать исходные атрибуты сегмента и/или хранения. Что касается опции PCTSPACE, то для нее на месте элемента значение может задаваться только какое-то число.

Тип_объекта. На месте элемента тип_объекта можно указывать утилите Data Pump Import, объекты какого типа необходимо трансформировать. Это могут быть таблицы, индексы, табличные пространства, типы, кластеры, ограничения и прочие объекты, в зависимости от опций, указываемых на месте название_трансформации. В случае не указания типа подлежащих трансформации объектов при использовании опций SEGMENT_ATTRIBUTES и STORAGE, эти опции будут применяться ко всем таблицам и индексам, которые являются частью операции импорта.

Ниже приведен пример применения параметра TRANSFORM

$ impdp hr/hr TABLES=hr.employees \
DIRECTORY=dpump_dir1 DUMPFILE=hr_emp.dmp \
TRANSFORM=SEGMENT_ATTRIBUTES:N:table

В этом примере для SEGMENT_ATTRIBUTES установлено значение N, а в качестве типа объекта указана таблица. В такой спецификации параметр TRANSFORM указывает утилите Data Pump Import не импортировать существующие атрибуты хранения ни для каких таблиц.

Параметр NETWORK_LINK

За счет применения параметра NETWORK_LINK можно выполнять операции импорта по сети без использования файлов дампа. Этот параметр позволяет утилите Data Pump Import подключаться прямо к исходной базе данных и переносить из нее данные в целевую базу. Ниже приведен пример: 

$ impdp hr/hr TABLES=employees DIRECTORY=dpump_dir1 SCHEMAS=SCOTT \
EXCLUDE=CONSTRAINT NETWORK_LINK=finance

В этом примере параметр NETWORK_LINK указывает утилите Data Pump Import, что требуется использовать связь базы данных finance. Подразумевается, что эта связь является действительной, и была создана заранее с помощью команды CREATE DATABASE LINK. База данных, указанная в параметре NETWORK_LINK, выполняет в данном задании Data Pump Import роль источника. В результате при выполнении этого задания утилита Data Pump импортирует таблицу EMPLOYEES из удаленной базы данных finance в локальный экземпляр. На более детальном уровне во время сетевых операций импорта происходит следующее: API-интерфейс метаданных (Metada API) выполняется в отношении удаленного экземпляра, извлекает определения объектов и воссоздает необходимые объекты в локальном экземпляре, а затем осуществляет выборку данных из таблиц удаленной базы данных и загружает их в локальный экземпляр SQL-оператором INSERT INTO...SELECT, как показано ниже: 

SQL> INSERT INTO employees(emp_name,emp_id). . .SELECT (emp_name,emp_id) FROM
finance

Обратите внимание на то, что файл дампа участия в сетевых операциях импорта не принимает, потому что Data Pump импортирует таблицу из исходной базы данных в целевую напрямую.

Ниже приведен пример использования параметра NETWORK_LINK для выполнения прямого импорта данных из удаленной базы данных в локальную.

1. Создайте канал связи с удаленной базой данных: 

SQL> CREATE DATABASE LINK remote
CONNECT TO system IDENTIFIED BY sammyy1
USING 'remote.world';

2. Создайте объект каталога Data Pump, если такового еще не существует:

$ export DATA_PUMP_DIR=remote_dir1 

3. Назначьте этот новый каталог каталогом по умолчанию, экспортировав значение каталога: 

SQL> CREATE DIRECTORY remote_dir1 AS '/u01/app/oracle/dp_dir';

4. Выполните импорт данных по сети из удаленной базы данных remote с помощью следующей команды Data Pump Import: 

[local] $ impdp system/sammyy1 SCHEMAS=scott NETWORK_LINK=remote

В листинге ниже показан вывод, полученный в результате выполнения описанного в этом примере задания Data Pump Import с параметром NETWORK_LINK


Import: Release 11.1.0.6.0 - Production on Tuesday, 25 March, 2008 12:00:32
Copyright (c) 2003, 2007, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.0.0 - Beta
With the Partitioning, OLAP and Data Mining options
FLASHBACK automatically enabled to preserve database integrity.
Starting "SYSTEM"."SYS_IMPORT_SCHEMA_01": system/******** schemas=SCOTT
NETWORK_LINK=remote
Estimate in progress using BLOCKS method . . .
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 32 KB
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/TABLESPACE_QUOTA
Processing object type SCHEMA_EXPORT/TABLE/TABLE
. . imported "SCOTT"."TEST" 96 rows
Job "SYSTEM"."SYS_IMPORT_SCHEMA_01" successfully completed at 06:59
[local] $

Параметры Flashback

Параметр FLASHBACK_TIME позволяет выполнять импорт данных в том состоянии, в котором они находились на определенный момент в прошлом. Oracle отыскивает SCN-номер, который находится ближе всего к указанному в FLASHBACK_TIME времени, и запускает утилиту Flashback с использованием этого SCN. Например, взгляните на следующий оператор импорта: 

$ impdp system/manager FLASHBACK_TIME="TO_TIMESTAMP('01-06-2005 07:00:00;',
'DD-MM-YYYY HH24:MI:SS')"

Обратите внимание на то, что параметр FLASHBACK_TIME делает то же самое, что в прежней утилите для импорта делал параметр CONSISTENT.

Параметр FLASHBACK_SCN похож на параметр FLASHBACK_TIME и просто позволяет указывать требуемый SCN-номер напрямую.

Какой бы параметр не использовался — FLASHBACK_TIME или FLASHBACK_SCN — ключевую роль в определении времени ретроспективного отката, с которым будут согласовываться импортируемые данные, все равно играет SCN-номер.

 

Параметры выполнения импорта в интерактивном режиме

Все параметры работы в интерактивном режиме, которые приводились в таблице №1 для экспорта, действительны и для импорта, за исключением разве что ADD_FILE. Этот параметр действителен только для заданий Data Pump Export. Применение комбинации клавиш <Ctrl+C>, как и в случае заданий Data Pump Export, будет приводить к приостановке выполнения задании Data Pump Import и появлению на экране приглашения import>, позволяющего вводить любые необходимые интерактивные команды.

 

Мониторинг выполнения заданий Data Pump

Наиболее важными для мониторинга за выполнения заданий Data Pump являются два новых представления — DBA_DATA PUMP_JOBS и DBA_DATA PUMP_SESSIONS. Помимо них для получения информации о сеансах также можно использовать представление V$SESSION_LONGOPS и старый режим ожидания V$SESSION. В большинстве случаев для получения необходимой информации о ходе выполнения заданий может оказаться удобным объединение двух или более этих представлений. Давайте более подробно рассмотрим те из них, которые являются наиболее важными и способны помогать управлять выполнением заданий Data Pump.

 

Просмотр заданий Data Pump

Представление DBA_DATAPUMP_JOBS позволяет получать сводную информацию обо всех выполняющихся в текущий момент заданиях Data Pump. Вот пример:

SQL> SELECT * FROM dba_datapump_jobs;
OWNER_NAME   JOB_NAME    OPERATION  JOB_MODE  STATE      DEGREE  ATTACHED_SESSIONS
-----------  ----------  ---------  --------  ---------  ------  -----------------
SYSTEM       SYS_EXPORT  EXPORT     FULL      EXECUTING  1       1
             _FULL_01
SQL>

Поскольку в динамическом представлении DBA_DATA PUMP_JOBS отображаются только активные задания, запрос к этому представлению приведет к отображению значения такого важного столбца, как JOB_NAME для любого задания, которое выполняется прямо сейчас. При желании подключиться к какому-то заданию прямо по ходу его выполнения обязательно нужно знать имя задания. Поскольку имя главной таблицы совпадает со значением JOB_NAME, это значит, что с помощью данного представления можно также определять и имя главной таблицы.

Столбец JOB_MODE может принимать значения FULL, TABLE, SCHEMA или TABLESPACE, отражающие режим, в котором в текущий момент выполняется задание Data Pump Export или Data Pump Import.

Столбец STATE может принимать значения UNDEFINED, DEFINING, EXECUTING и NOT RUNNING, отражающие этап, на котором находилось выполнение задания Data Pump Export или Data Pump Import на момент выполнения запроса. Конечно, когда нет активных в текущий момент заданий, представление DBA_DATAPUMP_JOBS не возвращает никаких строк.

 

Просмотр сеансов Data Pump

Представление DBA_DATAPUMP_SESSIONS позволяет выяснять, какие пользовательские сеансы в текущий момент подключены к заданию Data Pump Export или Data Pump Import. Для получения полезной информации о пользовательских сеансах, которые в текущий момент подключены к заданиям, может быть удобно объединять значение столбца SADDR из этого представления со значением столбца SADDR из представления V$SESSION, как показано в следующем запросе: 

SQL> SELECT sid, serial#
FROM v$session s, dba_datapump_sessions d
WHERE s.saddr = d.saddr;

 

Просмотр информации о ходе выполнения заданий Data Pump

Динамическое представление V$SESSION_LONGOPS не является новым в Oracle Database 11g. Оно впервые появилось еще в версии Oracle9i и позволяло осуществлять мониторинг за ходом длительных сеансов.

Для наблюдения за ходом выполнения заданий Data Pump Export и Data Pump Import в нем теперь можно использовать четыре следующих столбца:

  • TOTALWORK — показывает, сколько всего мегабайтов было насчитано для выполнения данного задания;
  • SOFA — показывает, сколько пока было передано мегабайтов во время выполнения данного задания;
  • UNITS — представляет мегабайты;
  • OPNAME — показывает, как выглядит имя задания Data Pump.

Ниже приведен типичный сценарий, который можно использовать для получения информации о том, сколько времени осталось до завершения выполнения задания Data Pump: 

SQL> SELECT opname, target_desc, sofar, totalwork
2 FROM v$session_longops;
OPNAME                  TARGET_DES   SOFAR     TOTALWORK
----------------------- ---------- ---------- ------------
SYS_EXPORT_FULL_01        EXPORT      244         244
SYS_EXPORT_FULL_02        EXPORT       55         244
SQL>

В этом примере видно, что выполнение задания в первой строке уже завершилось, поскольку его значение в столбцах TOTALWORK и SOFAR выглядит одинаково. Во второй строке значение в столбце SOFAR составляет только 55 Мбайт, а в столбце TOTAL — 244 Мбайт; это свидетельствует о том, что второе задание Data Pump Export пока выполнено только на четверть.

 

Использование API- интерфейса Data Pump

Для написания PL/SQL-сценариев по импорту и экспорту данных можно применять API-интерфейс Data Pump, которые находится в пакете DBMS_DATAPUMP и позволяет решать следующие задачи.

  • Запуск задания.
  • Наблюдение за ходом выполнения задания.
  • Отсоединение от задания.
  • Останов задания.
  • Запуск задания заново.

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


DECLARE
d1 NUMBER; -- Обработчик задания Data Pump
BEGIN
-- Создание задания Data Pump для экспорта.
d1 := DBMS_DATAPUMP.OPEN('EXPORT','SCHEMA',NULL,'TEST1','LATEST');
-- Указание одного файла дампа для задания.
DBMS_DATAPUMP.ADD_FILE(d1,'test1.dmp','DMPDIR');
-- Указание схемы.
DBMS_DATAPUMP.METADATA_FILTER(d1,'SCHEMA_EXPR','IN (''OE'')');
-- Запуск экспортного задания.
DBMS_DATAPUMP.START_JOB(d1);
-- Оповещение о завершении выполнения задания и отсоединение от него.
dbms_output.put_line('Job has completed');
dbms_datapump.detach(d1);
END;
/

В листинге ниже показано, как импортировать созданный только что файл дампа. Еще здесь применяется параметр REMAP_SCHEMA для перемещения объектов из схемы OE в схему HR пользователя. 


DECLARE
d1 NUMBER; -- Обработчик задания Data Pump
BEGIN
-- Создание задания Data Pump для выполнения "полного" импорта данных.
d1 := DBMS_DATAPUMP.OPEN('IMPORT','FULL',NULL,'TEST2');
-- Указание файла дампа для задания.
DBMS_DATAPUMP.ADD_FILE(d1,'example1.dmp','DMPDIR');
-- Указание, что объекты схемы должны быть перемещены из схемы oe в схему hr.
DBMS_DATAPUMP.METADATA_REMAP(d1,'REMAP_SCHEMA','oe','hr');
-- Запуск задания.
DBMS_DATAPUMP.START_JOB(h1);
-- Оповещение о завершении выполнения задания и аккуратное отсоединение от него.
dbms_output.put_line('Job has completed');
dbms_datapump.detach(h1);
END;
/

Вас заинтересует / Intresting for you:

Oracle и непроцедурный доступ ...
Oracle и непроцедурный доступ ... 8511 просмотров Antoni Tue, 21 Nov 2017, 13:32:50
Создание базы данных Oracle
Создание базы данных Oracle 34271 просмотров Александров Попков Wed, 14 Nov 2018, 12:44:39
Видеокурс по администрированию...
Видеокурс по администрированию... 10719 просмотров Илья Дергунов Mon, 14 May 2018, 05:08:47
Работа с запросами Approximate...
Работа с запросами Approximate... 2271 просмотров Андрей Васенин Mon, 29 Oct 2018, 06:40:46
Войдите чтобы комментировать

ildergun аватар
ildergun ответил в теме #8746 6 года 5 мес. назад
Data Pump предоставляет намного больше возможностей, чем традиционные утилиты импорта/экспорта Oracle (imp, exp)