[toc]

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

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

- 命令行

- 参数文件

- 交互式命令

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


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

默认导出用户下所有对象
```
expdp username/password 
```

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


[https://docs.oracle.com/cd/B28359_01/server.111/b28319/dp_export.htm#BEHBGGEB](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权限

##ATTACH

该参数指定expdp连接到正在执行的一个expdp Job中,连接后进入到交互式命令模式中

如果当前只有一个一个JOB,则默认值为该JOB

除非JOB正在运行,你服务器使用ATTCH连接到其他schema

JOB 名称可以查询DBA_DATAPUMP_JOBS view 或 the USER_DATAPUMP_JOBS视图

```
> expdp hr ATTACH=hr.export_job
```

##COMPRESSION

默认值: METADATA_ONLY

该参数目的为指定哪些数据在写入dump文件前进行压缩

```
COMPRESSION={ALL | DATA_ONLY | METADATA_ONLY | NONE}
```

- ALL  压缩所有数据

- DATA_ONLY  只对所有数据进行压缩

- METADATA_ONLY  只对所有元数据进行压缩

- NONE 不使用压缩


**举例:**

```
expdp hr DIRECTORY=dpump_dir1 DUMPFILE=hr_comp.dmp
COMPRESSION=METADATA_ONLY
```

##CONTENT

默认值:ALL

该命令可以让你过滤出你需要的内容

```
CONTENT={ALL | DATA_ONLY | METADATA_ONLY}
```
- ALL 导出元数据和数据

- DATA_ONLY  只导出表的行数据,不会导出数据库对象的定义

- METADATA_ONLY 只导出数据库对象的定义,不会导出表的数据

CONTENT=METADATA_ONLY 参数不可以和TRANSPORT_TABLESPACES一起用


**举例**

```
expdp hr DIRECTORY=dpump_dir1 DUMPFILE=hr.dmp CONTENT=METADATA_ONLY
```

## DATA_OPTIONS

该参数没有默认值


对于expdp来说,该参数只有一个值

```
DATA_OPTIONS=XML_CLOBS
```

我们使用该参数用来让XMLType 数据的导出不压缩

注意如果指定该参数则在impdp时也需要指定

**举例**

```
expdp hr TABLES=hr.xdb_tab1 DIRECTORY=dpump_dir1 
DUMPFILE=hr_xml.dmp VERSION=11.1 DATA_OPTIONS=xml_clobs
```

##DIRECTORY

默认值:DATA_PUMP_DIR

该参数指定dump文件和日志文件的默认位置

如果在dumpfile和logfile参数中指定了路径,则该路径覆盖directory参数的值

**举例**

```
expdp hr DIRECTORY=dpump_dir1 DUMPFILE=employees.dmp CONTENT=METADATA_ONLY
```


##DUMPFILE

默认值: expdat.dmp

该参数指定dumpf文件的名称,也可以在其中指定目录,我们可以指定

```
expdp hr SCHEMAS=hr DIRECTORY=dpump_dir1 DUMPFILE=dpump_dir2:exp1.dmp,
 exp2%U.dmp PARALLEL=3
```

我们可以使用 FILESIZE参数来指定dump 文件的最大大小

%U参数表示参数文件将被分割成PARALLEL个


##ENCRYPTION

该参数指定dump文件是否被加密

```
ENCRYPTION = {ALL | DATA_ONLY | ENCRYPTED_COLUMNS_ONLY | METADATA_ONLY | NONE}
```

- ALL  加密所有的数据和元数据

- DATA_ONLY 指定只加密数据

- ENCRYPTED_COLUMNS_ONLY  指定只加密加密过的列
- METADATA_ONLY 指定只加密元数据

- NONE  不加密数据和元数据


如果你想加密SecureFiles  则必须指定ENCRYPTION=ALL 

**举例**

```
expdp hr DIRECTORY=dpump_dir1 DUMPFILE=hr_enc.dmp JOB_NAME=enc1
ENCRYPTION=data_only ENCRYPTION_PASSWORD=foobar
```


##ENCRYPTION_ALGORITHM

默认值:AES128

该参数指定加密的算法

该参数需要你指定 ENCRYPTION 或ENCRYPTION_PASSWORD 参数
```
ENCRYPTION_ALGORITHM = { AES128 | AES192 | AES256 }
```
该参数只在11g中出现


**举例**
```
expdp hr DIRECTORY=dpump_dir1 DUMPFILE=hr_enc.dmp
ENCRYPTION_PASSWORD=foobar ENCRYPTION_ALGORITHM=AES128

```
##ENCRYPTION_MODE

该参数指定我们在加密和解密时使用的安全类型

默认值:

- 如果只指定ENCRYPTION 参数则为 TRANSPARENT

- 如果指定了 ENCRYPTION_PASSWORD参数并且Oracle wallet功能被打开则为DUAL

- 如果设定了ENCRYPTION_PASSWORD并且Oracle Wallet功能未打开则为 PASSWORD


```
ENCRYPTION_MODE = { DUAL | PASSWORD | TRANSPARENT }
```



##ENCRYPTION_PASSWORD

该参数没有默认值

该参数为用户指定的用于加密dump文件的密码,防止未授权的文件访问

**举例**

```
expdp hr TABLES=employee_s_encrypt DIRECTORY=dpump_dir
DUMPFILE=dpcd2be1.dmp ENCRYPTION=ENCRYPTED_COLUMNS_ONLY 
ENCRYPTION_PASSWORD=123456
```

##ESTIMATE

默认值: BLOCKS

该参数指定在导出前估算数据量的方法,可以通过块数和统计信息来估算导出后大小


```
ESTIMATE={BLOCKS | STATISTICS}
```


**举例**
```
expdp hr TABLES=employees ESTIMATE=STATISTICS DIRECTORY=dpump_dir1
 DUMPFILE=estimate_stat.dmp
``` 


##ESTIMATE_ONLY

默认值:n

该参数指定只需估算导出的大小而不实际导出数据

```
ESTIMATE_ONLY={y | n}
```
**举例**

```
> expdp hr ESTIMATE_ONLY=y NOLOGFILE=y SCHEMAS=HR
```

##EXCLUDE

该参数过滤你不需要导出的内容

不可以和INCLUDE同时使用

```
EXCLUDE=object_type[:name_clause] [, ...]
```

如果排除掉某张表,则其索引和触发器也将排除

我们可以在name_cluase中使用SQL来选择

```
 EXCLUDE=INDEX:"LIKE 'EMP%'" 
```

**举例**

```
expdp hr DIRECTORY=dpump_dir1 DUMPFILE=hr_exclude.dmp EXCLUDE=VIEW,
PACKAGE, FUNCTION
```

##FILESIZE

默认值:0 (无限制)

该参数指定单个dump文件的最大大小,如不指定单位则默认为B

```
FILESIZE=integer[B | K | M | G]
```


如果数据大于指定的大小则该JOB会失败,这是可以attach到该JOB,然后使用 ADD_FILE 来添加新的文件

也可以在执行前使用%U参数则会自动新建文件



##FLASHBACK_SCN

该参数指定导出的数据库SCN号

**举例**

```
> expdp hr DIRECTORY=dpump_dir1 DUMPFILE=hr_scn.dmp FLASHBACK_SCN=384632
```


## FLASHBACK_TIME

该参数指定导出的数据库的SCN时间

这里我们使用参数文件的形式来执行

**举例**
```
DIRECTORY=dpump_dir1
DUMPFILE=hr_time.dmp
FLASHBACK_TIME="TO_TIMESTAMP('25-08-2003 14:35:00', 'DD-MM-YYYY HH24:MI:SS')"
```

```
> expdp hr PARFILE=flashback.par
```

##FULL

该参数表示已全库导出模式来导出全库

该模式不会导出SYS, ORDSYS, 和 MDSYS等系统schema

同时sys用户对象的权限也不会导出

**举例**

```
expdp hr DIRECTORY=dpump_dir2 DUMPFILE=expfull.dmp FULL=y NOLOGFILE=y
```

##HELP

默认值:

该参数用来显示命令行模式交互式命令的所有参数

```
HELP = {y | n}
```


##INCLUDE

该参数指定需要导出的对象,授权也会同时导出

不可以和EXCLUDE同时使用

可以多次使用INCLUDE参数

```
INCLUDE = object_type[:name_clause] [, ...]
```

**举例**
```
expdp hr INCLUDE=TABLE DUMPFILE=dpump_dir1:exp_inc.dmp NOLOGFILE=y
```

##JOB_NAME

默认值:系统自动生成( SYS_EXPORT_<mode>_NN)

指定导出动作的JOB名称,可以用它来ATTCH到该任务

**举例**

```
> expdp hr DIRECTORY=dpump_dir1 DUMPFILE=exp_job.dmp JOB_NAME=exp_job
NOLOGFILE=y
```

##LOGFILE

默认值:export.log

该参数指定log文件的名称,也可以指定目录路径

日志记录导出的过程和成功失败信息

除非指定NOLOGFILE 参数,否则日志文件总是被创建


```
LOGFILE=[directory_object:]file_name
```

**举例**

```
> expdp hr DIRECTORY=dpump_dir1 DUMPFILE=hr.dmp LOGFILE=hr_export.log
```

##NETWORK_LINK

该参数指定一个远程(source)数据库的dblink,负责导出该source数据库的数据至本地数据目录

**举例**

```
> expdp hr DIRECTORY=dpump_dir1 NETWORK_LINK=source_database_link
  DUMPFILE=network_export.dmp LOGFILE=network_export.log
```

##NOLOGFILE

默认值:n

该参数用于指定不需要记录日志

**举例**

```
> expdp hr DIRECTORY=dpump_dir1 DUMPFILE=hr.dmp NOLOGFILE=y
```

##PARALLEL

默认值:1

该参数指定导出动作的并行度,它可以用来提高导出的速度

不过要确保服务器的资源足够

一般我们和%U操作同时指定,用来同时写入多个文件

**举例**

```
> expdp hr DIRECTORY=dpump_dir1 LOGFILE=parallel_export.log 
JOB_NAME=par4_job DUMPFILE=par_exp%u.dmp PARALLEL=4
```

##PARFILE

指定导出所用到的参数文件

参数文件在下界介绍

```
PARFILE=[directory_path]file_name
```

由于参数文件是在本地打开的,所有这里的目录请直接使用操作系统路径

该参数不可以在参数文件中指定

**举例**

```
expdp hr parfile=hr.par
```

##QUERY

该参数让导出的内容通过查询语句的形式指定,相当于where条件

```
QUERY = [schema.][table_name:] query_clause
```

他不能够和如下参数同时使用

- CONTENT=METADATA_ONLY

- ESTIMATE_ONLY

- TRANSPORT_TABLESPACES

**举例**

```
QUERY=employees:"WHERE department_id > 10 AND salary > 10000"
NOLOGFILE=y 
DIRECTORY=dpump_dir1 
DUMPFILE=exp1.dmp 
```

它指定导出除了employee外所有的表,对于employee只导出符合where条件的数据