When you upgrade your Oracle Database, you should also decide how to raise the COMPATIBLE
parameter. The considerations are the same when you use Data Guard, but the procedure is different.
Why
The main reason for raising COMPATIBLE
is to enable new features.
Some new features are not backward compatible, e.g., blockchain tables. When someone introduces such features, the database:
- is no longer backward compatible
- can no longer be downgraded
When you upgrade, COMPATIBLE
stays at the old setting. You need to actively raise it and allow the use of these new features. You are in total control.
Here is a video with more details about COMPATIBLE
.
When
I recommend that you raise COMPATIBLE
one or two weeks after the upgrade.
- When you have seen that the new release works fine in production.
- When you are confident that a database downgrade won’t be needed.
Raising COMPATIBLE
requires a database restart, i.e., an outage. If such is unacceptable, you must raise COMPATIBLE
as part of the upgrade. But be advised, it severely limits your fallback options.
AutoUpgrade does not change COMPATIBLE
, unless you explicitly state it in the config file:
upg1.drop_grp_after_upgrade=yes
upg1.raise_compatible=yes
What
I recommend that you always set COMPATIBLE
to the default of a database release:
19.0.0
21.0.0
If you only have non-CDBs then it might not matter much. But in a multitenant environment, having a uniform, COMPATIBLE
setting is very beneficial. This allows PDBs to move between CDBs without problems.
How
You need to raise COMPATIBLE
on all databases in your Data Guard configuration. The order is important:
- First, standby databases (individual order is not important)
STANDBY SQL> --Ensure redo apply is running STANDBY SQL> alter database recover managed standby database disconnect from session; STANDBY SQL> alter system set compatible='19.0.0' scope=spfile sid='*'; STANDBY SQL> alter database recover managed standby database cancel; [oracle@standby]$ srvctl stop database -d $ORACLE_UNQNAME [oracle@standby]$ srvctl start database -d $ORACLE_UNQNAME -o mount STANDBY SQL> alter database recover managed standby database disconnect from session;
- Last, primary database
PRIMARY SQL> alter system set compatible='19.0.0' scope=spfile sid='*'; [oracle@primary]$ srvctl stop database -d $ORACLE_UNQNAME [oracle@primary]$ srvctl start database -d $ORACLE_UNQNAME
Other Blog Posts in This Series
- Introduction
- How To Upgrade Data Guard – MAA Method
- How To Upgrade Data Guard – Standby Offline Method
- Changing COMPATIBLE Parameter
- Downtime
- Restore Points
- Flashback
- Downgrade
Further Reading
- Secure Your Job – Fallback Is Your Insurance, webinar (slides and recording)
- Modifying the COMPATIBLE Initialization Parameter After Upgrading, Oracle Database 19c, Data Guard Concepts and Administration
- What Is Oracle Database Compatibility, Oracle Database 19c Upgrade Guide