要确定当前CDB的undo模式
请在CDB根目录下执行如下查询:
SELECT PROPERTY_NAME, PROPERTY_VALUE
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME = 'LOCAL_UNDO_ENABLED';
结果为TRUE表示本地回滚段模式,FALSE为默认共享模式
一、本地UNDO模式
本地UNDO模式意味着每个容器对于打开它的每个实例都有自己的undo表空间。在这种模式下,Oracle数据库会自动为CDB中的每个容器创建一个undo表空间。
对于Oracle RAC CDB,在本地undo模式下,每个PDB的每个实例都有一个活动的undo表空间。
本地undo模式增强了每个容器的隔离性,并提高了某些操作的效率,例如拔掉容器的插头或在容器上执行时间点恢复。此外,某些操作需要支持本地undo模式,例如重新定位PDB或克隆处于开放读写模式的PDB。
当CDB处于本地undo模式时,适用于以下情况:
1、拥有当前容器的适当权限的任何用户都可以为容器创建undo表空间。
2、undo表空间在CDB中每个容器的静态数据字典视图和动态性能(V$)视图中可见。
二、共享UNDO模式
共享undo模式是指一个CDB实例只有一个活动的undo表空间。对于Oracle RAC CDB,每个实例都有一个活动的undo表空间。
当CDB配置为共享undo模式时,适用于:
1、只有具有适当权限且当前容器为CDB根的普通用户才能创建undo表空间。
2、当当前容器不是CDB根时,尝试创建undo表空间失败并返回错误。
3、当当前容器是CDB根时,Undo表空间在静态数据字典视图和动态性能(V$)视图中可见。只有当当前容器是PDB、应用程序根或应用程序PDB时, Undo表空间才在动态性能视图中可见。
三、配置CDB使用本地Undo模式
通过发出ALTER DATABASE local undo ON语句并重新启动数据库,可以将CDB更改为本地UNDO模式。
当CDB处于本地UNDO模式时,每个容器在其打开的每个实例中都有自己的UNDO表空间。Oracle数据库在CDB中没有undo表空间的容器中自动创建undo表空间。如果没有undo表空间的PDB被克隆、重新定位或插入到配置为使用本地undo模式的CDB中,则Oracle数据库会在PDB第一次打开时自动为其创建undo表空间。
当CDB从共享undo模式切换到本地undo模式时,Oracle会自动创建所需的undo表空间。
1、关闭CDB实例;
2、以OPEN UPGRADE模式启动CDB实例。
STARTUP UPGRADE
3、确认当前容器时CDB ROOT
SHOW CON_NAME
CON_NAME
-----------------------------
CDB$ROOT
4、查询CDB UNDO 模式:
SELECT PROPERTY_NAME, PROPERTY_VALUE
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME = 'LOCAL_UNDO_ENABLED';
5、开启本地UNDO模式
ALTER DATABASE LOCAL UNDO ON;
6、关闭并重启CDB实例
7、可选:在PDB seed中手动创建undo表空间。
当Oracle数据库在本地撤销模式下自动在PDB种子中创建撤销表空间时,您可能希望通过手动创建撤销表空间来控制撤销表空间的大小和配置。为了确保从PDB seed创建的PDB使用手动创建的undo表空间,而不是自动创建的undo表空间,必须将UNDO_TABLESPACE初始化参数设置为手动创建的undo表空间,或者删除自动创建的undo表空间。
a. In SQL*Plus, ensure that the current container is the root.
b. Place the PDB seed in open read/write mode:
ALTER PLUGGABLE DATABASE PDB$SEED OPEN READ WRITE FORCE;
c. Switch container to the PDB seed:
ALTER SESSION SET CONTAINER=PDB$SEED;
d. Create an undo tablespace in the PDB seed. For example:
CREATE UNDO TABLESPACE seedundots1 DATAFILE 'seedundotbs_1a.dbf'SIZE 10M AUTOEXTEND ONRETENTION GUARANTEE;
e. Switch container to the root:
ALTER SESSION SET CONTAINER=CDB$ROOT;
f. Place the PDB seed in open read-only mode:
ALTER PLUGGABLE DATABASE PDB$SEED OPEN READ ONLY FORCE;
四、配置共享CDB模式
1、关闭CDB实例;
2、以OPEN UPGRADE模式打开CDB实例;
STARTUP UPGRADE
3、确认当前容器时CDB ROOT
SHOW CON_NAME
CON_NAME
-----------------------------
CDB$ROOT
4、查询CDB UNDO 模式:
SELECT PROPERTY_NAME, PROPERTY_VALUE
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME = 'LOCAL_UNDO_ENABLED';
5. 关闭本地UNDO管理:
ALTER DATABASE LOCAL UNDO OFF;
6、关闭并重新启动CDB实例。
在共享UNDO模式下,CDB忽略在本地撤销模式下创建的任何本地撤销表空间。Oracle建议删除未使用的本地undo表空间。