Использование expdp / impdp в Oracle

На прошедшей недели стояла задача перенести базы данных с Oracle 11.1 на Oracle 11.2, при этом общий объем баз данных порядка 26 Gb (не много, но и не мало). Т.к. от других рабочих процессов отрываться было нельзя (а если все базы сворачивать локально старыми утилитами exp / imp было бы невозможно работать) решили изучить и воспользоваться новыми утилитами expdp / impdp.

Главная особенность данных утилит, что они не нагружают локальную станцию, а запускают job на сервере, и используют непосредственно ресурсы сервера БД. Информации по их использованию в интернете на русском языке очень мало, но в документации Oracle (как обычно) информации предостаточно. Вот пара ссылок на их официальное описание:
Описание всех параметров данных утилит лучше изучить в предыдущих ссылках.

А теперь поделюсь собственным опытом по их использованию.
Главный, на мой взгляд, недостаток данных утилит, это необходимость прав доступа на папки указанной в параметре DIRECTORY=data_pump_dir (по умолчанию параметр задается именно data_pump_dir). Также при переносе баз с сервера на другой сервер, приходится дампы руками копировать с одного сервера на другой.

Вот общий вид командной строки сворачивания БД, которую я использовал для выполнения собственной задачи:
expdp %1/%2@%3 SCHEMAS=%4 DIRECTORY=data_pump_dir DUMPFILE=%4.expdp LOGFILE=%4_exp.log EXCLUDE=GRANT COMPRESSION=NONE FULL=N JOB_NAME=backup
Теперь более подробно разберем входные параметры приведенной строки:
  1. %1 - имя пользователя Oracle, под которым будет производиться сворачивание БД
  2. %2 - пароль пользователя
  3. %3 - TNS имя сервера
  4. %4 - сворачиваемая БД
Т.к. мне необходимо было переносить данных с одного сервера на другой, то у меня стоит EXCLUDE=GRANT
COMPRESSION=NONE поставил по привычке использования exp/imp.
JOB_NAME=backup данный параметр поставил по многочисленным советам в интернете. Оказывается данные утилиты не всегда правильно определяют job, под которым производить процессы сворачивания/разворачивания БД.
Остальное я думаю понятно интуитивно.

А теперь приведем командую строку для разворачивания БД:
impdp %1/%2@%3 DUMPFILE=%4.expdp SCHEMAS=%4 REMAP_SCHEMA=%4:%5 LOGFILE=%4_imp.log DIRECTORY=data_pump_dir JOB_NAME=backup;
Входные параметры:

  1. %1 - имя пользователя Oracle, под которым будет разворачиваться БД
  2. %2 - пароль пользователя
  3. %3 - имя сервера
  4. %4 - имя дампа. В моем случае данный параметр совпадает с именем БД, которую мы свернули.
  5. %5 - имя новой БД
В данном импорте у меня имя свернутой БД не совпадает с именнем БД, в которую разворачиваем. Если этого не требуется, то достаточно удалить часть строки REMAP_SCHEMA=%4:%5. Остальные параметры, описаны выше.

Хотелось бы отметить несколько нюансов:
  1. Если в expdp указано EXCLUDE=GRANT(при чем не обязательное GRANT), то если вы тоже самое укажете в строке для impdp, то вы получите ошибку.
  2. Для пользователя под которым вы собираетесь сворачивать/разворачивать БД должны быть права на папку указанную в параметре DIRECTORY. Об этом и как использовать директорию не по умолчанию написано тут Wiki.oracle

Комментариев нет:

Отправить комментарий