一:数据泵提供的主要特性:
1. 支持并行处理导入、导出任务
2. 支持暂停和重启动导入、导出任务
3. 支持通过Database Link的方式导出或导入远端数据库中的对象
4. 支持在导入时通过Remap_schema、Remap_tablespace,重定向用户和表空间
5. EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用。
6. IMP只适用于EXP导出的文件,不适用于EXPDP导出文件;IMPDP只适用于EXPDP导出的文件,而不适用于EXP导出文件。
二:Directory对象
Directory指向操作系统中的一个路径。每个Directory都包含 Read,Write两个权限,可以通过Grant命令授权给指定的用户或角色。拥有读写权限的用户就可以读写该Directory对象指定的操作系统路 径下的文件。
5.1) 创建逻辑目录,该命令不会在操作系统创建真正的目录.
create directory weisi_dump as '/opt/soft/dump';
5.2) 查看管理理员目录(同时查看操作系统是否存在,因为Oracle并不关心该目录是否存在,如果不存在,则出错)
select * from dba_directories;
5.3) 给用户赋予在指定目录的操作权限.
grant read,write on directory weisi_dump to weisi;
三:导入、导出
expdp -help
3.1) 全库模式
导入或者导出整个数据库,对应impdp/expdp命令中的full参数,只有拥有dba或者 exp_full_database和imp_full_database权限的用户才能执行。
expdp \"/ as sysdba\" directory=weisi_dump full=y dumpfile=weisi_1_f.dump,weisi_2_f.dump logfile=weisi_f.log parallel=2
impdp \"/ as sysdba\" directory=weisi_dump dumpfile=weisi_1_f.dump,weisi_2_f.dump logfile=weisi_impdp.log parallel=2
监控进度:
select t.sofar/t.totalwork, t.* from v$session_longops t where t.message like '%SYS_EXPORT%';
3.2) Schema模式
导出或导入Schema下的自有对象,对应impdp/expdp命令中的Schema参数,这是默认的操作模式。 如果拥有dba或者 exp_full_database和
imp_full_database权限的用户执行的话,就可以导出或导入多个Schema中的对象。
expdp \"/ as sysdba\" directory=weisi_dump schemas=weisi,WUZHENXING dumpfile=weisi_1_s.dump,weisi_2_s.dump logfile=weisi_f.log parallel=2
select t.sofar/t.totalwork, t.* from v$session_longops t where t.message like '%SYS_EXPORT%';
SQL> drop user wuzhenxing cascade;
impdp \"/ as sysdba\" directory=weisi_dump dumpfile=weisi_1_f.dump,weisi_2_f.dump schemas=wuzhenxing logfile=weisi_impdp.log parallel=2
3.3) 表模式
导出指定的表或者表分区以及依赖该表的对象(如该表的索引)
expdp \"/ as sysdba\" directory=weisi_dump tables=weisi.big_rman_t dumpfile=weisi_1_t.dump,weisi_2_t.dump logfile=weisi_f.log parallel=2
select t.sofar/t.totalwork, t.* from v$session_longops t where t.message like '%SYS_EXPORT%';
impdp \"/ as sysdba\" directory=weisi_dump dumpfile=weisi_1_f.dump,weisi_2_f.dump tables=wuzhenxing.BIG_RMAN_T logfile=weisi_impdp.log parallel=2
3.4) 表空间模式
导出指定的表空间中的内容。对应impdp/expdp中的Tablespaces参数,这种模式类似于表模式和 Schema模式的补充。
expdp \"/ as sysdba\" directory=weisi_dump tablespaces=users dumpfile=weisi_1_tbs.dump,weisi_2_tbs.dump logfile=weisi_f.log parallel=2
impdp \"/ as sysdba\" directory=weisi_dump tablespaces=users dumpfile=weisi_1_tbs.dump,weisi_2_tbs.dump logfile=weisi_f.log parallel=2
3.5) 传输表空间模式
对应impdp/expdp中的Transport_tablespaces参数。这种模式与前面几种模式最显著的区 别是生成的Dump文件中并不包含具 体的逻辑数据,
而只导出相关对象的元数据(即对象的定义,可以理解成表的创建语句),逻辑数据仍然在表空间的数据文件中,
导出时需要将元数据和数据文件同 时复制到目标端服务器。这种导出方式效率很高,
时间开销主要是花在复制数据文件产生的I/O上。
expdp执行传输表空间模式的导出,用户必须 拥有 exp_full_database角色或者DBA角色。
而通过传输表空间模式导入时,用户必须拥有imp_full_database角色或者DBA角 色。
四:过滤数据
过滤数据主要依赖于Query和Sample两个参数。
4.1) Query
expdp \"/ as sysdba\" directory=weisi_dump tables=weisi.big_rman_t dumpfile=weisi_1_t.dump,weisi_2_t.dump logfile=weisi_f.log parallel=2 query="'where object_id < 2000'"
4.2) Sample
该参数用来指定导出数据的百分比,可指定的值的范围从0.000001到99.999999,指定该参数以后,EXPDP导出将自动控制导出的记录量,如导出big_rman_t表中50%的记录。
expdp \"/ as sysdba\" directory=weisi_dump tables=weisi.big_rman_t dumpfile=weisi_1_t.dump,weisi_2_t.dump logfile=weisi_f.log parallel=2 Sample=50
过滤对象
过滤对象主要依赖于Include和Exclude两个参数。这两个参数作用正好相反,在这两个参数中,可以指定你知道的任何对象类型(如:Package、Procedure、Table等等)或者对象名称(支持通配符)
4.3) Exclude
指定不被包含的对象类型或者对象名称。指定了该参数以后,指定的对象类型对应的所有对象都不会被导入或导出。 如果被排除的对象有依赖的对象,那么其依赖的 对象也不会被导入或导出。如:通过Exclude参数指定不导出表对象的话,不仅指定的表不会被导出,连这些表关联的Index、Check等都不会被导出。
expdp \"/ as sysdba\" directory=weisi_dump schemas=weisi,wuzhenxing dumpfile=weisi_1_s.dump,weisi_2_s.dump logfile=weisi_f.log parallel=2 exclude=table:\"in\(\'BIG_RMAN_T\'\)\"
expdp \"/ as sysdba\" directory=weisi_dump schemas=weisi,wuzhenxing dumpfile=weisi_1_s.dump,weisi_2_s.dump logfile=weisi_f.log parallel=2
4.4) Include
与Exclude正好相反。指定包含的对象类型或者对象名称。object_type子句用于指定对象的类型,如table,sequence,view,procedure,package等等,导入的时候用的比较多。
expdp
impdp
impdp \"/ as sysdba\" directory=weisi_dump schemas=weisi dumpfile=weisi_1_s.dump,weisi_2_s.dump logfile=weisi_impdp.log include=table:\" in \(\'BIG_RMAN_T\'\)\" parallel=2
常用的过滤SQL表达式
EXCLUDE=SEQUENCE,VIEW --过滤所有的SEQUENCE,VIEW
EXCLUDE=TABLE:"IN ('EMP','DEPT')" --过滤表对象EMP,DEPT
EXCLUDE=SEQUENCE,VIEW,TABLE:"IN ('EMP','DEPT')" --过滤所有的SEQUENCE,VIEW以及表对象EMP,DEPT
EXCLUDE=INDEX:"= 'INDX_NAME'" --过滤指定的索引对象INDX_NAME
INCLUDE=PROCEDURE:"LIKE 'PROC_U%'" --包含以PROC_U开头的所有存储过程(_ 符号代表任意单个字符)
INCLUDE=TABLE:"> 'E' " --包含大于字符E的所有表对象
其它常用操作符 NOT IN, NOT LIKE, <, != 等等
五:高级过滤
在导出/导入的时候,我们常常有这样的需求,只想导出/导入表结构,或者只想导出/导入数据。
使用 Content参数。该参数有三个属性
1) ALL : 导出/导入对象定义和数据,该参数的默认值就是ALL
2) DATA_ONLY : 只导出/导入数据。
3) METADATA_ONLY : 只导出/导入对象定义。
过滤已经存在的数据
导入的表对象在目标库中已经存在,就有可能造成数据被重复导入。数据泵提供了一个新的参数
Table_exists_action,有以下几个参数值:
1) SKIP : 跳过该表,继续处理下一个对象。该参数默认就是SKIP。值得注意的是,如果你同时指定了CONTENT参数为Data_only的话,SKIP参数无 效,默认为APPEND。
2) APPEND : 向现有的表中添加数据。
3) TRUNCATE : TRUNCATE当前表,然后再添加记录。使用这个参数需要谨慎,除非确认当前表中的数据确实无用。否则可能造成数据丢失。
4) REPLACE : 删除并重建表对象,然后再向其中添加数据。值得注意的是,如果同时指定了CONTENT参数为Data_only的话,REPLACE参数无效。
重定义表的Schema或表空间
1) REMAP_SCHEMA : 重定义对象所属Schema该参数的作用类似IMP中的Fromuser+Touser,支持多个Schema的转换,语法如下:
REMAP_SCHEMA=Source_schema:Target_schema
select * from dba_objects t where t.owner='WEISI';
select * from dba_objects t where t.owner='WUZHENXING';
expdp \"/ as sysdba\" directory=weisi_dump schemas=weisi dumpfile=weisi_1_s.dump,weisi_2_s.dump logfile=weisi_f.log parallel=2
impdp \"/ as sysdba\" directory=weisi_dump dumpfile=weisi_1_s.dump,weisi_2_s.dump logfile=weisi_impdp.log parallel=2 REMAP_SCHEMA=weisi:wuzhenxing
select * from dba_objects t where t.owner='WUZHENXING';
2) REMAP_TABLESPACE : 重定义对象所在的表空间。
该参数用来重映射导入对象存储的表空间,支持同时对多个表空间进行 转换,相互间用逗号分割。语法如下:
EMAP_TABLESPACE=Source_tablespace:Target_tablespace[,Source_tablespace:Target_tablespace]
六:优化导入/导出效率
6.1) 对于导出的parallel
数据大小/parallel=filesize
6.2) 对于导入的parallel
不影响数据库的前提下, parallel越大越好