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.
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
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.
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:
I recommend that you always set
COMPATIBLE to the default of a database release:
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.
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
- How To Upgrade Data Guard – MAA Method
- How To Upgrade Data Guard – Standby Offline Method
- Changing COMPATIBLE Parameter
- Restore Points
- 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