Oracle 18c多租户增强:Refreshable PDB Switchover

简介

Oracle 12.2新增了Refreshable PDB的特性,在18c中可以互换Refreshable PDB和源PDB的角色,称为Refreshable PDB Switchover。

实验环境

源数据库:ORCLCDB,带1个PDB: orclpdb1
目标数据库:ORCLCDB2,无PDB
源和目标数据库可位于不同的服务器,本例为同一服务器,版本均为19c

先决条件

版本均为18c或以上。
Refreshable PDB为Exadata特性,本例使用了变通的方法:

alter system set "_exadata_feature_on"=true scope=spfile;
shutdown immediate;
startup;
show parameter exadata
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
_exadata_feature_on                  boolean     TRUE

两个数据库实例均需开启归档,此略。
两个数据库均需启用local undo,此略。
两个数据库均需建立指向对方的Database Link,首先在两个数据库中均执行以下脚本以建立克隆用户:

create user c##clone_admin identified by Welcome1;
grant create session, resource to c##clone_admin container=all;
grant create pluggable database to c##clone_admin container=all;
grant sysoper to c##clone_admin container=all;
alter user c##clone_admin set container_data=ALL container=current;
grant select on cdb_pdbs to c##clone_admin;

然后在目标数据库中:

create public database link clone_link connect to c##clone_admin identified by Welcome1 using 'ORCLCDB';

Database link created.

然后在源数据库中:

ORCLCDB> create public database link clone_link connect to c##clone_admin identified by Welcome1 using 'orclcdb2';

Database link created.

操作

在目标数据库实例上创建一Refreshable PDB,并置于只读状态:

ORCLCDB2> CREATE PLUGGABLE DATABASE orclpdb2 FROM orclpdb1@clone_link FILE_NAME_CONVERT=('ORCLPDB1', 'ORCLPDB2') REFRESH MODE MANUAL;

Pluggable database created.

ORCLCDB2> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB2                       MOUNTED

ORCLCDB2> ALTER PLUGGABLE DATABASE orclpdb2 OPEN READ ONLY;

Pluggable database altered.

ORCLCDB2> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB2                       READ ONLY  NO
 ORCLCDB2> SELECT pdb_id, pdb_name, refresh_mode, refresh_interval FROM   dba_pdbs;

    PDB_ID PDB_NAME   REFRES REFRESH_INTERVAL
---------- ---------- ------ ----------------
         2 PDB$SEED   NONE
         3 ORCLPDB2   MANUAL

在源数据库中,交换角色:

ORCLCDB> ALTER SESSION SET CONTAINER = orclpdb1;

Session altered.

ORCLCDB> ALTER PLUGGABLE DATABASE REFRESH MODE MANUAL FROM orclpdb2@clone_link SWITCHOVER;

Pluggable database altered.

ORCLCDB> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         3 ORCLPDB1                       MOUNTED
ORCLCDB> ALTER PLUGGABLE DATABASE OPEN READ ONLY;

Pluggable database altered.

ORCLCDB> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         3 ORCLPDB1                       READ ONLY  NO

此时在目标数据库中,数据库已变为可写,而且是非刷新状态:

ORCLCDB2> SELECT pdb_id, pdb_name, refresh_mode, refresh_interval FROM   dba_pdbs;

    PDB_ID PDB_NAME   REFRES REFRESH_INTERVAL
---------- ---------- ------ ----------------
         2 PDB$SEED   NONE
         3 ORCLPDB2   NONE

ORCLCDB2> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB2                       READ WRITE NO

而源数据库则变为可刷新状态,并为只读:

ORCLCDB> SELECT pdb_id, pdb_name, refresh_mode, refresh_interval FROM   dba_pdbs;

    PDB_ID PDB_NAME   REFRES REFRESH_INTERVAL
---------- ---------- ------ ----------------
         3 ORCLPDB1   MANUAL

ORCLCDB> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         3 ORCLPDB1                       READ ONLY  NO

回切和切换类似,此不赘述。

结论

Refreshable PDB Switchover和Data Guard不同,有可能会有数据丢失。不过也可以用于灾备。

参考

  1. Multitenant : Refreshable PDB Switchover in Oracle Database 18c

你可能感兴趣的:(Oracle,12c)