ITPub博客

首页 > 数据库 > Oracle > 19c refresh pdb

19c refresh pdb

原创 Oracle 作者:sjw1933 时间:2022-10-20 10:46:24 0 删除 编辑

Source:

hostname: dbn01

CDB: orcl 

PDB: pdb

IP :192.168.142.132

数据库版本:19.3.0.0.0

 

Dest:

hostname: dbn02

CDB:test

PDB: pdb_refresh

IP :192.168.142.133

数据库版本:19.9.0.0.0

 

前置条件

1  源端与目标端数据库版本需大于等于12.2

2  源端PDB 必须是local undo 模式。

3  源端PDB 必须为归档模式。

4  源端与目标端的字节顺序必须相同

5 Refreshable PDB 和源PDB 必须属于不同的CDB

6  源端PDB 不可以是关闭状态。

7 连接的用户在CDB 中必须拥有“Create Pluggable Database ”的权限。

8  在Refreshable PDB 创建后,如果源端需要创建相应表空间,那么目标端需要配置PDB_FILE_NAME_CONVERT 参数或使用OMF 目录管理方式(OMF 级别高于PDB_FILE_NAME_CONVERT) ,否正会导致目标端PDB 刷新失败。

9  目标端采用OMF 目录管理方式后,Create Pluggable Database 子句中不能指定file_name_convert 做显示目录转换,否则报ORA-01276 错误。

10  在使用Refreshable PDB 与源PDB 同步数据时,是通过dblink 从源PDB 访问redo ,但有些时候,当需要更新刷新副本时,源PDB 或源PDB 所属的CDB 可能无法访问,在这种情况下,设置REMOTE_RECOVERY_FILE_DEST 参数,将尝试从此参数指定的目录中读取归档日志文件。

11  刷新与切换命令均需在目标PDB 中执行。

                                             

确认源数据库是否处于归档模式:

SQL> archive log list

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            /arch

Oldest online log sequence     7

Next log sequence to archive   9

Current log sequence           9

 

确认源端PDB 状态:

SQL> show pdbs

 

    CON_ID CON_NAME         OPEN MODE  RESTRICTED

---------- -------------------------------------------------------------------------------------

         2 PDB$SEED         READ ONLY   YES

         3 PDB              READ WRITE  YES

 

确认源端PDB 是否为local undo 模式。

SQL> SELECT property_name, property_value FROM database_properties WHERE property_name = 'LOCAL_UNDO_ENABLED';

 

PROPERTY_NAME        PROPERTY_VALUE

-------------------- --------------------

LOCAL_UNDO_ENABLED   TRUE

 

源端PDB 创建用户并赋予权限

SQL> alter session set container=PDB;

SQL> CREATE USER ora19c IDENTIFIED BY oracle;

SQL> GRANT CREATE SESSION,RESTRICTED SESSION, SYSOPER to ora19c;

 

源端构造测试数据:

SQL> create table test as select * from dba_objects;

Table created.

 

SQL> select count(*) from test;

  COUNT(*)

----------

     72357

 

目标端创建指向源端的dblink

SQL>

create PUBLIC database link ora19c

connect to ora19c identified by orcale

using '(DESCRIPTION = (ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.142.132)(PORT = 1521)))

(CONNECT_DATA = (SERVICE_NAME = pdb)))';

 

目标端验证dblink 是否有效
SQL> select * from dual@ora19c;

D

-

X

 

目标端设置PDB_FILE_NAME_CONVERT 参数

SQL> 

ALTER SYSTEM SET pdb_file_name_convert='/ora11g/app/oradata/ORCL/pdb/','/opt/oracle/oradata/YLR/pdb_refresh/' SCOPE=spfile;

 

重启数据库生效

 

目标端CDB 执行创建Refreshable PDB 语句:

CREATE PLUGGABLE DATABASE <PDB_NAME>_refresh FROM <PDB_NAME>@<dblink> refresh mode every <x> minutes;

EG:

SQL> CREATE PLUGGABLE DATABASE pdb_refresh FROM pdb@ora19c refresh mode every 1 minutes;

Pluggable database created.

 

目标端查看Refreshable PDB 状态(新建好的Refreshable PDB 默认为MOUNTED ):

SQL> show pdbs

 

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

---------- ------------------------------ ---------- ----------

         2 PDB$SEED                       READ ONLY  NO

         4 PDB_REFRESH                    MOUNTED

 

Alert log :

目标端定时执行alter pluggable database refresh 命令,通过dblink 查询访问并应用源端归档:

/arch/parlog_1_9_9b620d0f_1082559119.arc

文本 描述已自动生成

 

目标端将Refreshable PDB 开启至read only 模式

SQL> alter pluggable database PDB_REFRESH open read only;

Pluggable database altered.

 

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

---------- ------------------------------ ---------- ----------

         2 PDB$SEED                       READ ONLY  NO

         4 PDB_REFRESH                    READ ONLY  NO

 

查看数据是否同步过来

SQL> alter session set container=PDB_REFRESH;

Session altered.

 

SQL> select count(*) from test;

 

  COUNT(*)

----------

     72357

 

目标端查看pdb 自动刷新模式:

SQL> select pdb_id, pdb_name, status, refresh_mode,refresh_interval from cdb_pdbs;

 

    PDB_ID PDB_NAME             STATUS     REFRES REFRESH_INTERVAL

---------- -------------------- ---------- ------ ----------------

         4 PDB_REFRESH          REFRESHING    AUTO           1

 

自动刷新/ 手工刷新模式均无法在open read only 状态下刷新,后台日志会报错报错:

2021-09-06T17:01:18.070527+08:00

PDB_REFRESH(4):alter pluggable database refresh

PDB_REFRESH(4):PDB_REFRESH(4):ERROR:PDB needs to be closed for auto refresh

PDB_REFRESH(4):Completed: alter pluggable database refresh

 

更改Refreshable PDB 为刷新模式:

手工刷新:

ALTER PLUGGABLE DATABASE PDB_REFRESH REFRESH MODE manual;

自动刷新:

ALTER PLUGGABLE DATABASE PDB_REFRESH REFRESH MODE EVERY 1 MINUTES; 

 

关闭Refreshable PDB ,手工刷新:

SQL> alter pluggable database PDB_REFRESH close immediate;

SQL> alter pluggable database PDB_REFRESH refresh;

SQL> alter pluggable database PDB_REFRESH open read only;

 

查看数据是否同步,源端新增的test2 表已同步过来:

SQL> select count(*) from test2;

  COUNT(*)

----------

     72358

 

Switchover 切换:

连接至cdb 中,检查pdb 状态:

源端:

SQL> ALTER SESSION SET CONTAINER = cdb$root;

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

---------- ------------------------------ ---------- ----------

         2 PDB$SEED                       READ ONLY  YES

         3 PDB                            READ WRITE YES

SQL> SELECT pdb_name, status FROM cdb_pdbs;

 

PDB_NAME   STATUS

---------- ----------

PDB        NORMAL

PDB$SEED   NORMAL

 

目标端:

SQL> ALTER SESSION SET CONTAINER = cdb$root;

SQL> show pdbs

 

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

---------- ------------------------------ ---------- ----------

         2 PDB$SEED                       READ ONLY  NO

         4 PDB_REFRESH                    READ ONLY  NO

 

SQL> SELECT pdb_name, status FROM cdb_pdbs;

 

PDB_NAME             STATUS

-------------------- ----------

PDB$SEED             NORMAL

PDB_REFRESH          REFRESHING

 

SQL> ALTER SESSION SET CONTAINER = PDB_REFRESH;

Session altered.

 

SQL> ALTER PLUGGABLE DATABASE REFRESH MODE EVERY 1 MINUTES FROM PDB_REFRESH@ora19c SWITCHOVER;

ALTER PLUGGABLE DATABASE REFRESH MODE EVERY 1 MINUTES FROM PDB_REFRESH@ora19c SWITCHOVER

*

ERROR at line 1:

ORA-12754: Feature PDB REFRESH SWITCHOVER is disabled due to missing capability .

 

12754, 00000, "Feature %s is disabled due to missing capability %s."

// *Document: NO

// *Cause: This feature requires specific capabilities that were not present

//         in the current database instance.

// *Action: Contact Oracle Support Services to enable this feature.

 

夭折~(总结:需要在exadata上面才可以使用此特性)

 

参考文档:

Administrator’s Guide

 

Data Guard Impact on Oracle Multitenant Environments (Doc ID 2049127.1)     

How to create refreshable PDB (Doc ID 2441949.1)     

 

Switching Over a Refreshable Cloned PDB

 

https://blog.csdn.net/dev_csdn/article/details/79608412


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23825935/viewspace-2919308/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
11年数据库行业经验,Oracle ACE、PG ACE、OCM、IBM Certified DBA、MySQL OCP、PolarDB技术专家、KCP、PCTP、PCSD、达梦师资认证、PolarDB开源社区技术顾问、ITPUB认证专家、某高校外聘教师

注册时间:2019-05-05

  • 博文量
    295
  • 访问量
    300726