当前位置:文档之家› 数据泵详解及案例

数据泵详解及案例

数据泵详解及案例北京神州泰岳软件股份有限公司2011年5月12日文档属性文档变更文档送呈目录1前言 (5)2准备工作 (6)3导出常见需求案例 (7)3.1全库导出 (7)3.1.1全库导出最简写法 (7)3.1.2全库并行导出到多个文件 (7)3.1.3全库导出到多个路径 (7)3.2按schema导出 (8)3.3按表导出 (8)3.3.1导出普通表 (8)3.3.2导出表分区 (8)3.4导出表空间 (9)3.5部分导出(EXCLUDE与INCLUDE) (9)3.5.1屏蔽部分schema (9)3.5.2屏蔽部分对象 (9)3.5.3屏蔽统计信息 (10)3.5.4INCLUDE对象 (10)3.6带查询条件导出(QUERY) (10)3.7估算导出数据大小 (10)3.8只导出元数据或数据 (11)3.9其他可选参数 (11)3.9.1JOB_NAME参数 (11)3.9.2LOGFILE参数 (11)3.9.3VERSION参数 (11)3.9.4STA TUS参数 (12)3.9.5PARFILE参数 (12)3.9.6SAMPLE参数 (12)4导入常见需求案例 (13)4.1导入到不同SCHEMA中 (13)4.2导入到不同表空间中 (13)4.3将元数据以sql形式写入文本文件 (14)4.4导入时使用新存储属性 (14)4.5导入表存在时的处理 (14)5管理维护任务 (15)6重建数据泵工具 (17)1 前言Oracle 10g引入了最新的数据泵(Data Dump)技术,使DBA或开发人员可以将数据库元数据(对象定义)和数据快速移动到另一个oracle数据库中。

数据泵导出导入(EXPDP和IMPDP)的作用:1)实现逻辑备份和逻辑恢复。

2)在数据库用户之间移动对象。

3)在数据库之间移动对象4)实现表空间搬移。

数据泵导出导入与传统导出导入的区别:在10g之前,传统的导出和导入分别使用EXP 工具和IMP工具,从10g开始,不仅保留了原有的EXP和IMP工具,还提供了数据泵导出导入工具EXPDP和IMPDP.使用EXPDP和IMPDP时应该注意的事项;EXP和IMP是客户端工具程序,它们既可以在可以客户端使用,也可以在服务端使用。

EXPDP和IMPDP是服务端的工具程序,他们只运行在ORACLE服务端,不受连接会话是否断开的影响。

数据泵与传统导入导出产生的dump文件互不兼容,即使用EXPDP导出的文件,无法使用IMP导入,而以EXP导出的文件,无法用IMPDP导入。

在实际工作中,值得注意的是源库字符集尽量与目标库字符集相同。

本文档适用于Oracle10.2版本的数据泵。

2 准备工作使用数据泵除了要求数据库用户有足够的系统权限,还需要建立directory与操作系统目录想对应,并授予用户对该对象的读写权限。

执行数据泵程序的数据库用户需要有CREATE SESSION, CREATE TABLE, EXP_FULL_DATABASE, IMP_FULL_DATABASE等几个系统权限。

通过如下命令在数据库中建立directory并与操作系统的目录相对应:CREATE DIRECTORY 自定义名称 AS '系统目录的全路径';GRANT read,write ON DIRECTORY 自定义名称TO 用户;举例如下:CONNECT system/managerCREATE DIRECTORY my_dir AS '/backup';CREATE ROLE expdp_role;GRANT create session, create table TO expdp_role;GRANT read, write ON DIRECTORY my_dir TO expdp_role;GRANT expdp_role TO scott;ALTER USER scott DEFAULT ROLE all;ALTER USER scott QUOTA unlimited ON users;相关视图:dba_sys_privs,dba_role_privs,dba_directories3 导出常见需求案例其中重要参数用红字标出3.1 全库导出3.1.1 全库导出最简写法使用FULL 参数导出全库数据expdp scott/tiger DIRECTORY=data_pump_dir DUMPFILE=demo01.dmp FULL=yDIRECOTRY 是数据库中directory 的名称DUMPFILE 是导出文件名FULL 代表全库导出3.1.2 全库并行导出到多个文件当导出单个文件过大时,可使用多个文件,并配合FILESIZE 参数限制单个文件大小 expdp scott/tiger DIRECTORY=data_pump_dir DUMPFILE=demo01.dmp,demo02.dmp,d emo03.dmp FULL=y FILESIZE=20g PARALLEL=2FILESIZE 是每个导出文件的最大尺寸,可接受单位为b,k,m,g ,默认是b--字节PARALLEL 是并行度,默认为1,当数据库为企业版并且CPU 数目为多个时可设置超过1,与文件个数配合可提高导出速度。

该参数可在导出过程中修改3.1.3 全库导出到多个路径。

如果文件个数无法预估,可使用DUMPFILE=%U ,将自动生成导出文件,如:expdp scott/tiger DIRECTORY=data_pump_dir DUMPFILE=demo%U FULL=y FILESI ZE=20g PARALLEL=2有时路径所在文件系统的容量不足以存放导出文件,可以将导出文件分散在多个路径所在文件系统下,如:expdp scott/tiger DUMPFILE=data_pump_dir:demo01.dmp,other_dir:demo02.dmp FULL =y FILESIZE=20g PARALLEL=2注意该语句没有使用DIRECTORY参数,而是在DUMPFILE中设置other_dir为另一个directory,同样需要给用户授予读写权限3.2 按schema导出如果数据库只有少数schema(可简单理解为用户的所有对象),可以使用SCHEMAS 参数进行导出,以提高导出速度并减少问题几率,如:expdp scott/tiger DIRECTORY=data_pump_dir DUMPFILE=demo01.dmp SCHEMAS=s cott,testSCHEMAS为需要导出的用户,用逗号隔开如果导出数据较多,需要分割文件或分散路径,参照3.1全库导出3.3 按表导出3.3.1 导出普通表如果只需要导出个别表,则使用TABLES参数,如:expdp scott/tiger DIRECTORY=data_pump_dir DUMPFILE=demo01.dmp TABLES=test, dept注意导出的默认是当前用户的表,TABLES、SCHEMAS、FULL不可同时使用,如果想导出其他用户的表,需要在表前加用户的名字,如:expdp scott/tiger DIRECTORY=data_pump_dir DUMPFILE=demo01.dmp TABLES=sc ott.test3.3.2 导出表分区如果想导出表的某个分区的数据,使用如下命令:expdp scott/tiger DIRECTORY=data_pump_dir DUMPFILE=demo01.dmp TABLES=test: p2*******3.4 导出表空间expdp scott/tiger DUMPFILE=data_pump_dir:demo01.dmp TABLESPACES=users3.5 部分导出(EXCLUDE与INCLUDE)exclude参数和include参数分别用来屏蔽不需要的数据和导出需要的数据。

当使用exclude屏蔽某对象时,依赖这个对象的其他对象也一并被屏蔽,比如exclude一张表,则其索引和触发器都被屏蔽。

exclude和include参数互斥,无法一起使用,但其语法相同。

3.5.1 屏蔽部分schema例如想要屏蔽scott用户的所有数据,使用如下命令:expdp scott/tiger FULL=y DIRECTORY=data_pump_dir DUMPFILE=demo01.dmp EX CLUDE=SCHEMA:\"like \'SCOTT\'\"exclude参数中的“\”为转义符,在unix系统中使用,是为了正确识别引号。

而windows 中不需要。

“like”也可替换成“=”。

如果屏蔽多个schema,使用如下命令expdp scott/tiger FULL=y DIRECTORY=data_pump_dir DUMPFILE=demo01.dmp EX CLUDE=SCHEMA:\"IN\(\'SCOTT\',\'TKF\'\)\"由上可知,除了逗号,其他符号都需要由转义符“\”来识别。

3.5.2 屏蔽部分对象可以屏蔽的主要对象包括:table,function,package,function,procedure,sequence,grant,view, index,db_link,constraint,ref_constraint,job,statistics等,语法如下:expdp scott/tiger DIRECTORY=data_pump_dir DUMPFILE=demo01.dmp SCHEMAS=s cott EXCLUDE=procedure,function,table:\"IN \(\'TSUMSCHEMA\',\'TSUMALGORITHM \'\)\"其中对象如果名字类似,可以使用通配符“%”,如下:expdp scott/tiger DIRECTORY=data_pump_dir DUMPFILE=demo01.dmp SCHEMAS=s cott EXCLUDE=table:\"like \'TE%\'\"3.5.3 屏蔽统计信息统计信息包含表的平均行长,行数,字段直方图信息等,也是可以用exclude屏蔽的对象。

之所以把它单拿出来,是因为数据泵有时会因为统计信息的问题导致导出时间过长,甚至失败。

相关主题