这节内容为expdp命令的介绍,版本为Oracle 11g
上节我们说到调用expdp有三种方式
命令行
参数文件
交互式命令
这节讲第一种方式,命令行模式通过参数来控制导出的行为
首先我们必须在最开始提供用户密码,如不指定密码,则需要在弹出的提示中输入
默认导出用户下所有对象
expdp username/password
expdp所有参数可参考如下图表
https://docs.oracle.com/cd/B28359_01/server.111/b28319/dp_export.htm#BEHBGGEB
在开始说命令行方式的参数前我们约定:
上节说了前面一部分,这节讲接下来的
该参数可以让你指定一个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
默认值:n
该参数控制是否覆盖已存在的dump文件
默认情况下如果有重复名称会报错
举例
> expdp hr DIRECTORY=dpump_dir1 DUMPFILE=enc1.dmp
TABLES=employees REUSE_DUMPFILES=y
该参数指定需要到处多少比例的数据
有时我们处于测试目的只需要一些样本数据,这时可以使用该参数
该参数可以指定某张表
下面语句表示导出50%数据量的employee表
SAMPLE="HR"."EMPLOYEES":50
如不指定表则表示整个数据库的比例
举例
> expdp hr DIRECTORY=dpump_dir1 DUMPFILE=sample.dmp SAMPLE=70
默认值:当前用户的schema
该参数指定当前导出模式为schame模式,这是默认模式
如果用户具有 EXP_FULL_DATABASE 权限则可以导出其他schema数据
该权限也可以让你导出其他信息,如定义信息和权限信息
举例
> expdp hr DIRECTORY=dpump_dir1 DUMPFILE=expdat.dmp SCHEMAS=hr,sh,oe
默认值:0
该参数指定导出过程中信息的刷新频率
如果该参数未指定则除了对象导出的完成信息,没有其他额外的信息
> expdp hr DIRECTORY=dpump_dir1 SCHEMAS=hr,sh STATUS=300
该参数指定需要导出的表,指定则表示当前导出为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
指定在表空间模式下导出的表空间名称
他表导出时,其依赖的对象也会被导出,但是用户没有权限的对象不会被导出
举例
下面表示导出tbs_4, tbs_5, tbs_6表空间的表以及相关的对象(有权限的)
> expdp hr DIRECTORY=dpump_dir1 DUMPFILE=tbs.dmp
TABLESPACES=tbs_4, tbs_5, tbs_6
默认值 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
该参数表示当前导出模式为传输表空间模式
他会导出指定表空间的元数据
日志文件会记录用到的数据文件和dump文件以及 containment violations
如果只想导出制定的表或者分区 可以和tables一起使用
传输表空间模式的一些限制:
举例
> expdp hr DIRECTORY=dpump_dir1 DUMPFILE=tts.dmp
TRANSPORT_TABLESPACES=tbs_1 TRANSPORT_FULL_CHECK=y LOGFILE=tts.log
默认值: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
该参数指定到处对象的版本,可以让导出的dump文件兼容以前版本的数据库
但是不可以是10g以前的版本
如果版本的值不支持表的数据类型,则该表不会被导出
VERSION={COMPATIBLE | LATEST | version_string}
举例
> expdp hr TABLES=hr.employees VERSION=LATEST DIRECTORY=dpump_dir1
DUMPFILE=emp.dmp NOLOGFILE=y