os: 7.6.1810
db: oracle 19.3
在 oracle 12cr1 中,所有 pdb 只能共享使用 undo,被称为 Global Shared Undo 模式,即共享 Undo 模式 。
在 oracle 12cr2 中,每个 pdb 可以有自己独立的 undo ,被称为 PDB Local UNDO 模式,使用 dbca 创建数据库时, local undo 是默认勾选的.
同时由于引入了 local UNDO, PDB 可以热克隆.
在12.1版本中Clone一份PDB源库需要打开在 read only 只读模式, 在12.2版本中引入了local undo mode, 源PDB在read/write 读写模式也可以 Clone. 这样可以在复制一份测试环境时对源库影响降到最低, 同时 local undo mode也是ORACLE推荐的.
12.1 源PDB在read/write模式clone是不允许的.以前的 小例子12.1 clone pdb
ORA-65081: database or pluggable database is not open in read only mode
下面会演示一下12.2 的PDB HOT Clone, 开始前先补充一点local undo的知识.
版本
# lsb_release -a
LSB Version: :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description: CentOS Linux release 7.6.1810 (Core)
Release: 7.6.1810
Codename: Core
# su - oracle
$ sqlplus / as sysdba;
SQL*Plus: Release 19.0.0.0.0 - Production on Thu Jul 11 09:37:44 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> set lines 200;
set pages 200;
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
BANNER_FULL
----------------------------------------------------------------------------------------------------------------------------------------------------------------
BANNER_LEGACY CON_ID
-------------------------------------------------------------------------------- ----------
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production 0
SQL>
LOCAL_UNDO_ENABLED
SQL> set lines 200;
set pages 200;
col PROPERTY_NAME format a25;
col PROPERTY_VALUE format a25;
col DESCRIPTION format a40;
SQL> select PROPERTY_NAME,PROPERTY_VALUE,DESCRIPTION from database_properties where property_name='LOCAL_UNDO_ENABLED';
PROPERTY_NAME PROPERTY_VALUE DESCRIPTION
------------------------- ------------------------- ----------------------------------------
LOCAL_UNDO_ENABLED TRUE true if local undo is enabled
SQL> SELECT CON_ID,NAME FROM V$TABLESPACE A WHERE A.NAME LIKE 'UNDO%' ORDER BY CON_ID,TS# ;
CON_ID NAME
------ ------------------------------
1 UNDOTBS1
1 UNDOTBS2
2 UNDOTBS1
3 UNDOTBS1
3 UNDO_2
4 UNDOTBS1
4 UNDO_2
7 rows selected.
另外 Shared Undo 和 Local Undo 切换,可以参考帮助文档.
参考:
https://docs.oracle.com/en/database/oracle/oracle-database/19/multi/administering-a-cdb-with-sql-plus.html#GUID-24EA5811-94F0-4EEC-864F-23AEF48F2D51