На прошедшей недели стояла задача перенести базы данных с Oracle 11.1 на Oracle 11.2, при этом общий объем баз данных порядка 26 Gb (не много, но и не мало). Т.к. от других рабочих процессов отрываться было нельзя (а если все базы сворачивать локально старыми утилитами exp / imp было бы невозможно работать) решили изучить и воспользоваться новыми утилитами expdp / impdp.
Главная особенность данных утилит, что они не нагружают локальную станцию, а запускают job на сервере, и используют непосредственно ресурсы сервера БД. Информации по их использованию в интернете на русском языке очень мало, но в документации Oracle (как обычно) информации предостаточно. Вот пара ссылок на их официальное описание:
А теперь приведем командую строку для разворачивания БД:
impdp %1/%2@%3 DUMPFILE=%4.expdp SCHEMAS=%4 REMAP_SCHEMA=%4:%5 LOGFILE=%4_imp.log DIRECTORY=data_pump_dir JOB_NAME=backup;
Входные параметры:
Главная особенность данных утилит, что они не нагружают локальную станцию, а запускают 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 - имя пользователя Oracle, под которым будет производиться сворачивание БД
- %2 - пароль пользователя
- %3 - TNS имя сервера
- %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 - имя пользователя Oracle, под которым будет разворачиваться БД
- %2 - пароль пользователя
- %3 - имя сервера
- %4 - имя дампа. В моем случае данный параметр совпадает с именем БД, которую мы свернули.
- %5 - имя новой БД
В данном импорте у меня имя свернутой БД не совпадает с именнем БД, в которую разворачиваем. Если этого не требуется, то достаточно удалить часть строки REMAP_SCHEMA=%4:%5. Остальные параметры, описаны выше.
Хотелось бы отметить несколько нюансов:
- Если в expdp указано EXCLUDE=GRANT(при чем не обязательное GRANT), то если вы тоже самое укажете в строке для impdp, то вы получите ошибку.
- Для пользователя под которым вы собираетесь сворачивать/разворачивать БД должны быть права на папку указанную в параметре DIRECTORY. Об этом и как использовать директорию не по умолчанию написано тут Wiki.oracle
Комментариев нет:
Отправить комментарий