1.从12.2开始:
PDB Refresh是12.2推出的特性,具有对源端PDB进行增量同步的功能,每次刷新会将源端PDB中的任何更改同步到目标PDB(在此环境中目标PDB被称作Refreshable PDB)中,目前增量同步方式有两种:手动方式与自动方式。
一、Refresh MODE语句
在使用Create Pluggable Database创建PDB时指定Refresh MODE子句用来控制是否开启刷新机制。
该子句目前只在”Create Pluggable Database… From”中支持,可以使用此语句指定如下选项:
l 指定Refresh MODE NONE,这是默认方式,在创建PDB时不开启刷机机制。
l 指定Refresh MODE MANUAL子句,创建手动刷新的PDB。
l 指定Refresh MODE EVERY number_of_minutes MINUTES子句,创建以周期性刷新的PDB。这种方式的实现方式是通过定时SCHEDULE job的方式实现的。
另外,Oracle 18c对Refreshable PDB进行了进一步的增强,增强为Refreshable PDB Switchover(可刷新PDB的切换),在12.2.1中源PDB只能作为源端PDB,而在18c中可对源PDB和目标PDB进行角色转换(PDB Switchover),该功能类似Active Dataguard的主备切换,只不过Oracle在PDB Refresh中再次实现了该功能。
目前Refreshable PDB只能在只读模式下打开,当Refreshable PDB进行刷新时,Refreshable PDB必须处于关闭状态,只读模式打开时会停止刷新,当再次关闭Refreshable PDB时继续上次的刷新,也可以将Refreshable PDB更改为Refresh MODE NONE模式,更改之后你无法在将PDB改为Refreshable PDB。实际上刷新的过程就是一个介质恢复的过程。
另外也可以使用Alter Pluggable Database命令将Refreshable PDB从手动刷新更改为自动刷新,也可以从自动刷新更改为手动刷新,同样通过语句Alter Pluggable Database +Refresh MODE更改为非Refreshable PDB,但是非Refreshable PDB不可以被更改为Refreshable PDB。
需要注意的是,Source PDB和Refreshable PDB可以属于同一个CDB也可以属于不同的CDB,但是在创建Refreshable PDB时必须指定DBlink,DBlink指向自己所在的CDB,否则语法无法通过。
Refreshable PDB的应用场景可以用在开发和测试环境的搭建过程中, 因为数据是采用增量同步的方式,这样就减少了对源数据库的影响,也可以作为online备份库。
Clone源端的PDB前期注意事项:
n 如果PDB被Clone的到的CDB的字符集不是AL32UTF8,那么源与目标字符集必须兼容。
n 源端与目标端的字节顺序必须相同。
n 连接的用户在CDB中必须拥有’Create Pluggable Database’的权限。
n 源PDB不可以是关闭状态。
n 源端CDB必须为归档模式。
n 源端PDB必须是local undo模式。
n 在Refreshable PDB创建后,如果源端需要创建相应表空间,那么目标端需要配置PDB_FILE_NAME_CONVERT参数或使用OMF目录管理方式(OMF级别高于PDB_FILE_NAME_CONVERT),否则会导致目标端PDB刷新失败。
n 目标端采用OMF目录管理方式后,Create Pluggable Database子句中不能指定file_name_convert做显示目录转换,否则报ORA-01276错误。
n 在使用刷新目标PDB与源PDB同步数据时,是通过dblink从源PDB访问redo,但有些时候,当需要更新刷新副本时,源PDB或源PDB所属的CDB可能无法访问,在这种情况下,设置REMOTE_RECOVERY_FILE_DEST参数,将尝试从此参数指定的目录中读取归档日志文件。
n 刷新与切换命令均需在目标PDB中执行。
oracle 主机 | pdb | |
---|---|---|
源端 | 192.168.5.128 | pdb2 |
目标端 | 192.168.5.129 | pdb2dg |
1.源库system用户修改权限
alter user system identified by "Oracle123" container=all;
GRANT SYSOPER TO system CONTAINER=ALL;
grant create pluggable database to system container=all;
2.目标库创建到源库的link
create public database link targetdblink connect to system identified by "Oracle123" using
'(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl)))';
3.创建刷新pdb
CREATE PLUGGABLE DATABASE pdb3dg FROM pdb2@targetpdb2 REFRESH MODE MANUAL;
4.查看新创建的pbd3dg
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 ORCLPDB MOUNTED
4 PDB1 MOUNTED
5 FIXFPDB MOUNTED
6 PDB3DG MOUNTED
10 NOCDB MOUNTED
5.配置目标端刷新
alter pluggable database pdb3dg refresh; 主动刷新
ALTER PLUGGABLE DATABASE pdb3dg REFRESH MODE EVERY 1 MINUTES; 配置自动刷新
6.目标库查看同步信息
select * from CDB_PDBS A;
7.查询刷新日志
查询运行job
SELECT * FROM dba_scheduler_jobs d where d.job_name like '%REFRESH' ;
查询job 运行日志
SELECT *FROM DBA_SCHEDULER_JOB_LOG N, DBA_SCHEDULER_JOB_RUN_DETAILS JRD
WHERE N.LOG_ID = JRD.LOG_ID and N.JOB_NAME LIKE '%REFRESH'
ORDER BY JRD.LOG_ID DESC;
8.执行switchover需要在Source PDB中执行
1.源库创建到目标库的dblink
create public database link sourcedblink connect to system identified by "Oracle123" using
'(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 192.168.5.129)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl)))';
2.目标库执行
alter user system identified by "Oracle123" container=all;
GRANT SYSOPER TO system CONTAINER=ALL;
grant create pluggable database to system container=all;
---------------如果数据库已打开则不用执行------------------
alter session set container=pdb3dg;
ALTER PLUGGABLE DATABASE open read only;
3、 在源库执行切换
alter session set container=pdb2;
ALTER PLUGGABLE DATABASE REFRESH MODE MANUAL FROM pdb3dg@sourcedblink SWITCHOVER;
报错:ORA-12754: Feature PDB REFRESH SWITCHOVER is disabled due to missing capability
开启参数”_exadata_feature_on” 重启数据库,重新执行切换命令
SQL> ALTER PLUGGABLE DATABASE REFRESH MODE MANUAL FROM pdb3dg@sourcedblink SWITCHOVER;
ALTER PLUGGABLE DATABASE REFRESH MODE MANUAL FROM pdb3dg@sourcedblink SWITCHOVER
*
ERROR at line 1:
ORA-12754: Feature PDB REFRESH SWITCHOVER is disabled due to missing capability
alter system set "_exadata_feature_on"=true scope=spfile;