数据库管理-第107期 Relocating PDB(20230927)
在我长期的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迁移方式通过实时在线数据同步,更加快捷简便。
老规矩,知道写了些啥。