【BUILD_ORACLE】使用Oracle数据泵在线不停机克隆/迁移PDB

时间:2022-11-18 18:09:24

实验环境

搭建平台: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'