数据库管理-第100期 Refreshable Clone PDBs(20230905)
上周五,9月1日,我于上海Oracle办公室OU考场完成了19c OCM Upgrade考试,感受就是,很多新特性考的比想象的更加深入,希望最终结果是好的吧。
来到9月第一篇,我的文章也来到了100期,感触颇多,这里也拿一个Oracle数据库的新特性来给100期做个总结,也为即将到来的23c PDB级别ADG打个前哨。
1 概念
Refreshable Clone PDBs,即可刷新的克隆PDB,除去官方文档的各种弯弯绕绕,其实应对的场景就是使用dblink在不同CDB中克隆源CDB中的一个PDB,并添加refresh mode参数,使得目标PDB可以自动或手动方式从源PDB中刷新至最新数据状态,并可以进行切换。这一特性可以看做一个非实时同步的PDB级别的ADG,目标PDB可以提供只读状态的读能力。
2 示例环境
源端CDB:PRODCDB,源端PDB:PDBPROD1
目标CDB:DEVCDB,目标PDB:HOTCLONE_PDB1
二者sys用户密码均为oracle
二者均配置OMF至/u01/app/oracle/oradata
注:由于switchover需要Exadata特性支持,普通环境需要预先要执行下面操作:
alter system set "_exadata_feature_on"=true scope=spfile;
3 示例操作
- 创建用于dblink及克隆PDB的用户并赋权(主要需要增加sysoper权限)。
- 源端CDB与目标CDB互相创建dblink。
conn sys/oracle@prodcdb as sysdba
create user c##user1 identified by oracle container=all;
grant connect,resource to c##user1 container=all;
grant create pluggable database to c##user1 container=all;
grant sysoper to c##user1 container=all;
alter user c##user1 set container_data=ALL container=current;
grant select on cdb_pdbs to c##user1;
conn sys/oracle@devcdb as sysdba
create user c##user1 identified by oracle container=all;
grant connect,resource to c##user1 container=all;
grant create pluggable database to c##user1 container=all;
grant sysoper to c##user1 container=all;
alter user c##user1 set container_data=ALL container=current;
grant select on cdb_pdbs to c##user1;
create database link prodcdb_link connect to c##user1 identified by oracle using 'prodcdb';
conn sys/oracle@prodcdb as sysdba
create database link devcdb_link connect to c##user1 identified by oracle using 'devcdb';
- 创建可刷新PDB
conn sys/oracle@devcdb as sysdba
create pluggable database hotclone_pdb1 from pdbprod1@prodcdb_link refresh mode every 5 minutes;
select pdb_name,status,refresh_mode,refresh_interval from cdb_pdbs;
alter pluggable database hotclone_pdb1 open read only;
- 测试刷新情况
源端PDB建立测试表之后,目标PDB未实时更新。
一段时间后,目标端PDB仍然无法查询到测试表。
这里官方文档也有说明,需要在closed状态才能自动refresh,因此关闭目标PDB等待一段时间后再开启并查询:
这时是可以在目标端查询到测试表,所以这里的目标PDB可读,也还是比较坑。
- 进行switchover
conn sys/oracle@pdbprod1 as sysdba
alter pluggable database refresh mode every 5 minutes from hotclone_pdb1@devcdb_link switchover;
conn sys/oracle@prodcdb as sysdba
select pdb_name,status,refresh_mode,refresh_interval from cdb_pdbs;
切换完成,这里就不再做反向同步测试。
总结
Refreshable PDB就在19c版本上实现的功能来说,目前看起来还是比较鸡肋的。但是随着21c上PDB级别DG的实现,以及23c上PDB级别ADG的到来,CDB彻底沦为底座,PDB可以随意在各个CDB上创建主备角色数据库。这样对于高可用和合理的硬件资源使用将会拥有更多的玩法。
老规矩,知道写了些啥。