Янв 282013
 

Утилита DataPump работает немного не так, как старинные exp/imp. В отличие от них, она не просто открывает сессию, по которой выкачивает/заливает данные, но создаёт несколько серверных процессов (они называются DataPump jobs, но путать их с заданиями, запускаемыми с помошью пакета dbms_job не стоит, тут другой механизм). Кстати, именно поэтому если убить процесс expdp/impdp командой kill -9, то сессии DataPump всё равно останутся в базе и могут помешать повторному запуску утилиты.
Иногда бывает необходимо убедиться, что сессии не подвисли и процесс перекачки данных идёт нормально. Раньше можно было просто поискать в v$session записи с полем program, содержащим строку 'imp%' или 'exp%' соответственно, но теперь всё немного хитрее. Для мониторинга сессий DataPump есть представление dba_datapump_sessions.

Вот так можно определить, на каком событии висят сессии DataPump и кто их блокирует: Continue reading »

Фев 282011
 

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

Для этого создадим файл build_parfile.sh с таким содержимым: Continue reading »

Янв 252011
 

Утилита DataPump появилась начиная с 10-й версии Oracle как замена устаревшим утилитам exp и imp в более ранних версиях. Она имеет больше возможностей, чем классические exp и imp, автоматически настраивает некоторые параметры, такие как размер буфера приёма/передачи, число потоков, etc. Одной из самых интересных возможностей DataPump является осуществление "перекачки" данных из одной базы данных в другую используя Database Link, что заметно упрощает импорт, если целевая и исходная базы находятся в одной сети.
Итак, задача: на исходной БД есть пользователь cube в табличном пространстве cube. Нужно перенести все объекты в новую базу в схему cube2 табличном пространстве cube2. Оба пользователя, исходный и целевой, не привилегированны.
Решение: Continue reading »

Дек 302010
 

Известно, что с помощью утилит exp/imp нельзя залить дамп в ту же самую БД, из-за дублирования OID'ов. Кроме того, если на целевой базе имя табличного пространства не совпадает с именем ТП на исходной, то схему импортировать не получится.
Написал скрипт, который убирает storage clause, tablespace clause, и OID для объектов в файле дампа, созданного утилитой exp:
Continue reading »