数据泵
导出部分:
1.创建directory对象
SQL> create or replace directory scott_dir_test as '/data/dumpdir';--如果是多租户数据库的话一定要注意在不是在pdb下面执行的;
目录对象创建后需要给使用用户授权:
SQL> grant read,write on directory scott_dir_test to scott; --关于权限问题,如果scott具有DBA的权限是不需要授予的;
2.参数说明
2.1 directory
directory 指向文件保存的directory对象,也就是我们使用create or replace directory创建的directory对象;
2.2 dumpfile
dumpfile 用来指定我们生成的数据泵文件
1)非并行作业(paralell opration):不需要特别指定paralell参数(默认为1);
2)并行作业(paralell opration):dumpfile参数使用逗号分隔多个文件,parallel参数值等于dumpfile的指定文件数量;
%U:替换变量,将从01开始直到99,生成的文件个数与parallel的参数值一致;
expdp scott/tiger@192.168.88.20:1521/pdb_orcl1 directory=scott_dir_test dumpfile=scott_expdp_%U.dmp paralell=3
2.3 filesize
可选参数,该参数用来指定导出文件的大小:filesize=100M
2.4 parfile
用来指定参数文件,使用参数文件代替又长又臭的命令行参数
我们创建parfile:
[oracle@server parfile]$ cat scott_expdp_par.txt
userid=scott/tiger@192.168.88.20:1521/pdb_orcl1
directory=scott_dir_test
pumpfile=scott_expdp_1227.dmp
reuse_dumpfiles=Y
tables=EMPLOYEES
调用参数文件执行:
[oracle@server parfile]$ expdp parfile=scott_expdp_par.txt
2.5 LOGFILE
LOGFILE参数用来为导出任务指定生成一份日志文件,不指定的话会生成export.log的日志文件
2.6 NOLOGFILE
使用NOLOGFILE参数,Oracle将不产生日志文件但是可以在会话框看到作业动态。
2.7 REUSE_DUMPFILES
REUSE_DUMPFILES如果导出文件已经存在,是否覆盖(默认不覆盖):reuse_dumpfiles=Y/N;
2.8 COMPRESSION
压缩参数,可以指定对何种类型数据进行压缩操作
ALL:压缩所有:COMPRESSION=ALL
DATA_ONLY:仅数据被压缩:COMPRESSION=DATA_ALL
METADASTA_ONLY:只有元数据被压缩(默认压缩方式),元数据是对数据的表述,表结构之类信息:COMPRESSION=METADATA_ONLY
NONE:不进行压缩:COMPRESSION=NONE
3.导出方式
导出方式分为全库导出、schema级导出、表空间级导出、表级导出,具体的导出方式需要按照你的需求酌情考量
3.1 全库导出
需使用full参数(导出用户要具有相应权限)
expdp scott/tiger@192.168.88.20:1521/pdb_orcl1 directory=scott_dir_test dumpfile=scott_expdp_1227.dmp reuse_dumpfiles=Y full=Y
或者使用
expdp scott/tiger@192.168.88.20:1521/pdb_orcl1 dumpfile=scott_dir_test:scott_expdp_1227.dmp reuse_dumpfiles=Y full=Y
3.2 schema级导出
expdp scott/tiger@192.168.88.20:1521/pdb_orcl1 dumpfile=scott_dir_test:scott_expdp_1227.dmp reuse_dumpfiles=Y schemas =scott
3.3 表空间级导出
若使用TRANSPORT_TABLESPACES option那么将只导出一个或者多个表空间的对象的matedata
expdp scott/tiger@192.168.88.20:1521/pdb_orcl1 dumpfile=scott_dir_test:scott_expdp_1227.dmp reuse_dumpfiles=Y tablespaces =scott_data_ts;
3.4 表级导出
expdp scott/tiger@192.168.88.20:1521/pdb_orcl1 dumpfile=scott_dir_test:scott_expdp_1227.dmp reuse_dumpfiles=Y tables=EMPLOYEES
4.对象过滤
4.1 CONTENT
CONTENT=ALL
:导出表与表数据以及其它对象的定义(默认为ALL)
CONTENT=DATA_ONLY
:只导出表数据
CONTENT=METADATA_ONLY
:只导出元数据
4.2 EXCLUDE
exclude=table:"in('TABLE_1','TABLE_2')" --会报错:ORA-39071: Value for EXCLUDE is badly formed
exclude=table:\" in\(\'TABLE_1\',\'TABLE_2\'\) \" --不会报错
使用参数文件也是不会报错的,建议使用参数文件
同样地我们可以对:index、procedure、function、schema进行筛选
attention: CONTENT=DATA_ONLY情况下EXCLUDE参数不适用 EXCLUDE和INCLUDE参数不可同时使用
4.3 INCLUDE
include=table:\" in\(\'TABLE_1\',\'TABLE_2\'\) \"
attention: CONTENT=DATA_ONLY情况下INCLUDE参数不适用 EXCLUDE和INCLUDE参数不可同时使用
4.5 QUERY
可以指定符合条件字段的记录导出
query=EMPLOYEES:\"where dept=\'DBA\'\"
使用逗号分割实现多个表的条件筛选
4.6 SAMPLE
对于一些表,我们可能不需要全部的数据,使用sample参数可以指定抽取百分比级数据量、
sample=50
:抽取50%数据
sample="TABLE_1":50,"TABLE_2":50
5.作业参数
5.1 job_name
用来指定导出作业的名称,也可以不定义,系统会自动给分配作业名称。
job_name=scott_expdp_job
5.2 status
status参数用来指定目标时间间隔,输出当前作业完成度百分比,状态等,其单位是秒级单位
status=1
5.3 paralell
可以与指定dumpfile的数量,paralell参数大小的设定应该参考CPU的核心数,否则会带来不必要的性能影响
导入部分:
导入的角色也应该具备有相应的额权限;
1.参数说明
与expdp保持一致的参数:PARALLEL、directory、dumpfile、logfile、nologfile、ontent、exclude、include、query、job_name、status、parallel
差异参数:
sqlfile参数可以导出dmp文件中的DDL语句,生成指定文件sqlfile=scott_imp_sqlfile.sql
table_exists_action针对目标端已经存在将要导入的表的处理:
1)table_exists_action=skip
:跳过已经存在表的数据导入
2)table_exists_action=append
:追加数据到已有表中(注意非空且唯一的数据,遇到冲突将不能导入)
3)table_exists_action=truncate
:先清空表再进行导入
4)table_exists_action=replace
:先drop再新建并导入
2.重映射
2.1 remap_table
表名重映射,如果你使用TABLE_A作为导出表但是在目标端想使用TABLE_B作为导入表那么可以使用该参数
remap_table=TABLE_A:TABLE_B
impdp scott/tiger@192.168.88.20:1521/pdb_orcl1 dumpfile=scott_dir_test:scott_expdp_1227.dmp tables=EMPLOYEES table_exists_action=replace remap_table=employees:workers;
2.2 remap_schema
模式重映射,如果你使用的是scott用户进行对象导出但是在目标端想使用HR用户进行对象导入,那么就可以使用该参数
remap_schema=scott:hr
2.3 remap_tablespace
表空间重映射,如果你使用的是TS_A作为源对象的表空间但是在目标端想使用TS_B作为目标对象导入的表空间,那么就可以使用该参数
remap_tablespace=TS_A:TS_B
2.4 remap_data
被大众成为数据脱敏参数,我们可以使用不同的数据来替代掉源字段的数据
remap_data=scott.employees.dept:scott.table_temp.A
交互参数
对于正在运行的有些job我们希望仍然可以对其进行操作,那么我们可以使用交互式命令进行。
进入交互界面
1)使用Ctrl+C,从正在执行任务的窗口进入到交互界面
2)使用attach:expdp userid=scott/tiger attach=job
的名字
主要命令
help
:帮助命令可以用来展示所有命令及其使用方式
stop_job
:用来停止当前的job
start_job
:用来启动当前处于停止状态的job
kill_job
:终止任务并释放资源
exit_client
:可以让当前正在运行的job在后台运行,不占用当前前台界面
continue_client
:可以让job继续打印作业信息
add_file
:新增一个dumpfile文件add_file=scott_expdp_add01.dmp
parallel
:修改并行数量paralell=2
例如:
expdp userid=scott/tiger attach=SYS_EXPORT_SCHEMA_01
Export> stop_job