Управление и манипулирование данными
Учебный центр информационных технологий «Информатика
Содержание лекции №6:
-
Экспорт и импорт данных
-
Инструментальные средства экспорта и импорта
-
Использование утилиты Datapump
-
Использование утилиты SQL*loader
-
Внешние таблицы
Недостатки традиционного экспорта/импорта (утилиты exp/imp)
-
Не масштабируется для больших БД
-
Медленная выгрузка и загрузка данных, не распараллеливается
-
Трудности в мониторинге процессов
-
экспорта/импорта
-
Практически невозможно встраивать в приложения (нет API)
-
Тяжело сопровождать
Что такое ORACLE Datapump
-
Технология экспорта/импорта данных и метаданных
-
СУБД Oracle Database 10g/11g
-
Замена традиционных утилит экспорта/импорта (exp и imp)
-
Новая серверная инфраструктура и утилиты (expdp и impdp)
-
Имеется документированный API для разработчиков
-
Много новых возможностей по сравнению с утилитами
-
exp и imp
-
Утилиты exp/imp оставлены в целях совместимости
Утилиты Oracle Datapump
-
expdp – для экспорта, impdp – для импорта
-
Расположены в $ORACLE_HOME/bin
-
Большинство параметров аналогичны параметрам в exp/imp
-
Формат dmp-файлов не совместим с форматом exp/imp !
-
Совместимость формата Datapump для всех версий СУБД начиная с 10.1 (10.2 и 12.1)
Архитектура Oracle Datapump
-
Инфраструктура для поддержки “тонкого клиента”
-
Экспорт/импорт происходит на сервере
-
dmp-файл формируется на файловой системе сервера
-
Клиент только управляет процессами экспорта/импорта
-
Поддержка параллельности
Поддержка параллельности
-
Есть только в Oracle Enterprise Edition
-
Поддерживается и для выгрузки, и для
-
загрузки
-
Динамический уровень параллелизма
-
Действует как на уровне одной таблицы/разделов, так и на уровне нескольких таблиц
Архитектура Oracle Datapump
EXPDP – Клиентский интерфейс к утилите Data Pump Export.
IMPDP –Клиентский интерфейс к утилите Data Pump Import.
Grid Control Interface – WEB интерфейс предоставляющий доступ к DBMS_DATA_PUMP PL/SQL package.
Custom Interface – Позволяет перемещать сложные модели данных.
Возможности Oracle Datapump
-
Рестарт и остановка экспорта/импорта на произвольной
-
точке:
-
Master table;
-
По команде или по ошибке;
-
Старт с предыдущей точки останов;
-
Асинхронный запуск;
-
Гибкий выбор объектов.
-
Трансформация DDL при импорте:
-
Замена имен схемы, файлов данных, табличных пространств;
-
Включать/не включать параметры
-
хранения (storage clause);
-
Генерация нового OID для объектных типов.
Возможности Oracle Datapump
-
Предварительная оценка размера dmp-файла
-
Детальный мониторинг с любого места % выполнения
-
Детальный лог
-
Интерфейс в OEM
-
Сжатие (только метаданные)
Экспорт/импорт по сети
-
Data Pump предоставляет возможность загрузки одной БД из другой (сетевой импорт) и выгрузки данных из удалённой БД (сетевой экспорт). И в том, и в другом случае используются связи БД.
-
Преимущества:
-
Импорт по сети -Из одной БД в другую на “лету”: без промежуточного dmp-файла
-
Экспорт по сети из БД в режиме “только для чтения”
DB2
DB1
dblink
Экспорт/импорт по сети
-
При сетевом импорте вызовы DBMS_Metadata отсылаются на удалённый узел, а результаты их выполнения возвращаются на локальный узел, где и используются для создания объектов. Данные перегружаются операторами INSERT…SELECT с хинтами для прямого доступа. Таким образом, сетевой импорт фактически объединяет операции экспорта и импорта в одну без промежуточного создания дамп-файлов.
-
Задание Data Pump не может быть запущено на БД, открытой в режиме “только-для-чтения”, так как в такой БД нет возможности создать и вести мастер-таблицу, AQ-очереди и т.п. Однако сетевой экспорт позволяет решить эту проблему. При сетевом экспорте все процессы и мастер-таблица создаются в локальной БД, а чтение данных выполняется из удалённой БД. Перемещение данных при сетевом экспорте выполняется только через внешние таблицы.
-
Режим сетевой операции задаётся параметром командной строки NETWORK_LINK или в вызове API open.
Необходимые привилегии
-
Без роли EXP_FULL_DATABASE/IMP_FULL_DATABASE можно экспортировать/импортировать только объекты собственной схемы и выполнять мониторинг своих заданий.
-
Пользователи, имеющие роли EXP_FULL_DATABASE и IMP_FULL_DATABASE, могут подсоединяться и управлять выполнением заданий других пользователей, экспортировать/импортировать объекты из других схем и объекты, не принадлежащие схемам (сами определения схем, табличные пространства, системные привилегии, планы ресурсов и т.п.).
Режимы экспорта/импорта
-
Экспорт и импорт Data Pump могут выполняться в одном из следующих режимов:
-
FULL – вся БД (при импорте – всё содержимое набора дамп-файлов)
-
SCHEMAS – указанные схемы и все объекты в них, включая определения самих схем
-
TABLES – указанные таблицы (секции) и все зависимые от них объекты (индексы, триггеры, ограничения целостности и т.д.)
-
TABLESPACES – таблицы, любая часть которых содержится в указанных табличных пространствах, и все зависимые от них объекты
-
TRANSPORTABLE_TABLESPACES – перемещение табличных пространств.
Использование Oracle Datapump Экспорт
-
Создаем директорию в СУБД для dmp-файлов
-
SQL> CREATE DIRECTORY dump_dir AS ‘/backup/oradata’;
-
Выдаем привилегии на директорию
-
SQL> GRANT READ,WRITE ON DIRECTORY dump_dir TO scott;
-
Выполняем экспорт
-
C:\app>EXPDP scott/tiger@mytestdb TABLES=employees DUMPFILE=dump_dir:employees.dmp NOLOGFILE=y
Oracle Datapump API
-
Позволяет встраивать экспорт/импорт прямо в
-
приложения
-
Нет необходимости разрабатывать собственные механизмы экспорта/импорта
-
Полный контроль над процессами экспорта/импорта
-
Возможно копирование dmp-файла с сервера на клиент, или c клиента на сервер (как BFILE blob) через OCI,ODP.NET, JDBC
Oracle Datapump API PL/SQL-пакет DBMS_DATAPUMP
-
Представлено в виде встроенного пакета
-
DBMS_DATAPUMP
-
Позволяет сделать экспорт/импорт прямо из
-
приложения
-
Экспорт/импорт возможен как в синхронном, так и в асинхронном режиме
-
Возможности по контролю над статусом процессов
-
экспорта/импорта:
-
Процент завершения;
-
Число полученных байт;
-
Состояние задания;
-
… … … …
Пример экспорта
-- определяем задание на экспорт
v_xHandle := dbms_datapump.open(operation => 'EXPORT',
job_mode => 'SCHEMA',
job_name => ‘MY_EXPORT’);
-- указываем dmp-файл
dbms_datapump.add_file(handle => v_xHandle,
filename => ‘scott.dmp’,
directory => ‘dump_dir’,
Filetype =>
dbms_datapump.KU$_FILE_TYPE_DUMP_FILE);
-- указываем log-файл
dbms_datapump.add_file(handle => v_xHandle,
filename => ‘scott_dmp.log’,
directory => ‘dump_dir’,
filetype =>
dbms_datapump.KU$_FILE_TYPE_LOG_FILE);
-- запускаем задание
dbms_datapump.start_job(v_xHandle);
-- уничтожаем задание
dbms_datapump.detach(v_xHandle);
Пример импорта
-- определяем задание на импорт
v_xHandle := dbms_datapump.open(operation => 'IMPORT',
job_mode => 'FULL',
job_name => ‘MY_IMPORT');
-- указываем dmp-файл
dbms_datapump.add_file(handle => v_xHandle,
filename => ‘scott.dmp’,
directory => ‘dump_dir’);
-- импортируем данные в другое табличное пространство
dbms_datapump.metadata_remap(handle => v_xHandle,
name => 'REMAP_TABLESPACE',
old_value => ‘USERS',
value => ‘SCOTT_DATA');
-- запускаем задание
dbms_datapump.start_job(v_xHandle);
-- уничтожаем задание
dbms_datapump.detach(v_xHandle);
Контроль выполнения экспорта/импорта
declare
v_xJobState varchar2(32);
v_xJobStatus ku$_JobStatus;
v_xStatus ku$_Status;
begin
dbms_datapump.get_status(v_xHandle,
dbms_datapump.ku$_status_job_status,
-1,
v_xJobState,
v_xStatus);
v_xJobStatus := v_xStatus.job_status;
dbms_output.put_line(‘Status => ’ || v_xJobState);
dbms_output.put_line(‘Done % => ’ || v_xJobStatus.percent_done);
End;
Детальный выбор данных
-
Data Pump позволяет установить фильтры и на выгружаемые/загружаемые данные. При этом будет выполняться экспорт/импорт только части данных.
-
Фильтр данных устанавливается в виде SQL-фразы. SQL-фраза – это обычно условие WHERE, но можно использовать, например, и ORDER BY. Использование ORDER BY при экспорте позволяет получить отсортированный дамп-файл и затем импортировать данные в порядке сортировки.
-
Для установки фильтров данных используется параметр командной строки