Expdp和Impdp的使用是Oracle 10g加入的新的功能,相对于以前的Exp和IMp来说,他有以下的优势。
1. 效率更高。
2. 只支持server端,通过directory限制,存储在server端,从而保证速度。
3. 更好的更方便的支持tablespace的transport
4. 通过job的形式执行dump工作,这个不见得一定是个优点,但是至少是个新点。
下面来看看expdp和impdp的过程
主要看tablespace transport
1. 首先对表空间检查。表必须是只我子包含,当搬移表空间是,如果在两个表空间之间存在关联关系,则必须同时搬移这两个表空间。 通过执行包DBMS_TTS.TRANSPORT_SET_CHECK可以完成表空间集合是否为自包含的检测。执行完该过程后,系统将违反子包含表空间集合规则的信息写入到临时表transport_set_violations。
SQL> exec sys.dbms_tts.transport_set_check(’rmantbs’);
PL/SQL procedure successfully completed.
SQL> select * from sys.transport_set_violations;
no rows selected.
2. readonly tablespace导出
SQL> alter tablespace testts1 read only;
Tablespace altered.
要先建立directory
SQL>create or replace directory data_pump_dir as ‘d:/orabackup/dump’;
授权directory
SQL>grant read, write on directory data_pump_dir to test1;
使用数据泵导出工具生成要搬移的表空间的集合。
$expdp system/systempwd dumpfile=testts1.dmp transport_tablespaces=TESTTS1 directory= data_pump_dir ;
注意:由于expdp会通过job的形式生成一个job来完成导入,如果当前用户的默认表空间是这个表空间的话,刚才我们已经read only了,所以这里会出现一个错
ORA-31626: job does not exist
ORA-31633: unable to create master table “RMAN.SYS_EXPORT_TRANSPORTABLE_05″
ORA-06512: at “SYS.DBMS_SYS_ERROR”, line 95
ORA-06512: at “SYS.KUPV$FT”, line 863
ORA-01647: tablespace ‘TESTTS1′ is read only, cannot allocate space in it
用其他用户导入。当然和exp一样,这个用户需要EXP_FULL_DATABASE的权限。
导入就逆过程了,如下
$impdp test1/test1@test dumpfile=transport.dmp directory=data_pump_dir dumpfile=testts1.dmp
expdp也同样支持database级别,schema/user级别和表级别
如下
schemas=(user1, user2)
tables=(table1, table2)
includes=table:/”in(’table1′,’table2′)/”
===============================================================
Inthirties关注Oracle数据库 维护,优化,安全,备份,恢复,迁移,故障处理