ORACLE之数据泵导出
- 导出数据泵(expdp):执行导出时,expdp先创建MT表,并将对象的信息插入MT表,开始执行实际的导出任务,当所有的对象都导出以后,将MT表也一起导出到转储文件中,等到导出任务完成或通过命令删除导出任务以后,将MT表也一并删除,如果是任务异常的终止,则MT表会保留。
- 导入数据泵(impdp):执行导入时,impdp先将MT表从转储文件读出,并写入到目标数据库中,然后读取MT表中所有的对象信息,根据读取出来的对象名称,将这些对象从转储文件中提取出来,并插入到目标数据库中。
- 基本操作:
//查看导出数据泵与导入数据泵参数
$expdp help=y
$impdp help=y
导出前提设置:
//创建临时目录
SQL> create directory linshi_dir as '/u01/app/oracle/expdp';
Directory created.
//授权给所有用户都可以读写
SQL> grant read, write on directory temp_dir to public;
Grant succeeded.
//查看当前临时目录情况
SQL> select * from all_directories;
各种导出方式:
-
导出全库:
expdp system/oracle directory=temp_dir full=y dumpfile=expdp_full%U.dmp logfile=expdp_full.log parallel=3 job_name=expdp_full_job
//采用了4个并行进程导出全库 -
导出某个或某几个用户:
expdp system/oracle directory=temp_dir dumpfile=expdp_schemas_%U.dmp schemas=scott, hr job_name=expdp_schemas_job
-
导出某个指定的表:
expdp hr/hr directory=temp_dir dumpfile=expdp_tables_%U.dmp tables=emp, dept job_name=expdp_tables_job job_name=expdp_tables_job
- %U表示:生成的文件名扩展为双字符,固定宽度,从01开始的单调递增的整数。
- parallel = 2:指定并行度为2,%U最终生成两个文件,文件数和并行度一致。
-
按查询条件导(只能使用参数文件方式)
expdp parfile=’/u01/app/oracle/expdp/expdp_query.par’
cat> /u01/app/oracle/expdp/expdp_query.par <<!
userid=hr/hr
directory=temp_dir
dumpfile=expdp_query.dmp
tables=emp, dept
query=emp:“where to_char(hire_date, ‘yyyy’)=‘2006’”, dept:“where department_id=50”
!
- 评估数据量:
expdp system/oracle directory=temp_dir schemas=hr estimate_only=y
- 查看当前作业
select owner_name, job_name, operation, job_mode, state from dba_datapump_jobs;
导出重要参数
ESTIMATE_ONLY 导出数据量评估,不真正导出。
VERSION 导出版本,用于跨版本数据迁移时使用,
其值可以为COMPATIBLE,或具体版本号,如11.2.0、11.2、10.2.1、10.2等等。
从11g的数据导入到10g中,expdp语句要加10g的版本号: version=10 或 用10g客户端的plsql导表工具
COMPRESSION 开启压缩,其值有:ALL, DATA_ONLY, [METADATA_ONLY] and NONE
EXCLUDE 不导出符合条件的对象,该参数只能在参数文件中使用。
exclude=table:" =‘T1’ "
exclude=table:" like ‘EMPLOYEES%’ "
exclude=table:" in (‘EMPLOYEES’,‘DEPARTMENTS’)"
exclude=schema:"=‘HR’"
INCLUDE 导出符合条件的对象
导入重要参数
CONTENT 指定要加载的内容,其值为:[ALL],DATA_ONLY,METADATA_ONLY.
[ALL] 表示默认为ALL。
TABLE_EXISTS_ACTION
当表存在时,impdp导入的方式:
APPEND 追加
REPLACE 删除表后新建
TRUNCATE 清空表后插入数据
REMAP_TABLESPACE 修改对象所在的表空间,其值为:tbs1:tbs2,tbs3:tbs4 …
REMAP_SCHEMA 修改对象所属的用户,其值为:user1:user2,user3:user4 …
REMAP_TABLE 修改对象名称
QUERY 按查询条件导入,QUERY=employees:“WHERE department_id > 10”