这节内容为expdp命令的介绍,版本为Oracle 11g

上节我们说到调用expdp有三种方式

  • 命令行

  • 参数文件

  • 交互式命令

这节讲第一种方式,命令行模式通过参数来控制导出的行为

首先我们必须在最开始提供用户密码,如不指定密码,则需要在弹出的提示中输入

默认导出用户下所有对象

expdp username/password 

expdp所有参数可参考如下图表

https://docs.oracle.com/cd/B28359_01/server.111/b28319/dp_export.htm#BEHBGGEB

在开始说命令行方式的参数前我们约定:

  1. 我们使用hr用户来举例
  2. 我们已经建立了dpump_dir1 和 dpump_dir2目录,并赋予额hr用户read,write权限
  3. hr用户被赋予了EXP_FULL_DATABASE 和 IMP_FULL_DATABASE权限

上节说了前面一部分,这节讲接下来的

REMAP_DATA

该参数可以让你指定一个function用来处理导出表的数据

例如原表中有个存放身份证号码的栏位,我们不希望将明文导出

这时我们可以使用该参数将一些号码替换

REMAP_DATA=[schema.]tablename.column_name:[schema.]pkg.function

举例

> expdp hr DIRECTORY=dpump_dir1 DUMPFILE=remap1.dmp TABLES=employees
REMAP_DATA=hr.employees.employee_id:hr.remap.minus10 
REMAP_DATA=hr.employees.first_name:hr.remap.plusx 

REUSE_DUMPFILES

默认值:n

该参数控制是否覆盖已存在的dump文件

默认情况下如果有重复名称会报错

举例

> expdp hr DIRECTORY=dpump_dir1 DUMPFILE=enc1.dmp
TABLES=employees REUSE_DUMPFILES=y

SAMPLE

该参数指定需要到处多少比例的数据

有时我们处于测试目的只需要一些样本数据,这时可以使用该参数

该参数可以指定某张表

下面语句表示导出50%数据量的employee表

SAMPLE="HR"."EMPLOYEES":50

如不指定表则表示整个数据库的比例

举例

> expdp hr DIRECTORY=dpump_dir1 DUMPFILE=sample.dmp SAMPLE=70

SCHEMAS

默认值:当前用户的schema

该参数指定当前导出模式为schame模式,这是默认模式

如果用户具有 EXP_FULL_DATABASE 权限则可以导出其他schema数据

该权限也可以让你导出其他信息,如定义信息和权限信息

举例

> expdp hr DIRECTORY=dpump_dir1 DUMPFILE=expdat.dmp SCHEMAS=hr,sh,oe 

STATUS

默认值:0

该参数指定导出过程中信息的刷新频率

如果该参数未指定则除了对象导出的完成信息,没有其他额外的信息

> expdp hr DIRECTORY=dpump_dir1 SCHEMAS=hr,sh STATUS=300

TABLES

该参数指定需要导出的表,指定则表示当前导出为table 模式

该模式只会导出指定的表,分区和相关的对象

所有表必须是同一用户下,指定别的用户你必须有EXP_FULL_DATABASE权限

可以使用通配符 如 TABLES=emp% 表示导出所有以emp开头的表

可以将TRANSPORTABLE=ALWAYS 参数和tables一起使用以启用TRANSPORTABLE模式

举例

导出hr用户的employees,jobs,departments表

> expdp hr DIRECTORY=dpump_dir1 DUMPFILE=tables.dmp
TABLES=employees,jobs,departments

导出sh用户sales表的sales_Q1_2000,sales_Q2_2000分区

> expdp hr DIRECTORY=dpump_dir1 DUMPFILE=tables_part.dmp
TABLES=sh.sales:sales_Q1_2000,sh.sales:sales_Q2_2000

TABLESPACES

指定在表空间模式下导出的表空间名称

他表导出时,其依赖的对象也会被导出,但是用户没有权限的对象不会被导出

举例

下面表示导出tbs_4, tbs_5, tbs_6表空间的表以及相关的对象(有权限的)

> expdp hr DIRECTORY=dpump_dir1 DUMPFILE=tbs.dmp 
TABLESPACES=tbs_4, tbs_5, tbs_6

TRANSPORT_FULL_CHECK

默认值 N

该参数只会在传输表空间模式下使用

该参数控制是否检查对象是否存在于指定的表空间内和外

接下来通过下面语句来说明

TABLESPACES=tbs_4

TRANSPORT_FULL_CHECK=y

如果tbs_4表空间中有a表,但是没有a表的索引,则导出失败

同时如果tbs_4表空间中有a表的索引,但是没有a表,则导出也会失败

TRANSPORT_FULL_CHECK=n

如果tbs_4表空间中有a表,但是没有a表的索引,则导出不会失败

同时如果tbs_4表空间中有a表的索引,但是没有a表,由于索引依赖与表,则导出也会失败

举例

> expdp hr DIRECTORY=dpump_dir1 DUMPFILE=tts.dmp 
TRANSPORT_TABLESPACES=tbs_1 TRANSPORT_FULL_CHECK=y LOGFILE=tts.log 

TRANSPORT_TABLESPACES

该参数表示当前导出模式为传输表空间模式

他会导出指定表空间的元数据

日志文件会记录用到的数据文件和dump文件以及 containment violations

如果只想导出制定的表或者分区 可以和tables一起使用

传输表空间模式的一些限制:

  • 不可以重新启动
  • 只能使用一并行度
  • 需要有EXP_FULL_DATABASE 权限
  • 不支持加密的列
  • 执行导出的用户不可以包含在指定的表空间中
  • 不支持SYS和SYSAUX 表空间
  • 导出过程中表空间必须设为只读

举例

> expdp hr DIRECTORY=dpump_dir1 DUMPFILE=tts.dmp
TRANSPORT_TABLESPACES=tbs_1 TRANSPORT_FULL_CHECK=y LOGFILE=tts.log

TRANSPORTABLE

默认值:Never

该参数制定在tables模式中是否启用transportable选项,也只能在tables模式

TRANSPORTABLE = {ALWAYS | NEVER}

举例

> expdp sh DIRECTORY=dpump_dir1 DUMPFILE=tto1.dmp
TABLES=sh.sales2 TRANSPORTABLE=always 
> impdp system PARTITION_OPTIONS=departition 
TRANSPORT_DATAFILES=oracle/dbs/tbs2 DIRECTORY=dpump_dir1 
DUMPFILE=tto1.dmp REMAP_SCHEMA=sh:dp

VERSION

该参数指定到处对象的版本,可以让导出的dump文件兼容以前版本的数据库

但是不可以是10g以前的版本

如果版本的值不支持表的数据类型,则该表不会被导出

VERSION={COMPATIBLE | LATEST | version_string}

举例

> expdp hr TABLES=hr.employees VERSION=LATEST DIRECTORY=dpump_dir1
DUMPFILE=emp.dmp NOLOGFILE=y