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用户修改权限

  1. alter user system identified by "Oracle123" container=all;
  2. GRANT SYSOPER TO system CONTAINER=ALL;
  3. grant create pluggable database to system container=all;

2.目标库创建到源库的link

  1. create public database link targetdblink connect to system identified by "Oracle123" using
  2. '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl)))';

3.创建刷新pdb

  1. CREATE PLUGGABLE DATABASE pdb3dg FROM pdb2@targetpdb2 REFRESH MODE MANUAL;

4.查看新创建的pbd3dg

  1. SQL> show pdbs
  2. CON_ID CON_NAME OPEN MODE RESTRICTED
  3. ---------- ------------------------------ ---------- ----------
  4. 2 PDB$SEED READ ONLY NO
  5. 3 ORCLPDB MOUNTED
  6. 4 PDB1 MOUNTED
  7. 5 FIXFPDB MOUNTED
  8. 6 PDB3DG MOUNTED
  9. 10 NOCDB MOUNTED

5.配置目标端刷新

  1. alter pluggable database pdb3dg refresh; 主动刷新
  2. ALTER PLUGGABLE DATABASE pdb3dg REFRESH MODE EVERY 1 MINUTES; 配置自动刷新

6.目标库查看同步信息

  1. select * from CDB_PDBS A;

7.查询刷新日志

  1. 查询运行job
  2. SELECT * FROM dba_scheduler_jobs d where d.job_name like '%REFRESH' ;
  3. 查询job 运行日志
  4. SELECT *FROM DBA_SCHEDULER_JOB_LOG N, DBA_SCHEDULER_JOB_RUN_DETAILS JRD
  5. WHERE N.LOG_ID = JRD.LOG_ID and N.JOB_NAME LIKE '%REFRESH'
  6. ORDER BY JRD.LOG_ID DESC;

8.执行switchover需要在Source PDB中执行

  1. 1.源库创建到目标库的dblink
  2. create public database link sourcedblink connect to system identified by "Oracle123" using
  3. '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 192.168.5.129)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl)))';
  4. 2.目标库执行
  5. alter user system identified by "Oracle123" container=all;
  6. GRANT SYSOPER TO system CONTAINER=ALL;
  7. grant create pluggable database to system container=all;
  8. ---------------如果数据库已打开则不用执行------------------
  9. alter session set container=pdb3dg;
  10. ALTER PLUGGABLE DATABASE open read only;
  11. 3 在源库执行切换
  12. alter session set container=pdb2;
  13. 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” 重启数据库,重新执行切换命令

  1. SQL> ALTER PLUGGABLE DATABASE REFRESH MODE MANUAL FROM pdb3dg@sourcedblink SWITCHOVER;
  2. ALTER PLUGGABLE DATABASE REFRESH MODE MANUAL FROM pdb3dg@sourcedblink SWITCHOVER
  3. *
  4. ERROR at line 1:
  5. ORA-12754: Feature PDB REFRESH SWITCHOVER is disabled due to missing capability
  6. alter system set "_exadata_feature_on"=true scope=spfile;