这节内容为imdp命令的介绍,版本为Oracle 11g
上节我们说到调用impdp有三种方式
- 命令行
- 参数文件
- 交互式命令
这节讲第一种方式,命令行模式通过参数来控制导出的行为
首先我们必须在最开始提供用户密码,如不指定密码,则需要在弹出的提示中输入
默认导出用户下所有对象
```
expdp username/password@inst
```
##ATTACH
该参数指定impdp连接到正在执行的一个impdp Job中,连接后进入到交互式命令模式中
如果当前只有一个JOB,则默认值为该JOB
除非JOB正在运行,你可以使用ATTCH连接到其他schema
JOB 名称可以查询DBA_DATAPUMP_JOBS 视图或 the USER_DATAPUMP_JOBS视图
```
> impdp hr ATTACH=import_job
```
##CONTENT
默认值:ALL
该命令可以让你过滤出你需要的内容
```
CONTENT={ALL | DATA_ONLY | METADATA_ONLY}
```
- ALL 导入元数据和数据
- DATA_ONLY 只导入表的行数据,不会导入数据库对象的定义
- METADATA_ONLY 只导入数据库对象的定义,不会导入表的数据
CONTENT=METADATA_ONLY 参数不可以和TRANSPORT_TABLESPACES一起用
CONTENT=ALL 和 CONTENT=DATA_ONLY不能和SQLFILE参数一起使用
**举例**
```
> impdp hr DIRECTORY=dpump_dir1 DUMPFILE=expfull.dmp CONTENT=METADATA_ONLY
```
## DATA_OPTIONS
该参数没有默认值
对于impdp来说,该参数只有一个值
```
DATA_OPTIONS=SKIP_CONSTRAINT_ERRORS
```
他表示在导入表/分区/子分区是遇到non-deferred 约束冲突时是的是否会继续
如果指定了则会继续并且记录下来
它不影响deferred constraint,因为无论如何违反它都会导致该表导入的失败
**举例**
```
> impdp hr TABLES=employees CONTENT=DATA_ONLY
DUMPFILE=dpump_dir1:table.dmp DATA_OPTIONS=skip_constraint_errors
```
##DIRECTORY
默认值:DATA_PUMP_DIR
该参数指定需要读取的dunp文件的位置以及保存日志和SQLFILE的位置
如果在dumpfile和logfile参数中指定了路径,则该路径覆盖directory参数的值
**举例**
```
> impdp hr DIRECTORY=dpump_dir1 DUMPFILE=expfull.dmp
LOGFILE=dpump_dir2:expfull.log
```
##DUMPFILE
默认值: expdat.dmp
该参数指定需要读取的dump文件的名称,也可以在其中指定目录
···
DUMPFILE=[directory_object:]file_name [, ...]
···
可以使用%U参数,这样操作会自动找出符合该模板的dump文件
```
> impdp hr DIRECTORY=dpump_dir1 DUMPFILE=dpump_dir2:exp1.dmp, exp2%U.dmp
```
导入动作会在dpump_dir2目录中找exp1.dmp文件
在dpump_dir1 中找exp2<nn>.dmp文件
日志文件写在dpump_dir1 中
##ENCRYPTION_PASSWORD
该参数没有默认值
该参数为用户指定的用于解密dump文件的密码,这样在导入的过程中会自动解密加密过的表等数据
**举例**
```
> impdp hr TABLES=employee_s_encrypt DIRECTORY=dpump_dir
DUMPFILE=dpcd2be1.dmp ENCRYPTION_PASSWORD=123456
```
##ESTIMATE
默认值: BLOCKS
该参数预估在network import模式中导入的数据量的方式
该参数只能和NETWORK_LINK 参数一起使用,因为如果是读取dump文件的话,数据库信息已经写在里面了
```
ESTIMATE={BLOCKS | STATISTICS}
```
**举例**
```
> impdp hr TABLES=job_history NETWORK_LINK=source_database_link
DIRECTORY=dpump_dir1 ESTIMATE=statistics
```
##EXCLUDE
该参数过滤你不需要导出的内容
不可以和INCLUDE同时使用
```
EXCLUDE=object_type[:name_clause] [, ...]
```
如果排除掉某张表,则其索引和触发器也将排除
我们可以在name_cluase中使用SQL来选择
```
EXCLUDE=INDEX:"LIKE 'EMP%'"
```
**举例**
```
EXCLUDE=FUNCTION
EXCLUDE=PROCEDURE
EXCLUDE=PACKAGE
EXCLUDE=INDEX:"LIKE 'EMP%' "
```
```
> impdp system DIRECTORY=dpump_dir1 DUMPFILE=expfull.dmp PARFILE=exclude.par
```
##FLASHBACK_SCN
该参数指定导入数据的数据库SCN号
必须和NETWORK_LINK参数同时使用
不能和FLASHBACK_TIME同时使用
**举例**
```
> impdp hr DIRECTORY=dpump_dir1 FLASHBACK_SCN=123456
NETWORK_LINK=source_database_link
```
## FLASHBACK_TIME
该参数指定导入的数据库的SCN时间
必须和NETWORK_LINK参数同时使用
不能和FLASHBACK_TIME同时使用
这里我们使用参数文件的形式来执行
**举例**
```
FLASHBACK_TIME="TO_TIMESTAMP('25-08-2003 14:35:00', 'DD-MM-YYYY HH24:MI:SS')"
```
```
> impdp hr DIRECTORY=dpump_dir1 PARFILE=flashback_imp.par NETWORK_LINK=source_database_link
```
##FULL
该参数表示导入全库
**举例**
```
> impdp hr DUMPFILE=dpump_dir1:expfull.dmp FULL=y
LOGFILE=dpump_dir2:full_imp.log
```
##HELP
默认值:
该参数用来显示命令行模式交互式命令的所有参数
```
HELP = {y | n}
```
##INCLUDE
该参数指定需要导入的对象
不可以和EXCLUDE同时使用
可以多次使用INCLUDE参数
```
INCLUDE = object_type[:name_clause] [, ...]
```
**举例**
```
INCLUDE=FUNCTION
INCLUDE=PROCEDURE
INCLUDE=PACKAGE
INCLUDE=INDEX:"LIKE 'EMP%' "
```
```
> impdp system SCHEMAS=hr DIRECTORY=dpump_dir1 DUMPFILE=expfull.dmp
PARFILE=imp_include.par
```
##JOB_NAME
默认值:系统自动生成(SYS_<IMPORT or SQLFILE>_<mode>_NN)
指定导入动作的JOB名称,可以用它来ATTCH到该任务
**举例**
```
> impdp hr DIRECTORY=dpump_dir1 DUMPFILE=expfull.dmp JOB_NAME=impjob01
```
##LOGFILE
默认值:import.log
该参数指定log文件的名称,也可以指定目录路径
如果文件已存在则会覆盖它
日志记录导出的过程和成功失败信息
除非指定NOLOGFILE 参数,否则日志文件总是被创建
```
LOGFILE=[directory_object:]file_name
```
**举例**
```
> impdp hr SCHEMAS=HR DIRECTORY=dpump_dir2 LOGFILE=imp.log
DUMPFILE=dpump_dir1:expfull.dmp
```
##NETWORK_LINK
该参数指定从一个远程数据库导入数据,使用DBLINK
这个命令在如下参数出现时必须加上
- FLASHBACK_SCN,
- FLASHBACK_TIME,
- ESTIMATE
- TRANSPORT_TABLESPACES
- TRANSPORTABLE
**举例**
该命令从远程数据库导入employees表,排除其中的约束
```
> impdp hr TABLES=employees DIRECTORY=dpump_dir1
NETWORK_LINK=source_database_link EXCLUDE=CONSTRAINT
```
##NOLOGFILE
默认值:n
该参数用于指定不需要记录日志
**举例**
```
> impdp hr DIRECTORY=dpump_dir1 DUMPFILE=expfull.dmp NOLOGFILE=Y
```
##PARALLEL
默认值:1
该参数指定导入动作的并行度,它可以用来提高导入的速度
不过要确保服务器的资源足够
一般我们和%U参数同时指定,用来同时读取多个文件
**举例**
```
> impdp hr DIRECTORY=dpump_dir1 LOGFILE=parallel_import.log
JOB_NAME=imp_par3 DUMPFILE=par_exp%U.dmp PARALLEL=3
```