上周五,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;
4. 测试刷新情况
源端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上创建主备角色数据库。这样对于高可用和合理的硬件资源使用将会拥有更多的玩法。
老规矩,知道写了些啥。