This post is to demonstrate upgrade Time Zone in Oracle Standalone Multitenant Database 19.18 and later.
Importing (impdp) into a database that has a lower timezone file version than the source is not supported. We may experience impdp failure with below ORA errors.
ORA-39405: Oracle Data Pump does not support importing from a source database with TSTZ version 43 into a target database with TSTZ version 32.
ORA-39405: Oracle Data Pump does not support importing from a source database with TSTZ version 34 into a target database with TSTZ version 32.
To perform a successful impdp operation, the timezone needs to be upgraded to an equal or higher version than the source database’s version.
Starting with Oracle 19c RU 19.18, Oracle automatically bundles all available DST patches directly into the Release Update. They are automatically deployed as .dat files into $ORACLE_HOME/oracore/zoneinfo directory during the RU patching.
The files are already sitting in ORACLE Home, do not need to download or apply a separate timezone patch. Only need to update the database to recognize them.
In Dataguard environment, when we upgrade the timezone version on the primary database, redo logs will contain timezone metadata based on the new version and will propagate to the standby database. Make sure, the standby database must also have the same timezone file version installed in its $ORACLE_HOME/oracore/zoneinfo/.
Note: The utltz_upg_check.sql will always detect the highest available version by default and upgrade DST version to it.
The main limitation is that there’s no possibility of downgrade or reverting the time zone. After upgrading to a specified DST version, not possible to revert to an
earlier version.
This post applicable to the environment having DB version 19.18 or higher .
Environment:
============
DB Version: 19.27
OS Version: OEL 9.4
DB Type: Standalone CDB with one PDB
Timezone Version: 32
Target Time Zone version: 44
1. Check the current time zone version.
SQL> select * from v$timezone_file;
FILENAME VERSION CON_ID
——————– ———- ———-
timezlrg_32.dat 32 0
SQL> select tz_version from registry$database;
TZ_VERSION
———-
32
2. Before performing the time zone file upgrade, create a restore point.
SQL> create restore point before_tz_upg guarantee flashback database;
Restore point created.
3. Run the utltz_countstats.sql
It’s used during a DBMS_DST timezone upgrade to gather statistics about how many rows in database are affected by timezone changes. No database restart required
SQL> @$ORACLE_HOME/rdbms/admin/utltz_countstats.sql
Session altered.
.
Amount of TSTZ data using num_rows stats info in DBA_TABLES.
.
For SYS tables first …
Note: empty tables are not listed.
Stat date – Owner.TableName.ColumnName – num_rows
25/07/2026 – SYS.AQ$_ALERT_QT_S.CREATION_TIME – 4
25/07/2026 – SYS.AQ$_ALERT_QT_S.DELETION_TIME – 4
25/07/2026 – SYS.AQ$_ALERT_QT_S.MODIFICATION_TIME – 4
17/04/2019 – SYS.AQ$_AQ$_MEM_MC_S.CREATION_TIME – 3
17/04/2019 – SYS.AQ$_AQ$_MEM_MC_S.DELETION_TIME – 3
17/04/2019 – SYS.AQ$_AQ$_MEM_MC_S.MODIFICATION_TIME – 3
17/04/2019 – SYS.AQ$_AQ_PROP_TABLE_S.CREATION_TIME – 1
17/04/2019 – SYS.AQ$_AQ_PROP_TABLE_S.DELETION_TIME – 1
17/04/2019 – SYS.AQ$_AQ_PROP_TABLE_S.MODIFICATION_TIME – 1
17/04/2019 – SYS.AQ$_ORA$PREPLUGIN_BACKUP_QTB_S.CREATION_TIME – 1
17/04/2019 – SYS.AQ$_ORA$PREPLUGIN_BACKUP_QTB_S.DELETION_TIME – 1
17/04/2019 – SYS.AQ$_ORA$PREPLUGIN_BACKUP_QTB_S.MODIFICATION_TIME – 1
25/07/2026 – SYS.AQ$_PDB_MON_EVENT_QTABLE$_S.CREATION_TIME – 1
25/07/2026 – SYS.AQ$_PDB_MON_EVENT_QTABLE$_S.DELETION_TIME – 1
25/07/2026 – SYS.AQ$_PDB_MON_EVENT_QTABLE$_S.MODIFICATION_TIME – 1
25/07/2026 – SYS.AQ$_SCHEDULER$_EVENT_QTAB_S.CREATION_TIME – 3
25/07/2026 – SYS.AQ$_SCHEDULER$_EVENT_QTAB_S.DELETION_TIME – 3
25/07/2026 – SYS.AQ$_SCHEDULER$_EVENT_QTAB_S.MODIFICATION_TIME – 3
17/04/2019 – SYS.AQ$_SCHEDULER$_REMDB_JOBQTAB_S.CREATION_TIME – 1
17/04/2019 – SYS.AQ$_SCHEDULER$_REMDB_JOBQTAB_S.DELETION_TIME – 1
17/04/2019 – SYS.AQ$_SCHEDULER$_REMDB_JOBQTAB_S.MODIFICATION_TIME – 1
25/07/2026 – SYS.AQ$_SCHEDULER_FILEWATCHER_QT_S.CREATION_TIME – 1
25/07/2026 – SYS.AQ$_SCHEDULER_FILEWATCHER_QT_S.DELETION_TIME – 1
25/07/2026 – SYS.AQ$_SCHEDULER_FILEWATCHER_QT_S.MODIFICATION_TIME – 1
25/07/2026 – SYS.AQ$_SUBSCRIBER_TABLE.CREATION_TIME – 1
25/07/2026 – SYS.AQ$_SUBSCRIBER_TABLE.DELETION_TIME – 1
25/07/2026 – SYS.AQ$_SUBSCRIBER_TABLE.MODIFICATION_TIME – 1
25/07/2026 – SYS.AQ$_SYS$SERVICE_METRICS_TAB_S.CREATION_TIME – 4
25/07/2026 – SYS.AQ$_SYS$SERVICE_METRICS_TAB_S.DELETION_TIME – 4
25/07/2026 – SYS.AQ$_SYS$SERVICE_METRICS_TAB_S.MODIFICATION_TIME – 4
25/07/2026 – SYS.ATSK$_SCHEDULE_CONTROL.MRCT_TASK_TIME_TZ – 1
25/07/2026 – SYS.KET$_AUTOTASK_STATUS.ABA_START_TIME – 1
25/07/2026 – SYS.KET$_AUTOTASK_STATUS.ABA_STATE_TIME – 1
25/07/2026 – SYS.KET$_AUTOTASK_STATUS.MW_RECORD_TIME – 1
25/07/2026 – SYS.KET$_AUTOTASK_STATUS.MW_START_TIME – 1
25/07/2026 – SYS.KET$_AUTOTASK_STATUS.RECONCILE_TIME – 1
25/07/2026 – SYS.KET$_CLIENT_CONFIG.FIELD_2 – 7
25/07/2026 – SYS.KET$_CLIENT_CONFIG.LAST_CHANGE – 7
25/07/2026 – SYS.KET$_CLIENT_TASKS.CURR_WIN_START – 3
25/07/2026 – SYS.KET$_CLIENT_TASKS.LG_DATE – 3
25/07/2026 – SYS.KET$_CLIENT_TASKS.LT_DATE – 3
25/07/2026 – SYS.OPTSTAT_HIST_CONTROL$.SPARE6 – 45
25/07/2026 – SYS.OPTSTAT_HIST_CONTROL$.SVAL2 – 45
25/07/2026 – SYS.OPTSTAT_SNAPSHOT$.TIMESTAMP – 2512
25/07/2026 – SYS.OPTSTAT_USER_PREFS$.CHGTIME – 72
25/07/2026 – SYS.RADM_FPTM$.TSWTZ_COL – 1
25/07/2026 – SYS.REG$.NTFN_GROUPING_START_TIME – 2
25/07/2026 – SYS.REG$.REG_TIME – 2
25/07/2026 – SYS.SCHEDULER$_EVENT_LOG.LOG_DATE – 27
25/07/2026 – SYS.SCHEDULER$_GLOBAL_ATTRIBUTE.ATTR_TSTAMP – 11
25/07/2026 – SYS.SCHEDULER$_JOB.END_DATE – 23
25/07/2026 – SYS.SCHEDULER$_JOB.LAST_ENABLED_TIME – 23
25/07/2026 – SYS.SCHEDULER$_JOB.LAST_END_DATE – 23
25/07/2026 – SYS.SCHEDULER$_JOB.LAST_START_DATE – 23
25/07/2026 – SYS.SCHEDULER$_JOB.NEXT_RUN_DATE – 23
25/07/2026 – SYS.SCHEDULER$_JOB.START_DATE – 23
25/07/2026 – SYS.SCHEDULER$_JOB_RUN_DETAILS.LOG_DATE – 14
25/07/2026 – SYS.SCHEDULER$_JOB_RUN_DETAILS.REQ_START_DATE – 14
25/07/2026 – SYS.SCHEDULER$_JOB_RUN_DETAILS.START_DATE – 14
25/07/2026 – SYS.SCHEDULER$_SCHEDULE.END_DATE – 4
25/07/2026 – SYS.SCHEDULER$_SCHEDULE.REFERENCE_DATE – 4
25/07/2026 – SYS.SCHEDULER$_WINDOW.ACTUAL_START_DATE – 9
25/07/2026 – SYS.SCHEDULER$_WINDOW.END_DATE – 9
25/07/2026 – SYS.SCHEDULER$_WINDOW.LAST_START_DATE – 9
25/07/2026 – SYS.SCHEDULER$_WINDOW.MANUAL_OPEN_TIME – 9
25/07/2026 – SYS.SCHEDULER$_WINDOW.NEXT_START_DATE – 9
25/07/2026 – SYS.SCHEDULER$_WINDOW.START_DATE – 9
25/07/2026 – SYS.WRI$_ALERT_HISTORY.CREATION_TIME – 49
25/07/2026 – SYS.WRI$_ALERT_HISTORY.TIME_SUGGESTED – 49
25/07/2026 – SYS.WRI$_OPTSTAT_HISTHEAD_HISTORY.SAVTIME – 6159
25/07/2026 – SYS.WRI$_OPTSTAT_HISTHEAD_HISTORY.SPARE6 – 6159
25/07/2026 – SYS.WRI$_OPTSTAT_IND_HISTORY.SAVTIME – 494
25/07/2026 – SYS.WRI$_OPTSTAT_IND_HISTORY.SPARE6 – 494
25/07/2026 – SYS.WRI$_OPTSTAT_OPR.END_TIME – 30
25/07/2026 – SYS.WRI$_OPTSTAT_OPR.SPARE6 – 30
25/07/2026 – SYS.WRI$_OPTSTAT_OPR.START_TIME – 30
25/07/2026 – SYS.WRI$_OPTSTAT_OPR_TASKS.END_TIME – 1113
25/07/2026 – SYS.WRI$_OPTSTAT_OPR_TASKS.SPARE6 – 1113
25/07/2026 – SYS.WRI$_OPTSTAT_OPR_TASKS.START_TIME – 1113
25/07/2026 – SYS.WRI$_OPTSTAT_TAB_HISTORY.SAVTIME – 532
25/07/2026 – SYS.WRI$_OPTSTAT_TAB_HISTORY.SPARE6 – 532
25/07/2026 – SYS.WRM$_DATABASE_INSTANCE.STARTUP_TIME_TZ – 7
25/07/2026 – SYS.WRM$_PDB_INSTANCE.OPEN_TIME_TZ – 5
25/07/2026 – SYS.WRM$_PDB_INSTANCE.STARTUP_TIME_TZ – 5
25/07/2026 – SYS.WRM$_PDB_IN_SNAP.OPEN_TIME_TZ – 14
25/07/2026 – SYS.WRM$_SNAPSHOT.BEGIN_INTERVAL_TIME_TZ – 5
25/07/2026 – SYS.WRM$_SNAPSHOT.END_INTERVAL_TIME_TZ – 5
17/04/2019 – SYS.XS$PRIN.END_DATE – 15
17/04/2019 – SYS.XS$PRIN.START_DATE – 15
Total numrows of SYS TSTZ columns is : 21016
There are in total 169 SYS TSTZ columns.
.
For non-SYS tables …
Note: empty tables are not listed.
Stat date – Owner.Tablename.Columnname – num_rows
25/07/2026 – GSMADMIN_INTERNAL.AQ$_CHANGE_LOG_QUEUE_TABLE_S.CREATION_TIME – 1
25/07/2026 – GSMADMIN_INTERNAL.AQ$_CHANGE_LOG_QUEUE_TABLE_S.DELETION_TIME – 1
25/07/2026 – GSMADMIN_INTERNAL.AQ$_CHANGE_LOG_QUEUE_TABLE_S.MODIFICATION_TIME –
1
17/04/2019 – WMSYS.AQ$_WM$EVENT_QUEUE_TABLE_S.CREATION_TIME – 1
17/04/2019 – WMSYS.AQ$_WM$EVENT_QUEUE_TABLE_S.DELETION_TIME – 1
17/04/2019 – WMSYS.AQ$_WM$EVENT_QUEUE_TABLE_S.MODIFICATION_TIME – 1
25/07/2026 – WMSYS.WM$WORKSPACES_TABLE$.CREATETIME – 1
25/07/2026 – WMSYS.WM$WORKSPACES_TABLE$.LAST_CHANGE – 1
Total numrows of non-SYS TSTZ columns is : 8
There are in total 20 non-SYS TSTZ columns.
Total Minutes elapsed : 0
Session altered.
4. Run the utltz_countstar.sql
It scans database for tables containing TIMESTAMP WITH TIME ZONE columns. It runs a COUNT(*) across those tables to estimate how many rows will be affected by a timezone upgrade.
Database restart not required.
SQL> @$ORACLE_HOME/rdbms/admin/utltz_countstar.sql
Session altered.
.
Estimating amount of TSTZ data using COUNT(*).
This might take some time …
.
For SYS tables first …
Note: empty tables are not listed.
Owner.TableName.ColumnName – COUNT(*) of that column
SYS.AQ$_ALERT_QT_S.CREATION_TIME – 4
SYS.AQ$_ALERT_QT_S.DELETION_TIME – 4
SYS.AQ$_ALERT_QT_S.MODIFICATION_TIME – 4
SYS.AQ$_AQ$_MEM_MC_S.CREATION_TIME – 3
SYS.AQ$_AQ$_MEM_MC_S.DELETION_TIME – 3
SYS.AQ$_AQ$_MEM_MC_S.MODIFICATION_TIME – 3
SYS.AQ$_AQ_PROP_TABLE_S.CREATION_TIME – 1
SYS.AQ$_AQ_PROP_TABLE_S.DELETION_TIME – 1
SYS.AQ$_AQ_PROP_TABLE_S.MODIFICATION_TIME – 1
SYS.AQ$_ORA$PREPLUGIN_BACKUP_QTB_S.CREATION_TIME – 1
SYS.AQ$_ORA$PREPLUGIN_BACKUP_QTB_S.DELETION_TIME – 1
SYS.AQ$_ORA$PREPLUGIN_BACKUP_QTB_S.MODIFICATION_TIME – 1
SYS.AQ$_PDB_MON_EVENT_QTABLE$_S.CREATION_TIME – 1
SYS.AQ$_PDB_MON_EVENT_QTABLE$_S.DELETION_TIME – 1
SYS.AQ$_PDB_MON_EVENT_QTABLE$_S.MODIFICATION_TIME – 1
SYS.AQ$_SCHEDULER$_EVENT_QTAB_S.CREATION_TIME – 3
SYS.AQ$_SCHEDULER$_EVENT_QTAB_S.DELETION_TIME – 3
SYS.AQ$_SCHEDULER$_EVENT_QTAB_S.MODIFICATION_TIME – 3
SYS.AQ$_SCHEDULER$_REMDB_JOBQTAB_S.CREATION_TIME – 1
SYS.AQ$_SCHEDULER$_REMDB_JOBQTAB_S.DELETION_TIME – 1
SYS.AQ$_SCHEDULER$_REMDB_JOBQTAB_S.MODIFICATION_TIME – 1
SYS.AQ$_SCHEDULER_FILEWATCHER_QT_S.CREATION_TIME – 1
SYS.AQ$_SCHEDULER_FILEWATCHER_QT_S.DELETION_TIME – 1
SYS.AQ$_SCHEDULER_FILEWATCHER_QT_S.MODIFICATION_TIME – 1
SYS.AQ$_SUBSCRIBER_TABLE.CREATION_TIME – 1
SYS.AQ$_SUBSCRIBER_TABLE.DELETION_TIME – 1
SYS.AQ$_SUBSCRIBER_TABLE.MODIFICATION_TIME – 1
SYS.AQ$_SYS$SERVICE_METRICS_TAB_S.CREATION_TIME – 4
SYS.AQ$_SYS$SERVICE_METRICS_TAB_S.DELETION_TIME – 4
SYS.AQ$_SYS$SERVICE_METRICS_TAB_S.MODIFICATION_TIME – 4
SYS.ATSK$_SCHEDULE_CONTROL.MRCT_TASK_TIME_TZ – 1
SYS.KET$_AUTOTASK_STATUS.ABA_START_TIME – 1
SYS.KET$_AUTOTASK_STATUS.ABA_STATE_TIME – 1
SYS.KET$_AUTOTASK_STATUS.MW_RECORD_TIME – 1
SYS.KET$_AUTOTASK_STATUS.MW_START_TIME – 1
SYS.KET$_AUTOTASK_STATUS.RECONCILE_TIME – 1
SYS.KET$_CLIENT_CONFIG.FIELD_2 – 7
SYS.KET$_CLIENT_CONFIG.LAST_CHANGE – 7
SYS.KET$_CLIENT_TASKS.CURR_WIN_START – 3
SYS.KET$_CLIENT_TASKS.LG_DATE – 3
SYS.KET$_CLIENT_TASKS.LT_DATE – 3
SYS.OPTSTAT_HIST_CONTROL$.SPARE6 – 45
SYS.OPTSTAT_HIST_CONTROL$.SVAL2 – 45
SYS.OPTSTAT_SNAPSHOT$.TIMESTAMP – 3401
SYS.OPTSTAT_USER_PREFS$.CHGTIME – 72
SYS.RADM_FPTM$.TSWTZ_COL – 1
SYS.REG$.NTFN_GROUPING_START_TIME – 2
SYS.REG$.REG_TIME – 2
SYS.SCHEDULER$_EVENT_LOG.LOG_DATE – 38
SYS.SCHEDULER$_GLOBAL_ATTRIBUTE.ATTR_TSTAMP – 11
SYS.SCHEDULER$_JOB.END_DATE – 22
SYS.SCHEDULER$_JOB.LAST_ENABLED_TIME – 22
SYS.SCHEDULER$_JOB.LAST_END_DATE – 22
SYS.SCHEDULER$_JOB.LAST_START_DATE – 22
SYS.SCHEDULER$_JOB.NEXT_RUN_DATE – 22
SYS.SCHEDULER$_JOB.START_DATE – 22
SYS.SCHEDULER$_JOB_RUN_DETAILS.LOG_DATE – 22
SYS.SCHEDULER$_JOB_RUN_DETAILS.REQ_START_DATE – 22
SYS.SCHEDULER$_JOB_RUN_DETAILS.START_DATE – 22
SYS.SCHEDULER$_SCHEDULE.END_DATE – 4
SYS.SCHEDULER$_SCHEDULE.REFERENCE_DATE – 4
SYS.SCHEDULER$_WINDOW.ACTUAL_START_DATE – 9
SYS.SCHEDULER$_WINDOW.END_DATE – 9
SYS.SCHEDULER$_WINDOW.LAST_START_DATE – 9
SYS.SCHEDULER$_WINDOW.MANUAL_OPEN_TIME – 9
SYS.SCHEDULER$_WINDOW.NEXT_START_DATE – 9
SYS.SCHEDULER$_WINDOW.START_DATE – 9
SYS.SCHEDULER$_WINDOW_DETAILS.LOG_DATE – 1
SYS.SCHEDULER$_WINDOW_DETAILS.REQ_START_DATE – 1
SYS.SCHEDULER$_WINDOW_DETAILS.START_DATE – 1
SYS.STATS_TARGET$.END_TIME – 648
SYS.STATS_TARGET$.START_TIME – 648
SYS.TAB_STATS$.SPARE6 – 1179
SYS.WRI$_ALERT_HISTORY.CREATION_TIME – 6
SYS.WRI$_ALERT_HISTORY.TIME_SUGGESTED – 6
SYS.WRI$_OPTSTAT_HISTGRM_HISTORY.SAVTIME – 10773
SYS.WRI$_OPTSTAT_HISTGRM_HISTORY.SPARE6 – 10773
SYS.WRI$_OPTSTAT_HISTHEAD_HISTORY.SAVTIME – 29669
SYS.WRI$_OPTSTAT_HISTHEAD_HISTORY.SPARE6 – 29669
SYS.WRI$_OPTSTAT_IND_HISTORY.SAVTIME – 872
SYS.WRI$_OPTSTAT_IND_HISTORY.SPARE6 – 872
SYS.WRI$_OPTSTAT_OPR.END_TIME – 32
SYS.WRI$_OPTSTAT_OPR.SPARE6 – 32
SYS.WRI$_OPTSTAT_OPR.START_TIME – 32
SYS.WRI$_OPTSTAT_OPR_TASKS.END_TIME – 3055
SYS.WRI$_OPTSTAT_OPR_TASKS.SPARE6 – 3055
SYS.WRI$_OPTSTAT_OPR_TASKS.START_TIME – 3055
SYS.WRI$_OPTSTAT_TAB_HISTORY.SAVTIME – 2030
SYS.WRI$_OPTSTAT_TAB_HISTORY.SPARE6 – 2030
SYS.WRM$_DATABASE_INSTANCE.STARTUP_TIME_TZ – 8
SYS.WRM$_PDB_INSTANCE.OPEN_TIME_TZ – 8
SYS.WRM$_PDB_INSTANCE.STARTUP_TIME_TZ – 8
SYS.WRM$_PDB_IN_SNAP.OPEN_TIME_TZ – 21
SYS.WRM$_SNAPSHOT.BEGIN_INTERVAL_TIME_TZ – 8
SYS.WRM$_SNAPSHOT.END_INTERVAL_TIME_TZ – 8
SYS.XS$PRIN.END_DATE – 15
SYS.XS$PRIN.START_DATE – 15
Total count * of SYS TSTZ columns is : 102496
There are in total 169 SYS TSTZ columns.
.
For non-SYS tables …
Note: empty tables are not listed.
Owner.TableName.ColumnName – COUNT(*) of that column
GSMADMIN_INTERNAL.AQ$_CHANGE_LOG_QUEUE_TABLE_S.CREATION_TIME – 1
GSMADMIN_INTERNAL.AQ$_CHANGE_LOG_QUEUE_TABLE_S.DELETION_TIME – 1
GSMADMIN_INTERNAL.AQ$_CHANGE_LOG_QUEUE_TABLE_S.MODIFICATION_TIME – 1
WMSYS.AQ$_WM$EVENT_QUEUE_TABLE_S.CREATION_TIME – 1
WMSYS.AQ$_WM$EVENT_QUEUE_TABLE_S.DELETION_TIME – 1
WMSYS.AQ$_WM$EVENT_QUEUE_TABLE_S.MODIFICATION_TIME – 1
WMSYS.WM$WORKSPACES_TABLE$.CREATETIME – 1
WMSYS.WM$WORKSPACES_TABLE$.LAST_CHANGE – 1
Total count * of non-SYS TSTZ columns is : 8
There are in total 20 non-SYS TSTZ columns.
Total Minutes elapsed : 0
Session altered.
5. Run the Time zone upgrade check script utltz_upg_check.sql
The script $ORACLE_HOME/rdbms/admin/utltz_upg_check.sql is Oracle’s pre‑upgrade validation tool for timezone changes.
It checks database before running DBMS_DST.begin_upgrade.
Confirms whether the database is ready for a timezone upgrade.
Identifies objects, data types, and dependencies that could be impacted.
SQL> @$ORACLE_HOME/rdbms/admin/utltz_upg_check.sql
Session altered.
INFO: Starting with RDBMS DST update preparation.
INFO: NO actual RDBMS DST update will be done by this script.
INFO: If an ERROR occurs the script will EXIT sqlplus.
INFO: Doing checks for known issues …
INFO: Database version is 19.0.0.0 .
INFO: This database is a Multitenant database.
INFO: Current container is CDB$ROOT .
INFO: Updating the RDBMS DST version of the CDB / CDB$ROOT database
INFO: will NOT update the RDBMS DST version of PDB databases in this CDB.
WARNING: There are 1 open PDBs .
WARNING: They will be closed when running utltz_upg_apply.sql .
INFO: Database RDBMS DST version is DSTv32 .
INFO: No known issues detected.
INFO: Now detecting new RDBMS DST version.
A prepare window has been successfully started.
INFO: Newest RDBMS DST version detected is DSTv44 .
INFO: Next step is checking all TSTZ data.
INFO: It might take a while before any further output is seen …
A prepare window has been successfully ended.
INFO: A newer RDBMS DST version than the one currently used is found.
INFO: Note that NO DST update was yet done.
INFO: Now run utltz_upg_apply.sql to do the actual RDBMS DST update.
INFO: Note that the utltz_upg_apply.sql script will
INFO: restart the database 2 times WITHOUT any confirmation or prompt.
Session altered.
Tha above script not reported any errors. Good to upgrade the DST version.
6. Execute the utltz_upg_apply.sql to upgrade the time zone.
Warning: This script will restart the database for twice in upgrade and normal mode, and then adjust time zone data.
SQL> @$ORACLE_HOME/rdbms/admin/utltz_upg_apply.sql
Session altered.
INFO: If an ERROR occurs, the script will EXIT SQL*Plus.
INFO: The database RDBMS DST version will be updated to DSTv44 .
INFO: This database is a Multitenant database.
INFO: Current container is CDB$ROOT .
INFO: Updating the RDBMS DST version of the CDB / CDB$ROOT database
INFO: will NOT update the RDBMS DST version of PDB databases in this CDB.
WARNING: There are 1 open PDBs .
WARNING: They will be closed when CDB$ROOT is restarted
WARNING: This script will restart the database 2 times
WARNING: WITHOUT asking ANY confirmation.
WARNING: Hit control-c NOW if this is not intended.
INFO: Restarting the database in UPGRADE mode to start the DST upgrade.
Database closed.
Database dismounted.
ORACLE instance shut down.
ORACLE instance started.
Total System Global Area 3019898080 bytes
Fixed Size 9182432 bytes
Variable Size 620756992 bytes
Database Buffers 2382364672 bytes
Redo Buffers 7593984 bytes
Database mounted.
Database opened.
INFO: Starting the RDBMS DST upgrade.
INFO: Upgrading all SYS owned TSTZ data.
INFO: It might take time before any further output is seen …
An upgrade window has been successfully started.
INFO: Restarting the database in NORMAL mode to upgrade non-SYS TSTZ data.
Database closed.
Database dismounted.
ORACLE instance shut down.
ORACLE instance started.
Total System Global Area 3019898080 bytes
Fixed Size 9182432 bytes
Variable Size 620756992 bytes
Database Buffers 2382364672 bytes
Redo Buffers 7593984 bytes
Database mounted.
Database opened.
INFO: Upgrading all non-SYS TSTZ data.
INFO: It might take time before any further output is seen …
INFO: Do NOT start any application yet that uses TSTZ data!
INFO: Next is a list of all upgraded tables:
Table list: “GSMADMIN_INTERNAL”.”AQ$_CHANGE_LOG_QUEUE_TABLE_S”
Number of failures: 0
Table list: “GSMADMIN_INTERNAL”.”AQ$_CHANGE_LOG_QUEUE_TABLE_L”
Number of failures: 0
Table list: “MDSYS”.”SDO_DIAG_MESSAGES_TABLE”
Number of failures: 0
Table list: “DVSYS”.”AUDIT_TRAIL$”
Number of failures: 0
Table list: “DVSYS”.”SIMULATION_LOG$”
Number of failures: 0
INFO: Total failures during update of TSTZ data: 0 .
An upgrade window has been successfully ended.
INFO: Your new Server RDBMS DST version is DSTv44 .
INFO: The RDBMS DST update is successfully finished.
INFO: Make sure to exit this SQL*Plus session.
INFO: Do not use it for timezone related selects.
Session altered.
—-
SQL> show con_name
CON_NAME
——————————
CDB$ROOT
SQL> select * from v$timezone_file;
FILENAME VERSION CON_ID
——————– ———- ———-
timezlrg_44.dat 44 0
1 row selected.
SQL> select tz_version from registry$database;
TZ_VERSION
———-
44
1 row selected.
—
SQL> alter session set container=PDB$SEED;
Session altered.
SQL> select * from v$timezone_file;
FILENAME VERSION CON_ID
——————– ———- ———-
timezlrg_32.dat 32 0
1 row selected.
SQL> select tz_version from registry$database;
TZ_VERSION
———-
32
1 row selected.
Time zone upgrade has been completed for CDB$ROOT.
7. Run the admin utltz_upg_check.sql for the PDB$SEED
SQL> alter pluggable database PRODPDB1 open;
Pluggable database altered.
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
———- —————————— ———- ———-
2 PDB$SEED READ ONLY NO
3 PRODPDB1 READ WRITE NO
[oracle@prod ~]$ $ORACLE_HOME/perl/bin/perl /u01/app/oracle/product/19c/db/rdbms/admin/catcon.pl -n 1 -c ‘PDB$SEED’ -l /home/oracle -b utlzt_upg_apply_seed -d /u01/app/oracle/product/19c/db/rdbms/admin utltz_upg_check.sql
catcon::set_log_file_base_path: ALL catcon-related output will be written to [/home/oracle/utlzt_upg_apply_seed_catcon_138571.lst]
catcon::set_log_file_base_path: catcon: See [/home/oracle/utlzt_upg_apply_seed*.log] files for output generated by scripts
catcon::set_log_file_base_path: catcon: See [/home/oracle/utlzt_upg_apply_seed_*.lst] files for spool files, if any
catcon.pl: completed successfully
—-
[oracle@prod ~]$ cat utlzt_upg_apply_seed_catcon_138571.lst
catcon: See [/home/oracle/utlzt_upg_apply_seed*.log] files for output generated by scripts
catcon: See [/home/oracle/utlzt_upg_apply_seed_*.lst] files for spool files, if any
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
catcon version: /st_rdbms_19/22
catconInit2: start logging catcon output at 2026-07-28 12:45:39
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
[oracle@prod ~]$ cat utlzt_upg_apply_seed0.log
SQL*Plus: Release 19.0.0.0.0 – Production on Tue Jul 28 12:45:40 2026
Version 19.27.0.0.0
Copyright (c) 1982, 2024, Oracle. All rights reserved.
SQL> Connected.
SQL> 2
Session altered.
SQL> 2
Session altered.
SQL>
ALTER SYSTEM KILL SESSION ‘330,14307’ force timeout 0 — process 138623
/
SQL> 2
Session altered.
SQL> SQL>
SQL> 2
Session altered.
SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> 2
Session altered.
SQL> SQL> 2
Session altered.
SQL> SQL> 2
Session altered.
SQL>
NOW_CONNECTED_TO
——————————————————————————–
==== Current Container = PDB$SEED Id = 2 ====
SQL>
NOW_CONNECTED_TO
——————————————————————————–
==== Current Container = PDB$SEED Id = 2 ====
SQL> 2
CATCONSECTION
———————————–
==== CATCON EXEC IN CONTAINERS ====
SQL>
BEGIN_RUNNING
——————————————————————————–
==== @/u01/app/oracle/product/19c/db/rdbms/admin/utltz_upg_check.sql Container:P
DB$SEED Id:2 26-07-28 12:45:43 Proc:0 ====
SQL>
BEGIN_RUNNING
——————————————————————————–
==== @/u01/app/oracle/product/19c/db/rdbms/admin/utltz_upg_check.sql Container:P
DB$SEED Id:2 26-07-28 12:45:43 Proc:0 ====
SQL> 2
Session altered.
SQL> 2
Session altered.
SQL>
Session altered.
INFO: Starting with RDBMS DST update preparation.
INFO: NO actual RDBMS DST update will be done by this script.
INFO: If an ERROR occurs the script will EXIT sqlplus.
INFO: Doing checks for known issues …
INFO: Database version is 19.0.0.0 .
INFO: This database is a Multitenant database.
INFO: This database is a PDB.
INFO: Current PDB is PDB$SEED .
INFO: Database RDBMS DST version is DSTv32 .
INFO: No known issues detected.
INFO: Now detecting new RDBMS DST version.
A prepare window has been successfully started.
INFO: Newest RDBMS DST version detected is DSTv44 .
INFO: Next step is checking all TSTZ data.
INFO: It might take a while before any further output is seen …
A prepare window has been successfully ended.
INFO: A newer RDBMS DST version than the one currently used is found.
INFO: Note that NO DST update was yet done.
INFO: Now run utltz_upg_apply.sql to do the actual RDBMS DST update.
INFO: Note that the utltz_upg_apply.sql script will
INFO: restart the database 2 times WITHOUT any confirmation or prompt.
Session altered.
SQL>
END_RUNNING
——————————————————————————–
==== @/u01/app/oracle/product/19c/db/rdbms/admin/utltz_upg_check.sql Container:P
DB$SEED Id:2 26-07-28 12:45:53 Proc:0 ====
1 row selected.
SQL>
END_RUNNING
——————————————————————————–
==== @/u01/app/oracle/product/19c/db/rdbms/admin/utltz_upg_check.sql Container:P
DB$SEED Id:2 26-07-28 12:45:53 Proc:0 ====
1 row selected.
SQL> SQL>
SQL> SQL> 2
Session altered.
SQL> SQL> ========== PROCESS ENDED ==========
SQL> ========== Process Terminated by catcon ==========
SQL> Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Version 19.27.0.0.0
7.a Upgrade the timezone for the PDB$SEED
oracle@prod ~]$ $ORACLE_HOME/perl/bin/perl /u01/app/oracle/product/19c/db/rdbms/admin/catcon.pl -n 1 -c ‘PDB$SEED’ -l /home/oracle -b utlzt_upg_apply_seed -d /u01/app/oracle/product/19c/db/rdbms/admin utltz_upg_apply.sql
catcon::set_log_file_base_path: ALL catcon-related output will be written to [/home/oracle/utlzt_upg_apply_seed_catcon_140818.lst]
catcon::set_log_file_base_path: catcon: See [/home/oracle/utlzt_upg_apply_seed*.log] files for output generated by scripts
catcon::set_log_file_base_path: catcon: See [/home/oracle/utlzt_upg_apply_seed_*.lst] files for spool files, if any
catcon.pl: completed successfully
—-
[oracle@prod ~]$ cat utlzt_upg_apply_seed0.log
SQL*Plus: Release 19.0.0.0.0 – Production on Tue Jul 28 12:51:25 2026
Version 19.27.0.0.0
Copyright (c) 1982, 2024, Oracle. All rights reserved.
SQL> Connected.
SQL> 2
Session altered.
SQL> 2
Session altered.
SQL>
ALTER SYSTEM KILL SESSION ‘331,13920’ force timeout 0 — process 140869
/
SQL> 2
Session altered.
SQL> SQL>
SQL> 2
Session altered.
SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> 2
Session altered.
SQL> SQL> 2
Session altered.
SQL> SQL> 2
Session altered.
SQL>
NOW_CONNECTED_TO
——————————————————————————–
==== Current Container = PDB$SEED Id = 2 ====
SQL>
NOW_CONNECTED_TO
——————————————————————————–
==== Current Container = PDB$SEED Id = 2 ====
SQL> 2
CATCONSECTION
———————————–
==== CATCON EXEC IN CONTAINERS ====
SQL>
BEGIN_RUNNING
——————————————————————————–
==== @/u01/app/oracle/product/19c/db/rdbms/admin/utltz_upg_apply.sql Container:P
DB$SEED Id:2 26-07-28 12:51:27 Proc:0 ====
SQL>
BEGIN_RUNNING
——————————————————————————–
==== @/u01/app/oracle/product/19c/db/rdbms/admin/utltz_upg_apply.sql Container:P
DB$SEED Id:2 26-07-28 12:51:27 Proc:0 ====
SQL> 2
Session altered.
SQL> 2
Session altered.
SQL>
Session altered.
INFO: If an ERROR occurs, the script will EXIT SQL*Plus.
INFO: The database RDBMS DST version will be updated to DSTv44 .
INFO: This database is a Multitenant database.
INFO: This database is a PDB.
INFO: Current PDB is PDB$SEED .
WARNING: This script will restart the database 2 times
WARNING: WITHOUT asking ANY confirmation.
WARNING: Hit control-c NOW if this is not intended.
INFO: Restarting the database in UPGRADE mode to start the DST upgrade.
Pluggable Database closed.
Pluggable Database opened.
INFO: Starting the RDBMS DST upgrade.
INFO: Upgrading all SYS owned TSTZ data.
INFO: It might take time before any further output is seen …
An upgrade window has been successfully started.
INFO: Restarting the database in NORMAL mode to upgrade non-SYS TSTZ data.
Pluggable Database closed.
Pluggable Database opened.
INFO: Upgrading all non-SYS TSTZ data.
INFO: It might take time before any further output is seen …
INFO: Do NOT start any application yet that uses TSTZ data!
INFO: Next is a list of all upgraded tables:
Table list: “GSMADMIN_INTERNAL”.”AQ$_CHANGE_LOG_QUEUE_TABLE_S”
Number of failures: 0
Table list: “GSMADMIN_INTERNAL”.”AQ$_CHANGE_LOG_QUEUE_TABLE_L”
Number of failures: 0
Table list: “MDSYS”.”SDO_DIAG_MESSAGES_TABLE”
Number of failures: 0
Table list: “DVSYS”.”AUDIT_TRAIL$”
Number of failures: 0
Table list: “DVSYS”.”SIMULATION_LOG$”
Number of failures: 0
INFO: Total failures during update of TSTZ data: 0 .
An upgrade window has been successfully ended.
INFO: Your new Server RDBMS DST version is DSTv44 .
INFO: The RDBMS DST update is successfully finished.
INFO: Make sure to exit this SQL*Plus session.
INFO: Do not use it for timezone related selects.
Session altered.
SQL>
END_RUNNING
——————————————————————————–
==== @/u01/app/oracle/product/19c/db/rdbms/admin/utltz_upg_apply.sql Container:P
DB$SEED Id:2 26-07-28 12:52:19 Proc:0 ====
1 row selected.
SQL>
END_RUNNING
——————————————————————————–
==== @/u01/app/oracle/product/19c/db/rdbms/admin/utltz_upg_apply.sql Container:P
DB$SEED Id:2 26-07-28 12:52:19 Proc:0 ====
1 row selected.
SQL> SQL>
SQL> SQL> 2
Session altered.
SQL> SQL> ========== PROCESS ENDED ==========
SQL> ========== Process Terminated by catcon ==========
SQL> Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Version 19.27.0.0.0
—
SQL> alter session set container=PDB$SEED;
Session altered.
SQL> show con_name
CON_NAME
——————————
PDB$SEED
SQL> select * from v$timezone_file;
FILENAME VERSION CON_ID
——————– ———- ———-
timezlrg_44.dat 44 0
SQL> select tz_version from registry$database;
TZ_VERSION
———-
44
8. Upgrade the timezone for the pluggable database
[oracle@prod ~]$ $ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -c PRODPDB1 -b tzcheck -d $ORACLE_HOME/rdbms/admin -n 1 -l /tmp utltz_upg_check.sql
catcon::set_log_file_base_path: ALL catcon-related output will be written to [/tmp/tzcheck_catcon_160158.lst]
catcon::set_log_file_base_path: catcon: See [/tmp/tzcheck*.log] files for output generated by scripts
catcon::set_log_file_base_path: catcon: See [/tmp/tzcheck_*.lst] files for spool files, if any
catcon.pl: completed successfully
—
[oracle@prod ~]$ $ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -c PRODPDB1 -b tzapply -d $ORACLE_HOME/rdbms/admin -n 1 -l /tmp utltz_upg_apply.sql
catcon::set_log_file_base_path: ALL catcon-related output will be written to [/tmp/tzapply_catcon_161206.lst]
catcon::set_log_file_base_path: catcon: See [/tmp/tzapply*.log] files for output generated by scripts
catcon::set_log_file_base_path: catcon: See [/tmp/tzapply_*.lst] files for spool files, if any
catcon.pl: completed successfully
—
Check the timezone version of pluggable database PRODPDB1.
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
———- —————————— ———- ———-
2 PDB$SEED READ ONLY NO
3 PRODPDB1 READ WRITE NO
SQL> alter session set container=PRODPDB1;
Session altered.
SQL> select * from v$timezone_file;
FILENAME VERSION CON_ID
——————– ———- ———-
timezlrg_44.dat 44 0
SQL> select tz_version from registry$database;
TZ_VERSION
———-
44
Time zone version gas been upgraded to CDB$ROOT, PDB$SEED and pluggable database.
Disclaimer:
Please note the above information is only for educational purpose and practised in personal test database only. Always test in test database before implementing in production database. The pre-requisites and ways of implementing may vary from one environment to another. Hence, not providing guarantee that it will work in your environment.