There are two undo modes in oracle 12.2 Multitenant database
1. Local undo mode
2. Shared undo mode
Local undo mode:
In this mode, each container ( i.e PDB ) in multitenant will have their own active undo tablespace.
Share Undo mode:
In this mode, There will be only one undo tablespace for the instance.
NOTE – In previous releases, undo was in shared mode.
NOTE – From oracle 12.2, Oracle recommends to use local undo mode only.
How to check the current undo mode:
select * from database_properties where property_name='LOCAL_UNDO_ENABLED'; PROPERTY_NAME PROPERTY_VALUE -------------------- --------------- LOCAL_UNDO_ENABLED TRUE
Convert local undo mode to shared undo mode:
select * from database_properties where property_name='LOCAL_UNDO_ENABLED'; PROPERTY_NAME PROPERTY_VALUE -------------------- --------------- LOCAL_UNDO_ENABLED TRUE SQL> sho con_name CON_NAME ------------------------------ CDB$ROOT shutdown immediate; startup upgrade; SQL> ALTER DATABASE LOCAL UNDO off; Database altered. select * from database_properties where property_name='LOCAL_UNDO_ENABLED'; PROPERTY_NAME PROPERTY_VALUE -------------------- --------------- LOCAL_UNDO_ENABLED FALSE shutdown immediate; startup alter pluggable database PDB1 OPEN READ WRITE; ALTER PLUGGABLE DATABASE PDB2 OPEN READ WRITE;
After converting to shared undo mode, the individual undo tablespaces won’t be dropped automatically.
We have to drop them manually, by connecting to the respective database.
select a.CON_ID,a.TABLESPACE_NAME,b.FILE_NAME from cdb_tablespaces a,CDB_DATA_FILES b where a.TABLESPACE_NAME=b.TABLESPACE_NAME and a.con_id=b.con_id and a.CONTENTS='UNDO'; CON_ID TABLESPACE_NAME FILE_NAME ---------- ---------------- ---------------------- 1 UNDOTBS1 /u01/app/oracle/oradata/orcl/undotbs01.dbf 2 UNDOTBS1 /u01/app/oracle/oradata/orcl/pdb1/undotbs01.dbf 3 UNDOTBS1 /u01/app/oracle/oradata/orcl/pdb2/undotbs01.dbf SQL> ALTER SESSION SET CONTAINER=PDB1; Session altered. SQL> drop tablespace UNDOTBS1 including contents and datafiles; Tablespace dropped. SQL> ALTER SESSION SET CONTAINER=PDB2; Session altered SQL> drop tablespace UNDOTBS1 including contents and datafiles; Tablespace dropped.
Convert shared undo mode to local undo mode:
select * from database_properties where property_name='LOCAL_UNDO_ENABLED'; PROPERTY_NAME PROPERTY_VALUE -------------------- --------------- LOCAL_UNDO_ENABLED FALSE shutdown immediate; startup upgrade; alter database local undo on; select * from database_properties where property_name='LOCAL_UNDO_ENABLED'; PROPERTY_NAME PROPERTY_VALUE -------------------- --------------- LOCAL_UNDO_ENABLED TRUE shutdown immediate; startup alter pluggable database PDB1 OPEN READ WRITE; ALTER PLUGGABLE DATABASE PDB2 OPEN READ WRITE;
Once local undo is enabled, individual undo tablespaces will be created automatically for each PDB.