[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条件的数据