http://blog.itpub.net/28869493/viewspace-1094164/
DataPump 反映了整个导出/导入过程的完全革新。不使用常见的 SQL 命令,而是应用专用 API(direct path api etc) 来以更快得多的速度加载和卸载数据。
expdp 和 impdp
Oracle10g引入了最新的数据泵(DataDump)技术,使DBA或者开发人员可以将数据库元数据(对象定义)和数据快速移动到另一个oracle数据库中。
数据泵导入导出与传统导入导出的区别
在10G之前,传统的导入导出使用imp\exp工具,从10G开始,不仅保留了原先的exp\imp工具,还提供了数据泵导入导出工具expdp\impdp.
使用expdp\impdp应该注意的事项有:
imp\exp是客户端的工具程序,它们可以在客户端使用,也可以在服务器端使用。
expdp\impdp是服务端的工具程序,它们只能在Oracle服务端使用,不能在客户端使用。
I MP只适用于EXP导出文件,不适用于EXPDP导出文件;
IMPDP只适用于EXPDP导出文件,而不适用于EXP导出文件。
------------------------------------------------------------------------------------
调用expdp
使用EXPDP工具时,其转储文件只能被存放在DIRECTORY对象对应的OS目录中,而不能直接指定转储文件所在的OS目录。因此,使用EXPDP工具时,必须首先建立DIRECTORY对象,并且需要为数据库用户授予使用DIRECTORY对象权限。
创建逻辑目录,该命令不会在操作系统创建真正的目录,最好以system等管理员创建。
createdirectory dump_dir as 'd:\dump';
grantread,write on directory dump_dir to 某个用户;
查看管理理员目录:select * fromdba_directories;
1.FILESIZE 指定导出文件的最大尺寸,默认为0(表示文件尺寸没有限制)
filesize的作用是为了防止有的os不支持2G以上容量的文件,而且大文件的I/O性能不好
2.INCLUDE 指定导出时要包含的对象类型及相关对象
3.EXCLUDE 指定执行操作时释放要排除对象类型或相关对象
4.CONTENT 指定要导出的内容形式,默认为ALL
CONTENT=ALL 将导出对象定义和所有数据
CONTENT= DATA_ONLY 只导出对象的数据
CONTENT= METADATA_ONLY 只导出对象的定义
2.PARFILE 指定导出参数文件的名称
举例说明:
XXX.par
directory=dump_dir
dumpfile=dump.dmp
exclude=table:"like't%'"
logfile=expdp.log
exp parfile=d:\test.par
>>>test.par的内容
a)scott用户连接导出自己的所有对象
userid=scott/tiger------连接的用户scott
file=d:\back.dmp------导出的文件的名字
b)用system用户连接来导出scott下的所有对象
userid=system/manager
file=d:\back.dmp
owner=(scott)-------导出scott用户的所有对象
c)用system用户连接导出scott和test下的所有对象
userid=system/manager
file=d:\back.dmp
owner=(scott,test)
d)用system用户连接导出scott下的emp,dept表、test用户下的student表
userid=system/manager
file=d:\back.dmp
tables=(scott.emp,scott.dept,test.student)
e)导出整个数据库(备份整个数据库)--------必须用超级用户 system ,sys
userid=system/manager
file=d:\back.dmp
full=y
以下是比较全的一个导出整个数据库的参数文件
userid=system/manager
file=d:\back.dmp
buffer=1024000---------缓冲
rows=y----------是否导出记录
compress=y---------extent是否压缩
grants=y----------grant语句是否导出
indexes=y----------导出索引
full=y----------全库导出
feedback=3----------显示导出进度每3行
f)导出表scott.dept中部门编号是40的记录
userid=system/manager
file=d:\back.dmp
tables=(scott.emp)
query="wheredeptno=10" -----条件导出
g)导出表scott.emp中的记录
userid=system/manager
file=d:\back.dmp
tables=(scott.emp)
feedback=3---------每3行记录显示一个点进度
*******************************************************************************************
使用exp或expdp的PARFILE参数避免QUERY内容的繁琐转义问题
使用exp或者expdp工具的parfile参数可以有效地避免query参数书写时在不同操作系统平台的特殊字符进行转意的发生。尽量减少出错的几率,节省备份任务的完成时间。
*******************************************************************************************
包括:DIRECTORY, DUMPIFLE, FILESIZE, PARFILE, LOGIFLE, NOLOGIFLE 和COMPRESSION。
DIRECTORY参数用法:
--直接使用DIRECTORY参数,如
expdpsusan/susan directory=data_dump_dir1 dumpfile=susan01.dmp
--DIRECTORY:FILE表示法,如
expdpsusan/susan dumpfile=data_pump_dir1:test1.dmp,data_pump_dir2:test2.dmp;
或
expdpsusan/susan dumpfile=data_pump_dir1:test1.dmp,data_pump_dir2:test2.dmplogfile=data_pump_dir1:test1.log
--DATA_PUMP_DIR环境变量:
exportDATA_PUMP_DIR=DATA_PUMP_DIR1 --这里我名字必须大写,就奇怪了,小写还不行。
expdpsusan/susan dumpfile=susan.dmp
DIRECTORY的优先次序:文件有关的参数(logfile,dumpfile),这种情况下目录对象与文件名用冒号(:)分开
>
指定的DIRECTORY参数
>
DATA_DUMP_DIR环境变量
>
默认的基于服务器的目录对象DATA_DUMP_DIR
DUMPFILE参数的用法:
代替exp的file参数,可以用%U变量扩展成多个文件名,用','号也可以提供多个文件。
FILESIZE参数的用法:
指定转储文件的尺寸,默认以字节为单位,如转储文件到达此限制,作业将停止
PARFILE参数的用法:
即参数文件来代替命令行来直接输入
LOGFILE和NOLOGFILE
不指定logfile会自动创建一个名为export.log的日志文件,用nologfile可以禁止日志产生。
COMMPRESSION参数:
压缩与否,值为meteDATA_ONLY或NONE,没有办法来指定压缩导出数据本身
包括:FULL, SCHEMAS, TABLES, TABLESPACE, TRANSPORT_TABLESPACE和 TRANSPORT_FULL_CHECK
其它参数都好理解,TRANSPORT_FULL_CHECK参数是当导出作业时将检查数据的相关性,如值为Y,检查不通过时导出也失败。
CONTENT:有三个值:
ALL, DATA_ONLY和 meteDATA_ONLY
EXCLUDE和INCLUDE:此两参数互斥,使用格式为EXCLUDE/INCLUDE=object_type[:name_clause],如exclude=TABLE:"LIKE 'EMP%'"或直接exclude=index
expdp susan/susan dumpfile=su.dmpexclude=SCHEMA:"='SAN'" --注意双引号要用斜杠转义
QUERY:如QUERY=OE.ORDER:"WHERE ORDER_ID> 1000000"
SAMPLE:允许指定范围从0.000001到100的一个百分数,格式为[[schema_name.]table_name]sample_percent
ESTIMATE: 值可为BLOCKS或STATISTICS
BLOCKS 是指根据块的空间估算其导出作类的空间需求。
STATISTICS 是根据每个表计算过的统计数据来估算空间需求,当表刚分析过后,用此参数才会较准。
ESTIMATE_ONLY: 值为Y或N,使用此参数可以先估算导出作业将需要的空间,而不启动导出作业。
NETWORK_LINK:可以从服务器中启动一个导出作业,将远程数据库的数据导出到你启动数据泵取导出作业的转储文件中。
ENCRYPTION_PASSWORD:对转储的文件进行加密
JOB_NAME: 给导出作业提供一个明确的名字,否则oracle会分配一个默认名字
STATUS: 如运行长时间的导出作业,此参数可以按照所指定的时间间隔提供更新的状态。单位是秒,如果想每分钟显示导出状态就用 status=60
FLASHBACK_SCN,FLASHBACK_TIME
PARALLEL: 使用多线程
ATTACH: 将你的数据泵取客户机会话加入到一个运行的作业中,并使你进行交互方式。此参数只能与用户名/密码组合一起使用。
8.交互方式下的导出命令
ADD_FILE: 给转储文件集合增加一个转储文件
CONTINUE_CLIENT: 如果作业暂停的话重新启动
EXIT_CLIETN: 退出客户机会话并恢复作业运行
HELP: 帮助命令
KILL_JOB: 释放并删除作业
PARALLEL: 改变当前作业的活动工进程的数量
START_JOB: 启动或重新恢复当前的作业
STATUS: 设置作业监控的频率(以秒为单位)
STOP_JOB: 关闭作业的执行
包括:DIRECTORY, DUMPIFLE, PARFILE, LOGIFLE, NOLOGIFLE和EXPDP相同,另有一个SQLFILE,此参数类似于旧的IMP的INDEXFILE参数,用在希望从转储文件中提取DDL。
如:impdp susan/susandirectory=data_pump_dir2 dumpfile=test2.dmp sqlfile=data_pump_dir1:test2.sqlschemas=susan 就是指将属于 susan模式的所有DDL写入位于data_pump_dir1的test2.sql文件中,当然在data_pump_dir2中必须有test2.dmp的转储文件。
另一个重要的与文件有关的参数是REUSE_DATAFILES,此参数告诉数据泵取在导入过程中是否应该使用已有的数据文件来创建表空间,如果指定为Y,则数据泵取导入程序将改写已有的数据文件。
INCLUDE, EXCLUDE的用法与 EXPDP相同
注意,如果使用CONTENT=DATA_ONLY时,则在导入过程中不用使用EXCLUDE和INCLUDE参数。IMPDP可以使用QUERY参数在导入中过滤数据(以前只有在EXP中过滤数据,IMP不行).
可以使用TABLE_EXISTS_ACTINS参数告诉ORACLE当表已经存在时做什么,提供4个不同的值:
--SKIP(默认),跳过
--APPEND,将值追加到表中
--TRUNCATE,已truncate再重新装载新值
--REPLACE,重新创建此表,并重新装载
JOB_NAME, STATUS, PARALLEL参数与EXPDP相同
FULL, SCHEMAS, TABLES, TABLESPACE, TRANSPORT_TABLESPACE 和TRANSPORT_FULL_CHECK的用法和 EXPDP差不多如使用NETWORK_LINK参数,TRANSPORT_FULL_CHECK只适合于表空间的传送。
REMAP_SCHEMA, REMAP_DATAFILE, REMAP_TABLESPACE,REMAP_TABLES
尽管在exp/imp中有重新映射的能力(FROMUSER/TOUSER),但是 不能重新映射数据文件和表空间
如:impdp system/managerdumpfile=newdump.dmp remap_schema=hre
语法格式:REMAP_TABLE=[schema.]old_tablename[.partition]:new_tablename
在hr 模式中根据employees 创建如下一张表。
SQL>create table emp as select * fromemployees where 1=2;
执行导入操作,tables 中指定了employees,因为dumpfile table.dmp
中除了employees 表中的数据以外,还有其他表的数据。关键是remap_table
参数的使用把employees表中的数据从映射到emp 表,并且我们还使用了
conntent=data_only 参数,因为emp表已经存在,我们需要导入的只是数据。
TRANSFORM,此参数的语法:
TRANSFORM= transform_name:value[bject_type]
其中transform_name 有四个选项:segment attributes,storage,oid,pctspace
--segmentattributes: 段属性包括物理属性、存储属性、表空间和日志。
--storage: 可以使用storage=y(默认)说明只取对象的存储属性作为导入作业的一部分。
--oid: 如果指定oid=Y(默认),则在导入过程中将分配一个新的oid给对象表。
--pctspace: 通过提供一个正数作为该转换的值,可以增加对象的分配尺寸,并且数据文件尺寸等于pctspace的值(按百分比)
value:transform_name的值,transform_name为segment attributes,storage,oid时值可为Y/N,pctspace为数值.object_type的值可以表、索引、表空间、类型、集群、约束等对象。
一个例子:
impdphr/hr tables=hr.employees directory=dpump_dir1 dumpfile=hr_emp.dmptransform=segment_attributes:N:table
表示在导入时不导入任何表的已有存储属性
NETWORK_LINK,可以通过网络执行导入而不使用转储文件。
impdphr/hr tables=employees directory=dpump+dir1 schemas=scott exclude=constraintnetwork_link=finance@prod1
FLASHBACK_TIME,FLASHBACK_SCN
可以使用DBA_DATAPUBMP_JOBS和DBA_DATAPUMP_SESSIONS视图来显示数据泵取作业的信息。
select* from DBA_DATAPUBMP_JOBS;
selectsid,serial# from v$session s,dba_datapump_sessions d where s.saddr=d.saddr;
另也可以通过v$session_longops视图来监控长期运行的会话。
http://blog.csdn.net/tegwy/article/details/8831409
该选项用于将源数据文件名转变为目标数据文件名,在不同平台之间搬移表空间时需要该选项.
REMAP_DATAFILE=source_datafie:target_datafile
该选项用于将源方案的所有对象装载到目标方案中.
REMAP_SCHEMA=source_schema:target_schema
将源表空间的所有对象导入到目标表空间中
REMAP_TABLESPACE=source_tablespace:target:tablespace
该选项指定建立表空间时是否覆盖已存在的数据文件.默认为N
REUSE_DATAFIELS={Y | N}
指定导入是是否跳过不可使用的索引,默认为N
impdp scott/tiger directory=dump_scott dumpfile=a1.dmp sqlfile=c.sql
默认放在directory下,因此不要指定绝对路径
指定是否导入流元数据(StreamMatadata),默认值为Y.
该选项用于指定当表已经存在时导入作业要执行的操作,默认为SKIP
TABBLE_EXISTS_ACTION={SKIP | APPEND | TRUNCATE | REPLACE }
当设置该选项为SKIP时,导入作业会跳过已存在表处理下一个对象;
当设置为APPEND时,会追加数据;
当设置为TRUNCATE时,导入作业会截断表,然后为其追加新数据;
当设置为REPLACE时,导入作业会删除已存在表,重建表并追加数据;
注意,TRUNCATE选项不适用与簇表和NETWORK_LINK选项
http://blog.itpub.net/4227/viewspace-664383/
至少在11.2.0.1中,REMAP_TABLE只对表和数据有效,而对索引无效,而且使用REMAP_TABLE对于原表仍然存在的情况下要小心,因为REMAP_TABLE操作很可能导致源表发生导入操作,导致一些非预期的对象被导入,比如:
SQL> alter table t add check (id >0);
表已更改。
SQL> host expdp yangtk/yangtkdirectory=d_output dumpfile=t.dp tables=t reuse_dumpfiles=y
Export: Release 11.2.0.1.0 - Production on 星期五 6月 4 23:51:13 2010
Copyright (c) 1982, 2009, Oracle and/or itsaffiliates. All rights reserved.
连接到: OracleDatabase 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Miningand Real Application Testing options
启动 "YANGTK"."SYS_EXPORT_TABLE_01": yangtk/******** directory=d_outputdumpfile=t.dp tables=t reuse_dumpfiles=y
正在使用 BLOCKS 方法进行估计...
处理对象类型TABLE_EXPORT/TABLE/TABLE_DATA
使用 BLOCKS 方法的总估计: 128 KB
处理对象类型TABLE_EXPORT/TABLE/TABLE
处理对象类型TABLE_EXPORT/TABLE/INDEX/INDEX
处理对象类型TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
处理对象类型TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
. . 导出了 "YANGTK"."T" 5.562 KB 11 行
已成功加载/卸载了主表"YANGTK"."SYS_EXPORT_TABLE_01"
******************************************************************************
YANGTK.SYS_EXPORT_TABLE_01 的转储文件集为:
/home/oracle/t.dp
作业"YANGTK"."SYS_EXPORT_TABLE_01" 已于 23:51:23 成功完成
SQL> drop table t_new purge;
表已删除。
SQL> host impdp yangtk/yangtkdirectory=d_output dumpfile=t.dp remap_table=t:t_new
Import: Release 11.2.0.1.0 - Production on 星期五 6月 4 23:55:51 2010
Copyright (c) 1982, 2009, Oracle and/or itsaffiliates. All rights reserved.
连接到: OracleDatabase 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Miningand Real Application Testing options
已成功加载/卸载了主表"YANGTK"."SYS_IMPORT_FULL_01"
启动"YANGTK"."SYS_IMPORT_FULL_01": yangtk/******** directory=d_outputdumpfile=t.dp remap_table=t:t_new
处理对象类型TABLE_EXPORT/TABLE/TABLE
处理对象类型 TABLE_EXPORT/TABLE/TABLE_DATA
. . 导入了 "YANGTK"."T_NEW" 5.562 KB 11 行
处理对象类型TABLE_EXPORT/TABLE/INDEX/INDEX
ORA-31684: 对象类型 INDEX:"YANGTK"."IND_T_ID" 已存在
处理对象类型TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
处理对象类型TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
ORA-39111: 跳过从属对象类型 INDEX_STATISTICS, 基本对象类型 INDEX:"YANGTK"."IND_T_ID" 已存在
作业"YANGTK"."SYS_IMPORT_FULL_01" 已经完成, 但是有 2 个错误 (于 23:55:55 完成)
SQL> col search_condition format a20
SQL> select table_name, constraint_name,search_condition
2 from user_constraints
3 where table_name = 'T';
TABLE_NAME CONSTRAINT_NAME SEARCH_CONDITION
------------------------------------------------------------ --------------------
T SYS_C0011261 id > 0
T SYS_C0011277 id > 0
在这个例子中,就由于约束是系统名称,导致在执行REMAP_TABLE导入后,同样的约束在源表上重复建立。