基于版本:19c (12.2.0.3) AskScuti
主题:可刷新PDB如何进行切换操作
内容说明:本篇延续如何克隆可刷新的PDB(Refreshable PDB)一文,进行切换实验。
具体请参考《克隆可刷新的PDB》
内容总览
1. 环境概述
2. 如何刷新PDB
2.1 连接要刷新PDB所在的根容器
2.2 关闭要刷新的PDB
2.3 执行刷新
2.4 只读模式打开可刷新的PDB(或保留关闭状态)
3. 如何切换可刷新PDB
3.1 检查目标库环境
3.2 目标库创建用户并授权
3.3 源库编辑TNS
3.4 源库创建DBLink
3.5 源PDB与目标PDB进行切换
4. ORA-12754 的说明
1. 环境概述
具体请参考:如何克隆可刷新的PDB(Refreshable PDB)一文。
2. 如何刷新PDB
要刷新一个PDB,前提:该PDB必须是以包含REFRESH MODE MANUAL 或者 REFRESH MODE EVERY minutes 子句克隆出来的PDB。
2.1 连接要刷新PDB所在的根容器
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- --------- ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB1 MOUNTED
4 PDB_REF READ ONLY NO
5 PDB_REFAUTO MOUNTED
2.2 关闭要刷新的PDB
SQL> alter pluggable database pdb_ref close immediate; Pluggable database altered.
2.3 执行刷新
SQL> alter pluggable database pdb_ref refresh; Pluggable database altered.
2.4 只读模式打开可刷新的PDB(或保留关闭状态)
SQL> alter pluggable database pdb_ref open read only; Pluggable database altered.
3. 如何切换可刷新PDB
可以切换源PDB和可刷新PDB的身份角色。
需要注意的是
- 切换命令必须在源PDB中执行(ALTER PLUGGABLE DATABASE ... SWITCHOVER);
- 源库和可刷新库不在同一个CDB中时,两个CDB中DBLink指定的用户和密码必须完全一致;
- DBLink中的字符串必须指向PDB所在的根容器中。
3.1 检查目标库环境
[oracle@erp ~]$ rlwrap sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Sat Aug 31 21:10:03 2019
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- --------- ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB1 MOUNTED
4 PDB_REF READ ONLY NO
5 PDB_REFAUTO MOUNTED
3.2 目标库创建用户并授权
注意和源库一致
SQL> create user c##u1 identified by oracle; User created. SQL> grant create session,create pluggable database,sysoper to c##u1 container=all; Grant succeeded.
3.3 源库编辑TNS
CDB1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.12)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = CDB1)
)
)
3.4 源库创建DBLink
SQL> create database link cdb1_dblink connect to c##u1 identified by oracle using 'CDB1'; Database link created. SQL> select * from tab@cdb1_dblink; no rows selected
3.5 源PDB与目标PDB进行切换
切换前,看下源PDB的状态
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- --------- ---------- ----------
3 ERP1 READ WRITE NO <--- STATUS:READ WRITE
切换前,看下目标PDB的状态
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- --------- ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB1 MOUNTED
4 PDB_REF READ ONLY NO <--- STATUS:READ ONLY 只读
5 PDB_REFAUTO MOUNTED
在源数据库ERP1中执行切换命令
SQL> alter session set container=erp1;
Session altered.
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- --------- ---------- ----------
3 ERP1 READ WRITE NO
SQL> alter pluggable database refresh mode manual from pdb_ref@cdb1_dblink switchover;
Pluggable database altered.
切换后,看下源PDB状态
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ---------- ---------- ----------
3 ERP1 MOUNTED <--- 注意:由切换前的读写状态,变为了关闭状态(源库ERP1变为可刷新PDB)
切换后,看下目标PDB状态
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ---------- ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB1 MOUNTED
4 PDB_REF READ WRITE NO <--- 注意:由切换前的只读状态,变为了读写状态(目标PDB变为源PDB)
5 PDB_REFAUTO MOUNTED
最后以只读模式打开可刷新PDB - ERP1
SQL> alter pluggable database erp1 open read only;
Pluggable database altered.
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ---------- ---------- ----------
3 ERP1 READ ONLY NO
4. ORA-12754 的说明
如果环境是非Oracle Cloud使用,在执行 ALTER PLUGGABLE DATABASE refresh_mode FROM clonepdb@dblink SWITCHOVER; 命令时,将提示错误:
ERROR at line 1: ORA-12754: Feature PDB REFRESH SWITCHOVER is disabled due to missing capability
因为功能受到限制,作为学习测试使用,您可以自行通过某些方法进行解决,但请勿侵犯Oracle软件版权。