在我长期的blog生涯,当需要迁移pdb的时候,出现了几种方式,基本上就是在线克隆或者datapump,然而这两种方式都需要一定的停机时间。在数据库版本一致的情况下,之前介绍的refreshable clone pdbs确实也可以实现,但是switchover功能本身是需要一体机环境的。本期介绍另一种迁移方式:relocate pdb。
1 基本概念
首先这是一个oracle 12.2开始的新特性,也就意味着数据库版本至少是12.2(这里用19c作为演示)。
relocating pdb可以将pdb移动到另一个cdb或者application container。在relocating过程中源pdb会一直保持全功能性读写状态直到目标pdb进入open状态。relocating过程是源pdb在open状态并维持活动会话的情况下线执行块级别的数据文件、redo和undo复制,当目标pdb通过alter pluggable database open命令将状态改为在线时,源pdb将关闭活动的会话并关闭pdb(并删除)。
这里需要注意,源端和目标端cdb都需要处于archivelog状态,源端和目标端之间需要创建dblink。
relocating pdb语句:
create pluggable database ... from src_pdb_name@link2src ... relocate availability [max | normal]
当源和目标共享同一个listener,使用availability normal(默认)。
当源和目标使用不同的listener,使用availability max。
2 演示环境
对象 | 名称 | tnsname |
---|---|---|
源cdb | prodcdb | prodcdb |
源pdb | relocate_pdb1 | / |
目标cdb | devcdb | devcdb |
在同一主机使用同一监听,sys/system密码均为oracle,未配置omf。
3 演示
3.1 源端、目标端cdb开启归档
shut immediate
startup mount
alter database archivelog;
alter database force logging;
alter database open;
--针对目标端
alter pluggable database relocate_pdb1 open;
alter pluggable database relocate_pdb1 save state;
3.2 授权
源端、目标端均需要:
grant create pluggable database,sysoper to system container=all;
3.3 创建dblink
源cdb:
create database link devcdb_link connect to system identified by oracle using 'devcdb';
目标cdb:
create database link prodcdb_link connect to system identified by oracle using 'prodcdb';
3.4 relocating pdb
目标cdb:
create pluggable database relocate_pdb1 from relocate_pdb1@prodcdb_link file_name_convert=('/u01/app/oracle/oradata/prodcdb/relocate_pdb1','/u01/app/oracle/oradata/devcdb/relocate_pdb1') relocate availability normal;
3.5 开启目标pdb
alter pluggable database relocate_pdb1 open;
目标pdb已为正常开启状态。
源cdb检查:
源pdb已被删除。
总结
本期讲解并演示了relocating pdb,这种pdb迁移方式通过实时在线数据同步,更加快捷简便。
老规矩,知道写了些啥。