Data Pump 反映了整个导出/导入过程的完全革新。不使用常见的 SQL 命令,而是应用专用 API(direct path api etc) 来以更快得多的速度加载和卸载数据。

expdp 和 impdp

Oracle 10g引入了最新的数据泵(Data Dump)技术,使DBA或者开发人员可以将数据库元数据(对象定义)和数据快速移动到另一个oracle数据库中。

数据泵导入导出与传统导入导出的区别

在10G之前,传统的导入导出使用imp\exp工具,从10G开始,不仅保留了原先的exp\imp工具,还提供了数据泵导入导出工具expdp\impdp.

使用expdp\impdp应该注意的事项有:

imp\exp是客户端的工具程序,它们可以在客户端使用,也可以在服务器端使用。

expdp\impdp是服务端的工具程序,它们只能在Oracle服务端使用,不能在客户端使用。

IMP只适用于EXP导出文件,不适用于EXPDP导出文件;

IMPDP只适用于EXPDP导出文件,而不适用于EXP导出文件。

------------------------------------------------------------------------------------

调用expdp

使用EXPDP工具时,其转储文件只能被存放在DIRECTORY对象对应的OS目录中,而不能直接指定转储文件所在的OS目录。因此,使用EXPDP工具时,必须首先建立DIRECTORY对象,并且需要为数据库用户授予使用DIRECTORY对象权限。

创建逻辑目录,该命令不会在操作系统创建真正的目录,最好以system等管理员创建。
create directory dump_dir as 'd:\dump';

grant read,write on directory dump_dir to 某个用户;

查看管理理员目录:select * from dba_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="where deptno=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参数书写时在不同操作系统平台的特殊字符进行转意的发生。尽量减少出错的几率,节省备份任务的完成时间。

*******************************************************************************************

EXPDP

参数说明:
1.与文件和目录有关的参数:
包括:DIRECTORY,DUMPIFLE,FILESIZE,PARFILE,LOGIFLE,NOLOGIFLE和COMPRESSION。

DIRECTORY参数用法:
--直接使用DIRECTORY参数,如
expdp susan/susan directory=data_dump_dir1 dumpfile=susan01.dmp

--DIRECTORY:FILE表示法,如
expdp susan/susan dumpfile=data_pump_dir1:test1.dmp,data_pump_dir2:test2.dmp;

expdp susan/susan dumpfile=data_pump_dir1:test1.dmp,data_pump_dir2:test2.dmp logfile=data_pump_dir1:test1.log
--DATA_PUMP_DIR环境变量:
export DATA_PUMP_DIR=DATA_PUMP_DIR1 --这里我名字必须大写,就奇怪了,小写还不行。
expdp susan/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,没有办法来指定压缩导出数据本身

2.与导出方式有关的参数:
包括:FULL,SCHEMAS,TABLES,TABLESPACE,TRANSPORT_TABLESPACE和TRANSPORT_FULL_CHECK
其它参数都好理解,TRANSPORT_FULL_CHECK参数是当导出作业时将检查数据的相关性,如值为Y,检查不通过时导出也失
败。
3.导出过滤参数:
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.dmp exclude=SCHEMA:"='SAN'" --注意双引号要用斜杠转义
QUERY:如QUERY=OE.ORDER:"WHERE ORDER_ID > 1000000"
SAMPLE:允许指定范围从0.000001到100的一个百分数,格式为[[schema_name.]table_name]sample_percent
4.估算参数:
ESTIMATE:值可为BLOCKS或STATISTICS
BLOCKS是指根据块的空间估算其导出作类的空间需求。
STATISTICS是根据每个表计算过的统计数据来估算空间需求,当表刚分析过后,用此参数才会较准。
ESTIMATE_ONLY:值为Y或N,使用此参数可以先估算导出作业将需要的空间,而不启动导出作业。
5.网络链接参数
NETWORK_LINK:可以从服务器中启动一个导出作业,将远程数据库的数据导出到你启动数据泵取导出作业的转储文件中。
6.加密参数:
ENCRYPTION_PASSWORD:对转储的文件进行加密
7.与作业有关的参数
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:关闭作业的执行


IMPDP

参数说明:
1.与文件和目录有关的参数:
包括:DIRECTORY,DUMPIFLE,PARFILE,LOGIFLE,NOLOGIFLE和EXPDP相同,另有一个SQLFILE,此参数类似于旧的IMP的INDEXFILE参数,用

在希望从转储文件中提取DDL。
如:impdp susan/susan directory=data_pump_dir2 dumpfile=test2.dmp sqlfile=data_pump_dir1:test2.sql schemas=susan
就是指将属于 susan模式的所有DDL写入位于data_pump_dir1的test2.sql文件中,当然在data_pump_dir2中必须有test2.dmp的转储文

件。

另一个重要的与文件有关的参数是REUSE_DATAFILES,此参数告诉数据泵取在导入过程中是否应该使用已有的数据文件来创建表空间,

如果指定为Y,则数据泵取导入程序将改写已有的数据文件。
2.过滤参数:
INCLUDE,EXCLUDE的用法与EXPDP相同
注意,如果使用CONTENT=DATA_ONLY时,则在导入过程中不用使用EXCLUDE和INCLUDE参数。
IMPDP可以使用QUERY参数在导入中过滤数据(以前只有在EXP中过滤数据,IMP不行).
可以使用TABLE_EXISTS_ACTINS参数告诉ORACLE当表已经存在时做什么,提供4个不同的值:
--SKIP(默认),跳过
--APPEND,将值追加到表中
--TRUNCATE,已truncate再重新装载新值
--REPLACE,重新创建此表,并重新装载
3.与作业有关的参数:
JOB_NAME,STATUS,PARALLEL参数与EXPDP相同
4.与导入方式有关的参数
FULL,SCHEMAS,TABLES,TABLESPACE,TRANSPORT_TABLESPACE和TRANSPORT_FULL_CHECK的用法和EXPDP差不多如使用NETWORK_LINK参数,

则TRANSPORT_FULL_CHECK只适合于表空间的传送。
5.重新映射参数
REMAP_SCHEMA,REMAP_DATEFILE,REMAP_TABLESPACE
尽管在exp/imp中有重新映射的能力(FROMUSER/TOUSER),但是不能重新映射数据文件和表空间
如:impdp system/manager dumpfile=newdump.dmp remap_schema=hre
6.转换参数
TRANSFORM,此参数的语法:TRANSFORM = transform_name:value[bject_type]
其中transform_name有四个选项:segment attributes,storage,oid,pctspace
--segment attributes:段属性包括物理属性、存储属性、表空间和日志。
--storage:可以使用storage=y(默认)说明只取对象的存储属性作为导入作业的一部分。
--oid:如果指定oid=Y(默认),则在导入过程中将分配一个新的oid给对象表。
--pctspace:通过提供一个正数作为该转换的值,可以增加对象的分配尺寸,并且数据文件尺寸等于pctspace的值(按百分比)
value:transform_name的值,transform_name为segment attributes,storage,oid时值可为Y/N,pctspace为数值
object_type的值可以表、索引、表空间、类型、集群、约束等对象。
一个例子:
impdp hr/hr tables=hr.employees directory=dpump_dir1 dumpfile=hr_emp.dmp transform=segment_attributes:N:table
表示在导入时不导入任何表的已有存储属性
7.网络链接参数
NETWORK_LINK,可以通过网络执行导入而不使用转储文件。
impdp hr/hr tables=employees directory=dpump+dir1 schemas=scott exclude=constraint network_link=finance@prod1
8.闪回参数
FLASHBACK_TIME,FLASHBACK_SCN


监控EXPDP/IMPDP作业
可以使用DBA_DATAPUBMP_JOBS和DBA_DATAPUMP_SESSIONS视图来显示数据泵取作业的信息。
select * from DBA_DATAPUBMP_JOBS;
select sid,serial# from v$session s,dba_datapump_sessions d where s.saddr=d.saddr;
另也可以通过v$session_longops视图来监控长期运行的会话。