这节内容为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 ```