天天看点

Oracle10g 数据泵导出命令 expdp 使用总结

 expdp使用

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

首先得建directory:

sql> conn /as sysdba

sql> create or replace directory dir_dump  as '/u01/backup/';

sql> grant read,write on directory dir_dump to public;

1) 导出scott整个schema

--默认导出登陆账号的schema

$ expdp scott/tiger@db_esuite parfile=/orahome/expdp.par

expdp.par内容:

    directory=dir_dump

    dumpfile=scott_full.dmp

    logfile=scott_full.log

--其他账号登陆, 在参数中指定schemas

$ expdp system/oracle@db_esuite parfile=/orahome/expdp.par

    schemas=scott

2) 导出scott下的dept,emp表

    dumpfile=scott.dmp

    logfile=scott.log

    tables=dept,emp

3) 导出scott下除emp之外的表

    exclude=table:"='emp'"

4) 导出scott下的存储过程

    include=procedure

5) 导出scott下以'e'开头的表

    include=table:"like 'e%'"   //可以改成not like,就导出不以e开头的表

6) 带query导出

    tables=emp,dept

    query=emp:"where empno>=8000"

    query=dept:"where deptno>=10 and deptno<=40"

注: 处理这样带查询的多表导出, 如果多表之间有外健关联, 可能需要注意查询条件所筛选的数据是否符合这样的外健约束, 比如 emp中有一栏位是 deptno, 是关联dept中的主键, 如果"where empno>=8000"中得出的deptno=50的话, 那么, 你的dept的条件"where deptno>=10 and deptno<=40"就不包含deptno=50的数据, 那么在导入的时候就会出现错误.

 expdp选项

1. attach

该选项用于在客户会话与已存在导出作用之间建立关联.语法如下:

attach=[schema_name.]job_name

schema_name用于指定方案名,job_name用于指定导出作业名.注意,如果使用attach选项,在命令行除了连接字符串和attach选项外,不能指定任何其他选项,示例如下:

expdp scott/tiger attach=scott.export_job

2. content

该选项用于指定要导出的内容.默认值为all.语法如下:

content={all | data_only | metadata_only}

当设置content为all 时,将导出对象定义及其所有数据; 为data_only时,只导出对象数据; 为metadata_only时,只导出对象定义,示例如下:

expdp scott/tiger directory=dump dumpfile=a.dump content=metadata_only

3. directory

指定转储文件和日志文件所在的目录.语法如下:

directory=directory_object

directory_object用于指定目录对象名称.需要注意,目录对象是使用create directory语句建立的对象,而不是os 目录,示例如下:

expdp scott/tiger directory=dump dumpfile=a.dump

建立目录:

create directory dump as 'd:\dump';

查询创建了那些子目录:

select * from dba_directories;

4. dumpfile

用于指定转储文件的名称,默认名称为expdat.dmp.语法如下:

dumpfile=[directory_object:]file_name[,….]

directory_object用于指定目录对象名,file_name用于指定转储文件名.需要注意,如果不指定directory_object,导出工具会自动使用directory选项指定的目录对象,示例如下:

expdp scott/tiger directory=dump1 dumpfile=dump2:a.dmp

5. estimate

指定估算被导出表所占用磁盘空间的方法.默认值是blocks.语法如下:

extimate={blocks | statistics}

设置为blocks时,oracle会按照目标对象所占用的数据块个数乘以数据块尺寸估算对象占用的空间,设置为statistics时,根据最近统计值估算对象占用空间,示例如下:

expdp scott/tiger tables=emp estimate=statistics directory=dump dumpfile=a.dump

一般情况下, 当用默认值(blocks)时, 日志中估计的文件大小会比实际expdp出来的文件大, 用statistics时会跟实际大小差不多.

6. extimate_only

指定是否只估算导出作业所占用的磁盘空间,默认值为n.语法如下:

extimate_only={y | n}

设置为y时,导出作用只估算对象所占用的磁盘空间,而不会执行导出作业,为n时,不仅估算对象所占用的磁盘空间,还会执行导出操作,示例如下:

expdp scott/tiger estimate_only=y nologfile=y

7. exclude

该选项用于指定执行操作时要排除的对象类型或相关对象.语法如下:

exclude=object_type[:name_clause][,….]

object_type用于指定要排除的对象类型,name_clause用于指定要排除的具体对象.exclude和include不能同时使用,示例如下:

expdp scott/tiger directory=dump dumpfile=a.dup exclude=view

在expdp的帮助文件中, 可以看到存在exclude和include参数, 这两个参数文档中介绍的命令格式存在问题, 正确用法是:

exclude=object_type[:name_clause][,...]

include=object_type[:name_clause][,...]

示例:

expdp   schema=scott exclude=sequence,table:"in('emp','dept')"

impdp   schema=scott include=function,package,procedure,table:"='emp'"

有了这些还不够, 由于命令中包含了多个特殊字符, 在不同的操作系统下需要通过转义字符才能使上面的命令顺利执行,

如:

exclude=table:\"in('bigtale')\"

8. filesize

指定导出文件的最大尺寸,默认为0(表示文件尺寸没有限制).

9. flashback_scn

指定导出特定scn时刻的表数据.语法如下:

flashback_scn=scn_value

scn_value用于标识scn值.flashback_scn和flashback_time不能同时使用,示例如下:

expdp scott/tiger directory=dump dumpfile=a.dmp flashback_scn=358523

10. flashback_time

指定导出特定时间点的表数据.语法如下:

flashback_time="to_timestamp(time_value)"

示例如下:

expdp scott/tiger directory=dump dumpfile=a.dmp flashback_time="to_timestamp('25-08-2004 14:35:00','dd-mm-yyyy hh24:mi:ss')"

11. full

指定数据库模式导出,默认为n.语法如下:

full={y | n}

为y时,标识执行数据库导出.

12. help

指定是否显示expdp命令行选项的帮助信息,默认为n. 当设置为y时,会显示导出选项的帮助信息,示例如下:

expdp help=y

13. include

指定导出时要包含的对象类型及相关对象.语法如下:

include=object_type[:name_clause][,… ]

expdp scott/tiger directory=dump dumpfile=a.dmp include=trigger

14. job_name

指定要导出作用的名称,默认为sys_xxx.语法如下:

job_name=jobname_string

expdp scott/tiger directory=dump dumpfile=a.dmp include=trigger job_name=exp_trigger

后面想临时停止expdp任务时可以按ctrl+c组合键,退 出当前交互模式,退出之后导出操作不会停止,这不同于oracle以前的exp. 以前的exp,如果退出交互式模式,就会出错终止导出任务. 在 oracle10g中,由于expdp是数据库内部定义的任务,已经与客户端无关. 退出交互之后,会进入export的命令行模式,此时支持 status等查看命令:

export> status

如果想停止改任务,可以发出stop_job命令:

export> stop_job

如果有命令行提示: "是否确实要停止此作业([y]/n):" 或 "are you sure you wish to stop this job ([yes]/no):", 回答应是yes或者no, 回答是yes以后会退出当前的export界面.

接下来可以通过命令行再次连接到这个任务:

expdp test/test@acf attach=expfull

通过start_job命令重新启动导出:

export> start_job

15. logfile

指定导出日志文件文件的名称,默认名称为export.log.语法如下:

logfile=[directory_object:]file_name

directory_object用于指定目录对象名称,file_name用于指定导出日志文件名.如果不指定directory_object.导出作用会自动使用directory的相应选项值,示例如下:

expdp scott/tiger directory=dump dumpfile=a.dmp logfile=a.log

16. network_link

指定数据库链名,如果要将远程数据库对象导出到本地例程的转储文件中,必须设置该选项.

expdp中使用连接字符串和network_link的区别:

expdp属于服务端工具,而exp属于客户端工具,expdp生成的文件默认是存放在服务端的,而exp生成的文件是存放在客户端.

expdp username/password@connect_string //对于使用这种格式来说,directory使用源数据库创建的,生成的文件存放在服务端。

如何将生成的文件放在目标数据库而不放在源数据库呢,在expdp中使用network_link. 比如在本机expdp远程服务器的数据库,先在本机创建到服务端的dblink,然后创建directory及授权,然后expdp.

a) 创建到服务端的dblink

conn aa/aacc

create database link link_name connect to bb identified by password using 'connect_string';

b) 建立directory

conn / as sysdba

create or replace directory dir as 'directory';

grant read,write on directory dir to bb;

c) 通过network_link导出

expdp aa/aacc directory=dir network_link=link_name ...

17. nologfile

该选项用于指定禁止生成导出日志文件,默认值为n.

18. parallel

指定执行导出操作的并行进程个数,默认值为1

19. parfile

指定导出参数文件的名称.语法如下:

parfile=[directory_path:]file_name

20. query

用于指定过滤导出数据的where条件.语法如下:

query=[schema.][table_name:]query_clause

schema 用于指定方案名,table_name用于指定表名,query_clause用于指定条件限制子句.query选项不能 与 connect=metadata_only,extimate_only,transport_tablespaces等选项同时使用,示例如下:

expdp scott/tiger directory=dump dumpfiel=a.dmp tables=emp query='where deptno=20'

21. schemas

该方案用于指定执行方案模式导出,默认为当前用户方案.

22. status

指定显示导出作用进程的详细状态,默认值为0.

23. tables

指定表模式导出.语法如下:

tables=[schema_name.]table_name[:partition_name][,…]

schema_name用于指定方案名,table_name用于指定导出的表名,partition_name用于指定要导出的分区名.

24. tablespaces

指定要导出表空间列表.

25. transport_full_check

该选项用于指定被搬移表空间和未搬移表空间关联关系的检查方式,默认为n.

当设置为y时,导出作用会检查表空间直接的完整关联关系,如果表所在表空间或其索引所在的表空间只有一个表空间被搬移,将显示错误信息.

当设置为n时,导出作用只检查单端依赖,如果搬移索引所在表空间,但未搬移表所在表空间,将显示出错信息,如果搬移表所在表空间,未搬移索引所在表空间,则不会显示错误信息.

26. transport_tablespaces

指定执行表空间模式导出.

27. version

指定被导出对象的数据库版本,默认值为compatible.语法如下:

version={compatible | latest | version_string}

为compatible时,会根据初始化参数compatible生成对象元数据;为latest时,会根据数据库的实际版本生成对象元数据.version_string用于指定数据库版本字符串.