实验环境
搭建平台:VMware Workstation
OS:OL 7.5
DB:Oracle 12.2.0.1
具体步骤
1. 为了避免用户对数据的更改导致克隆后的目标库数据与源库有出入, 可先把表空间改为read only模式,语法如下:
SQL> alter tablespace xxx read only;
2.使用数据泵导出
expdp <dumpuser>/<password>@<pdb名称> full=Y dumpfile=exp_full.dmp directory=<dump_dir> transportable=always logfile=export_full.log
注:
(1)使用expdp的全库导出的用户需要有DATAPUMP_EXP_FULL_DATABASE的权限
(2)Directory的查询方法:select * from dba_diretories; Directory的创建方法:create directory xxx as ‘<绝对路径>’;
(3)TRANSPORTABLE=ALWAYS搭配FULL=Y时,会把库的表空间分两类:可传输表空间与不可传输表空间(SYSTEM,SYSAUX这种系统表空间),会导出包含在传输表空间对象的元信息,以及对不可传输表空间上对象使用direct path以及external table方式导出元信息与数据
3.把源库的表空间改回read write状态
SQL> alter tablespace xxx read write;
4.在目标库上用数据泵导入
Impdp <dumpuser>/<password>@<pdb名称> full=Y dumpfile=exp_full.dmp directory=<dump_dir> transport_datafiles='/u01/app/oracle/oradata/dbname/test01.dbf','/u01/app/oracle/oradata/dbname/test02.dbf' logfile=import_full.log
注:
(1)需要把dmp文件传输到目标库,并创建目录对象directory
(2)使用impdp的全库导出的用户需要有DATAPUMP_EXP_FULL_DATABASE的权限
(3)需要使用transport_datafiles参数,例如这里导入的是test表空间的dbf文件, 如果dbf文件过多,则需要写入到parfile里面,否则会导致命令行过长无法正常执行:
Impdp <dumpuser>/<password>@<pdb名称> dumpfile=exp_full.dmp directory=<dump_dir> full=Y parfile=<文本文件绝对路径> logfile= import_full.log
Parfile文件里的内容:
transport_datafiles='/u01/app/oracle/oradata/dbname/test01.dbf','/u01/app/oracle/oradata/dbname/test02.dbf'