数据泵

一:数据泵提供的主要特性:

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 SCHEMAS=scott EXCLUDE=SEQUENCE,TABLE:"IN ('EMP','DEPT')"

impdp SCHEMAS=scott INCLUDE=PACKAGE,FUNCTION,PROCEDURE,TABLE:"='EMP'"

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越大越好

你可能感兴趣的:(数据泵)