ORACLE 18C PDB REFRESH

ORACLE 18C PDB REFRESH

  • PDB REFRESH介绍

Oracle Database 12.2引入可刷新克隆pdb,这样我们可以快速创建生产环境的开发环境以及测试环境也创建单个pdb容灾,无需像adg一样需要整个库进行容灾,从而使特定pdb容灾更加简单与方便,ORACLE 18C支持源端pdb与目标refresh pdb进行switchover,使得pdb切换具备oracle adg切换一样灵活与方便.pdb refresh只是创建pdb众多方式中一种.

在这里插入图片描述

  • PDB REFRESH注意事项(目前处于测试阶段,翻阅了部分资料,欢迎指正
	如果PDB被Clone的到的CDB的字符集不是AL32UTF8,那么源与目标字符集必须兼容。
	源端与目标端的字节顺序必须相同。
	连接的用户在CDB中必须拥有'Create Pluggable Database'的权限。
	如果需要进行switchover,2边dblink的用户名与密码必须相同。
	需要在cdb级别创建dblink,pdb通过dblink来刷新以及switchover。
	源PDB不可以是关闭状态。
	源端PDB必须为归档模式。
	源端PDB必须是local undo模式。
	在Refreshable PDB创建后,如果源端需要创建相应表空间,那么目标端需要配置PDB_FILE_NAME_CONVERT参数或使用OMF目录管理方式(OMF级别高PDB_FILE_NAME_CONVERT),否正会导致目标端PDB刷新失败。
	目标端采用OMF目录管理方式后,Create Pluggable Database子句中不能指定file_name_convert做显示目录转换,否正报ORA-01276错误。
	在使用刷新目标PDB与源PDB同步数据时,是通过dblink从源PDB访问redo,但有些时候,当需要更新刷新副本时,源PDB或源PDB所属的CDB可能无法访问,在这种情况下,设置REMOTE_RECOVERY_FILE_DEST参数,将尝试从此参数指定的目录中读取归档日志文件。
	刷新与切换命令均需在目标PDB中执行。
	无论手动或自动刷新,目标库PDB必须处于MOUNT状态,不可以处于以READ ONLY 打开的状态。

  • PDB 刷新模式

1、手动刷新(Manual Refresh)
2、自动刷新(Auto Refresh)

  • Refresh PDB 工作方式

1、如果源端pdb数据库容量很大,refresh pdb需要持续较长时间,这个需要根据网络带宽、数据库IO以及目标IO等依赖关系
2、在使用刷新目标PDB与源PDB同步数据时,是通过dblink从源PDB访问redo,但有些时候,当需要更新刷新副本时,源PDB或源PDB所属的CDB可能无法访问,在这种情况下,设置REMOTE_RECOVERY_FILE_DEST参数,将尝试从此参数指定的目录中读取归档日志文件。

  • Refresh PDB实施
    在这里插入图片描述源端创建相关用户及DBLINK
---在CDB级创建用户
create user c##remote_clone_user identified by remote_clone_user container=all;

---授予创建会话,ANY TABLE,UNLIMITED TABLESPACE 等权限
grant create session, resource, create any table, unlimited tablespace to c##remote_clone_user container=all;

---授予创建PDB权限
grant create pluggable database to c##remote_clone_user container=all;

---授予SYSOPER权限
grant sysoper to c##remote_clone_user container=all;

---在CDB级创建DBLINK,USING使用的TNS的SERVICE_NAME为CDB的监听的SERVER名
create database link clone_link connect to c##remote_clone_user identified by remote_clone_user using 'refdb';

---测试DBLINK是否联通
select count(*) from dual@clone_link;

---TNS配置,根据实际进行更改
[TNS_NAME] =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.x.x)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = [CDB_SERVER_NAME])
    )
  )

源端创建相关用户及DBLINK

目标端建议配置与源端同样的USER及DBLINK_NAME,这样便于进行SWITCHOVER操作。步骤同主库。

检查omf是否设置

show parameter db_create_file_dest
如果存在则不需要进行 alter system set db_create_file_dest=xx;操作
PS:在Refreshable PDB创建后,如果源端需要创建相应表空间,那么目标端需要配置PDB_FILE_NAME_CONVERT参数或使用OMF目录管理方式(OMF级别高PDB_FILE_NAME_CONVERT),否正会导致目标端PDB刷新失败。


---源端查看PDB
SQL> show pdbs
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
        1 RED                             READ WRITE NO
        2 RED1                            READ WRITE NO
        3 RED2                            READ WRITE NO
        4 RED3                            READ WRITE NO
        5 RED4                            READ WRITE NO

---手动在目标端通过手动REFRESH创建备库(首次创建必须要进行手动刷新)
CREATE PLUGGABLE DATABASE redc FROM red@clone_link REFRESH MODE MANUAL;
CREATE PLUGGABLE DATABASE redc1 FROM red@clone_link REFRESH MODE MANUAL;
CREATE PLUGGABLE DATABASE redc2 FROM red@clone_link REFRESH MODE MANUAL;
CREATE PLUGGABLE DATABASE redc3 FROM red@clone_link REFRESH MODE MANUAL;
CREATE PLUGGABLE DATABASE redc4 FROM red@clone_link REFRESH MODE MANUAL;

---目标端创建完成后,查看PDB,状态,刷新模式,已经创建完成,并处于MOUNT状态
SQL> select pdb_id, pdb_name, status, refresh_mode,refresh_interval from cdb_pdbs;

    PDB_ID PDB_NAME   STATUS     REFRES REFRESH_INTERVAL
---------- ---------- ---------- ------ ----------------
         3 PDB        NORMAL     NONE
         2 PDB$SEED   NORMAL     NONE
         5 REDC1      REFRESHING MANUAL
         4 REDC       REFRESHING MANUAL
         6 REDC2      REFRESHING MANUAL
         7 REDC3      REFRESHING MANUAL
         8 REDC4      REFRESHING MANUAL
7 rows selected.

Elapsed: 00:00:00.00
SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB                            MOUNTED
         4 REDC                           MOUNTED
         5 REDC1                          MOUNTED
         6 REDC2                          MOUNTED
         7 REDC3                          MOUNTED
         8 REDC4                          MOUNTED

  • 测试DML是否可以同步(Manual Refresh)
---源库创建并查看测试表体积及记录行数
PDB_NAME      OWNER         SEGMENT_NAME         MB    NUM_ROWS
--------  ------------ -------------------- ---------- ----------
RED            SYS           REF_TB             9536   160000000
RED1           SYS           REF_TB            14944   256000000
RED2           SYS           REF_TB            14961   256000000
RED3           SYS           REF_TB            14961   256000000
RED4           SYS           REF_TB            14961   256000000

---源库、目标库均可以使用如下SQL进行查询
set line 300
col segment_name for a20
col owner for a20
select s.owner,s.segment_name,s.bytes/1024/1024 as "MB",t.num_rows 
from dba_segments s,dba_tables t 
where s.segment_name = t.table_name
and s.segment_name = 'REF_TB';


---目标库在进行同步时,必须处于MOUNT状态,如需验证数据,需要将数据库打开(只能以READ ONLY模式打开),如过是RAC模式,需要加上INSTANCES=ALL参数,否则只会在单个实例生效。

---单独打开某个PDB
alter pluggable database [PDB_NAME] open read only;

---打开所有PDB
alter pluggable database all open read only;

---进入PDB,查看表是否同步以及体积、行数
alter session set container=[PDB_NAME];


set line 300
col segment_name for a20
col owner for a20
select s.owner,s.segment_name,s.bytes/1024/1024 as "MB",t.num_rows 
from dba_segments s,dba_tables t 
where s.segment_name = t.table_name
and s.segment_name = 'REF_TB';
  • 自动刷新(Auto Refresh)
 
 ---将PDB更改为自动刷新,刷新间隔为1分钟(必须在MOUNT状态下更改)
 ALTER PLUGGABLE DATABASE [PDB_NAME] CLOSE;
 ALTER PLUGGABLE DATABASE ALL CLOSE;
 
 ALTER PLUGGABLE DATABASE redc REFRESH MODE EVERY 1 MINUTES;
 ALTER PLUGGABLE DATABASE redc1 REFRESH MODE EVERY 1 MINUTES;
 ALTER PLUGGABLE DATABASE redc2 REFRESH MODE EVERY 1 MINUTES;
 ALTER PLUGGABLE DATABASE redc3 REFRESH MODE EVERY 1 MINUTES;
 ALTER PLUGGABLE DATABASE redc4 REFRESH MODE EVERY 1 MINUTES;

---在ALERT日志中看到,PDB间隔1分钟,在进行PDB刷新,实际上则在执行手动REFRESH的命令
2019-11-20T11:08:13.998312+08:00
REDC(4):alter pluggable database refresh
REDC(4):Completed: alter pluggable database refresh
 2019-11-20T11:09:00.193416+08:00
REDC4(8):alter pluggable database refresh
REDC4(8):Completed: alter pluggable database refresh
REDC3(7):alter pluggable database refresh
REDC3(7):Completed: alter pluggable database refresh
REDC1(5):alter pluggable database refresh
REDC1(5):Completed: alter pluggable database refresh
2019-11-20T11:09:14.037151+08:00
REDC(4):alter pluggable database refresh
REDC(4):Completed: alter pluggable database refresh

大家还可以测试一下DATAFILE等刷新机制,需要注意OMF和PDB_FILE_NAME_CONVERT参数

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值