expdp system@db02_11g version=10.0.2.4 schemas=user_01 directory=EXPBKP dumpfile=dump.dmp logfile=dump_exp.log
где:
impdp system@db02_10g directory=DP dumpfile=dump.dmp logfile=dump_imp.log remap_tablespace=TEMP0:TEMP
где:
Возникла на днях проблема. Надо перенести несколько схем с одного сервера на другой, но на исходном сервере нет места для дампа. В качестве решения выбрал импорт данных через database link средствами DataPump. Моя задача разложилась на следующие шаги:
select 'create tablespace '
|| tablespace_name
|| ' datafile '''
|| regexp_replace(file_name,'ONE','TWO')
|| ''' size 500M autoextend on next 500M;'
from dba_data_files
where tablespace_name in (
select default_tablespace ts from dba_users where username in ('SCHEMA1','SCHEMA2','SCHEMA2')
union
select tablespace_name ts from dba_ts_quotas where username in ('SCHEMA1','SCHEMA2','SCHEMA2'))
/
На обоих серверах одинаковый ORACLE_HOME и данный запрос из
D:\ORACLE\PRODUCT\10G\ORADATA\ONE
делал
D:\ORACLE\PRODUCT\10G\ORADATA\TWO
Получалось что-то в виде:
create tablespace TS1 datafile 'D:\ORACLE\PRODUCT\10G\ORADATA\TWO\TS1.DBF' size 500M autoextend on next 500M;
create database link dlsrc connect to system identified by <PASSWORD> using '<SRCTNS>';
create directory ddump as 'D:\dump';
impdp system@<DSTTNS> directory=DDUMP schemas=SCHEMA1,SCHEMA2,SCHEMA2 network_link=dlsrc
При выполнение импорта от имени system, пользователей можно не создавать — они создадутся автоматически.
Как всегда, у Oracle есть ложка дёгтя в бочке мёда, а именно: при переносе таким образом данных может всплыть ошибка, приведённая ниже.
ORA-31679: Table data object "SCHEMA1"."TABLE_NAME" has long columns, and longs can not be loaded/unloaded using a network link
Это вынуждает нас не пользоваться database link? Возможно. Но я перенёс только указанную таблицу тем же DataPump, но без database link. Для этого места оказалось достаточно.
Бывает, что необходимо выяснить, какие схемы включены в дамп-файл созданный DataPump'ом. В *nix-системах это можно сделать так:
strings DUMP.DMP | grep OWNER_NAME | sed -e 's/.*<OWNER_NAME>\([^<]*\)<\/OWNER_NAME>.*/\1/g' | sort -u
результат выглядит примерно так:
SCHEMA1 MDSYS SYSTEM
На дампах большого размера возможно выполняться будет долго.