If you have databases that run in shared undo mode you should switch to local undo mode. Starting from 12.2 this is the default and recommended undo mode, and it offers a lot of cool functionality. Obviously, at the expense of having multiple undo tablespaces. There are already many good blog posts out there that the benefits of local undo and how to enable it.
AutoUpgrade To The Rescue
If you are planning an upgrade with AutoUpgrade, you can also enable local undo during the upgrade. You should simply just configure it in the config file:
upg1.enable_local_undo=YES
And AutoUpgrade will take care of the rest for you. It will even create undo tablespaces in PDB$SEED and all of the PDBs. Once again AutoUpgrade can make your life easier.
What Happens
Before creating the new undo tablespaces, the database will determine the attributes of the tablespace. By default, it will use a ratio of 30% compared to CDB$ROOT:
- Initial data file size (calculated from current file size)
- Maximum data files size (MAXBYTES)
- Grow by (INCREMENT_BY)
Example (default ration 30 %):
Attribute | CDB$ROOT | PDB |
---|---|---|
Initial data file size | current file size, 500M | 150M |
Maximum data file size | 32G | 9.6G |
Grow by | 5M | 1.5M |
You can control the ratio using the parameter _seed_root_undo_ratio
in CDB$ROOT. To set the percentage to 10% use the following command before the upgrade:
ALTER SYSTEM SET "_seed_root_undo_ratio"=10 SCOPE=SPFILE;
With this knowledge you can now calculate the space you need for all those extra undo tablespaces. Thus, you can avoid to run out of disk space, or have the tablespace set at undesirable size.
After the upgrade, I would advice you to review the undo tablespace size per PDB. Different workload requires different amount of undo. And especially the increment_by attribute can become so low that it will lead to too frequent data file grow operations.
If your database is already in local undo mode then the parameter _seed_root_undo_ratio
has no effect at all. The database will not start a grow or shrink operation to meet the ratio defined by the parameter. Once you have switched to local undo mode, you are in full control yourself.
Conclusion
Be sure to enable local undo for all CDBs databases when you upgrade to 12.2 or later releases. If you have many PDBs and you use AutoUpgrade to enable it, be aware of disk space needed for all those tablespaces. And review the settings afterwards.
Mike Dietrich wrote about a similar situation when you create CDBs using DBCA.
Resources
- Oracle Database 19c, Administrator’s Guide: Choose the Undo Mode
- Oracle Database 19c, Administrator’s Guide: Setting the Undo Mode in a CDB Using ALTER DATABASE
- External blog post 1: Oracle 12cR2 multitenant: Local UNDO
- External blog post 2: Undo Modes in 12.2 Multitenant Databases – Local and Shared Modes