{"id":5796,"date":"2026-07-17T11:34:50","date_gmt":"2026-07-17T06:04:50","guid":{"rendered":"https:\/\/w3buddy.com\/?p=5796"},"modified":"2026-07-19T22:12:18","modified_gmt":"2026-07-19T16:42:18","slug":"oracle-database-upgrade-to-19c","status":"publish","type":"post","link":"https:\/\/w3buddy.com\/blog\/oracle-database-upgrade-to-19c\/","title":{"rendered":"Oracle Database Upgrade to 19c"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">A complete production-ready SOP for upgrading Oracle Database from 11g\/12c\/18c to 19c on Linux. Covers pre-upgrade checks, preupgrade utility, upgrade methods, post-upgrade tasks, timezone upgrade, optimizer statistics, and full validation \u2014 with real commands, expected outputs, and consultant-level notes for both standard OFA and enterprise custom path conventions.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">1. Document Info<\/h3>\n\n\n\n<figure class=\"wp-block-table has-small-font-size\"><table><thead><tr><th>Item<\/th><th>Detail<\/th><\/tr><\/thead><tbody><tr><td>Source Version<\/td><td>11.2.0.4 \/ 12.1 \/ 12.2 \/ 18c<\/td><\/tr><tr><td>Target Version<\/td><td>Oracle 19c (19.3 base + latest RU)<\/td><\/tr><tr><td>OS<\/td><td>Oracle Linux 7.x \/ RHEL 7.x or 8.x<\/td><\/tr><tr><td>Upgrade Method<\/td><td>DBUA (GUI) + Manual (both covered)<\/td><\/tr><tr><td>Database Type<\/td><td>Non-CDB (traditional) and CDB (noted where different)<\/td><\/tr><tr><td>MOS Reference<\/td><td>Doc ID 2485457.1 (Complete Checklist for Manual Upgrade)<\/td><\/tr><tr><td>MOS Reference<\/td><td>Doc ID 2539778.1 (19c Upgrade Best Practices)<\/td><\/tr><tr><td>MOS Reference<\/td><td>Doc ID 1211665.1 (Auto Upgrade Tool)<\/td><\/tr><tr><td>MOS Reference<\/td><td>Doc ID 412160.1 (Upgrade Companion)<\/td><\/tr><tr><td>Prepared By<\/td><td>Oracle DBA \/ Consultant<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">2. Upgrade \u2014 Concepts You Must Know First<\/h3>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udcdd <strong>What is a database upgrade?<\/strong> Upgrading moves an Oracle database from one major version to another \u2014 for example from 12.2 to 19c. The upgrade modifies the data dictionary, system objects, and internal structures to match the new version. The actual datafiles, schemas, and application data are preserved.<\/p>\n<\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udcdd <strong>Why upgrade to 19c?<\/strong> Oracle 19c is the Long Term Support Release (LTS) of the Oracle Database 12c family. Oracle provides premier support for 19c until April 2024 and extended support until April 2027. Many older versions (11g, 12.1) are already out of premier support. 19c is the current production standard.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">Supported Upgrade Paths to 19c<\/h4>\n\n\n\n<figure class=\"wp-block-table has-small-font-size\"><table><thead><tr><th>Source Version<\/th><th>Direct Upgrade to 19c?<\/th><th>Notes<\/th><\/tr><\/thead><tbody><tr><td>11.2.0.4<\/td><td>Yes<\/td><td>Direct path supported<\/td><\/tr><tr><td>12.1.0.2<\/td><td>Yes<\/td><td>Direct path supported<\/td><\/tr><tr><td>12.2.0.1<\/td><td>Yes<\/td><td>Direct path supported<\/td><\/tr><tr><td>18c (18.x)<\/td><td>Yes<\/td><td>Direct path supported<\/td><\/tr><tr><td>11.2.0.3 and below<\/td><td>No<\/td><td>Must first upgrade to 11.2.0.4<\/td><\/tr><tr><td>10g and below<\/td><td>No<\/td><td>Multi-hop upgrade required<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u26a0\ufe0f <strong>IMPORTANT:<\/strong> If your source is 11.2.0.3 or below, you must first upgrade to 11.2.0.4, then upgrade from 11.2.0.4 to 19c. Never skip intermediate versions.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">Upgrade Methods<\/h4>\n\n\n\n<figure class=\"wp-block-table has-small-font-size\"><table><thead><tr><th>Method<\/th><th>Description<\/th><th>Best For<\/th><\/tr><\/thead><tbody><tr><td>DBUA (Database Upgrade Assistant)<\/td><td>GUI-based wizard. Automates most steps. Easiest method.<\/td><td>DBAs comfortable with GUI, first-time upgraders<\/td><\/tr><tr><td>Manual Upgrade<\/td><td>Command line only. Full control over every step.<\/td><td>Production upgrades, scripted environments, consultants<\/td><\/tr><tr><td>AutoUpgrade<\/td><td>Oracle&#8217;s newest tool (19c+). Fully automated including pre and post checks.<\/td><td>Large-scale upgrades, multiple databases<\/td><\/tr><tr><td>Transportable Tablespaces<\/td><td>Move tablespaces from old to new DB.<\/td><td>Selective data migration<\/td><\/tr><tr><td>Data Pump<\/td><td>Export from old, import to new.<\/td><td>Schema migration across versions<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udcdd This SOP covers <strong>Manual Upgrade<\/strong> (full control) and notes where DBUA differs. Manual upgrade is what consultants must know \u2014 DBUA hides too much and is not suitable for scripted production upgrades.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">Upgrade Phases Overview<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>Phase 1 \u2014 Pre-Upgrade (source DB running)\n  Install 19c software in new ORACLE_HOME\n  Run preupgrade.jar (pre-upgrade utility)\n  Fix all pre-upgrade issues\n  Take full RMAN backup\n  Gather optimizer statistics\n\nPhase 2 \u2014 Upgrade (source DB shut down)\n  Shut down source database\n  Start database in upgrade mode using NEW 19c home\n  Run catupgrd.sql (upgrade script) or DBUA\n  Monitor upgrade progress\n\nPhase 3 \u2014 Post-Upgrade (database on 19c)\n  Run post-upgrade scripts\n  Upgrade timezone\n  Compile invalid objects\n  Gather dictionary statistics\n  Re-run post-upgrade checks\n  Apply latest 19c RU patch<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">3. Path Conventions and Environment Details<\/h3>\n\n\n\n<figure class=\"wp-block-table has-small-font-size\"><table><thead><tr><th>Item<\/th><th>Convention A<\/th><th>Convention B<\/th><\/tr><\/thead><tbody><tr><td>Source Oracle Home (11g\/12c)<\/td><td>\/u01\/app\/oracle\/product\/12.2.0.1\/dbhome_1<\/td><td>\/oracle\/RDBMS\/12.2<\/td><\/tr><tr><td>Target Oracle Home (19c)<\/td><td>\/u01\/app\/oracle\/product\/19.3.0\/dbhome_1<\/td><td>\/oracle\/RDBMS\/19.31<\/td><\/tr><tr><td>Oracle Base<\/td><td>\/u01\/app\/oracle<\/td><td>\/oracle<\/td><\/tr><tr><td>oraInventory<\/td><td>\/u01\/app\/oraInventory<\/td><td>\/oracle\/oraInventory<\/td><\/tr><tr><td>Database SID<\/td><td>ORCL<\/td><td>ORCL<\/td><\/tr><tr><td>Upgrade Log Dir<\/td><td>\/u01\/app\/oracle\/cfgtoollogs\/ORCL\/upgrade<\/td><td>\/oracle\/cfgtoollogs\/ORCL\/upgrade<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udcdd Both ORACLE_HOMEs (source and target) must exist simultaneously during the upgrade. The source home contains the database that needs to be upgraded. The target 19c home contains the new Oracle software that will run the database after upgrade.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">4. Pre-Upgrade Checks and Preparation<\/h3>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u26a0\ufe0f <strong>IMPORTANT:<\/strong> Pre-upgrade is the most critical phase. Every issue you find and fix before starting the upgrade is one less problem during the upgrade window. Most upgrade failures are caused by skipping or rushing pre-upgrade checks.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">4.1 \u2014 Confirm Source Database Version and Status<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Connect to SOURCE database (still running on old home)\nsqlplus \/ as sysdba\n\nset linesize 200\nset pagesize 50\ncol banner for a80\n\n-- Full version string\nSELECT banner FROM v$version;\n\n-- Detailed version\nSELECT version, version_full FROM v$instance;\n\n-- DB status\nSELECT name, db_unique_name, open_mode,\n       log_mode, database_role\nFROM   v$database;<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u26a0\ufe0f <strong>IMPORTANT:<\/strong> Database must be in ARCHIVELOG mode and fully OPEN before starting upgrade. If not in ARCHIVELOG mode \u2014 enable it now.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">4.2 \u2014 Install Oracle 19c Software in New Home<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udcdd <strong>Why install first?<\/strong> The preupgrade utility (<code>preupgrade.jar<\/code>) ships with 19c software and must be run from the 19c home against the source database. You need the 19c software installed before you can run pre-upgrade checks.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code># Install 19c software (refer to SOP 01 for full installation steps)\n# Quick reference:\nsu - oracle\n\n# Create 19c home directory\nmkdir -p \/u01\/app\/oracle\/product\/19.3.0\/dbhome_1\n# Convention B: mkdir -p \/oracle\/RDBMS\/19.31\n\n# Unzip 19c software into new home\ncd \/u01\/app\/oracle\/product\/19.3.0\/dbhome_1\nunzip -q \/stage\/19c\/LINUX.X64_193000_db_home.zip\n\n# Run silent software-only installation\n.\/runInstaller -silent \\\n  oracle.install.option=INSTALL_DB_SWONLY \\\n  UNIX_GROUP_NAME=oinstall \\\n  INVENTORY_LOCATION=\/u01\/app\/oraInventory \\\n  ORACLE_BASE=\/u01\/app\/oracle \\\n  oracle.install.db.InstallEdition=EE \\\n  oracle.install.db.OSDBA_GROUP=dba \\\n  oracle.install.db.OSOPER_GROUP=oper \\\n  oracle.install.db.OSBACKUPDBA_GROUP=backupdba \\\n  oracle.install.db.OSDGDBA_GROUP=dgdba \\\n  oracle.install.db.OSKMDBA_GROUP=kmdba \\\n  oracle.install.db.OSRACDBA_GROUP=racdba \\\n  SECURITY_UPDATES_VIA_MYORACLESUPPORT=false \\\n  DECLINE_SECURITY_UPDATES=true\n\n# Run root scripts when prompted (as root)\n\/u01\/app\/oraInventory\/orainstRoot.sh\n\/u01\/app\/oracle\/product\/19.3.0\/dbhome_1\/root.sh\n\n# Verify 19c home is installed\n\/u01\/app\/oracle\/product\/19.3.0\/dbhome_1\/OPatch\/opatch lsinventory | \\\n    grep \"Oracle Database\"<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">4.3 \u2014 Apply Latest Release Update to 19c Home<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udcdd <strong>Why patch before upgrade?<\/strong> Apply the latest 19c RU to the new Oracle Home BEFORE upgrading the database. This means your database goes directly to the latest patched version in one operation instead of upgrading to base 19.3 and then patching afterward.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code># Apply latest 19c RU to the NEW 19c home (refer to SOP 02 for full steps)\n# Database is still running on OLD home at this point\n\nexport ORACLE_HOME=\/u01\/app\/oracle\/product\/19.3.0\/dbhome_1\n$ORACLE_HOME\/OPatch\/opatch apply \\\n    -oh $ORACLE_HOME \\\n    -silent \\\n    \/stage\/patches\/unzipped\/&lt;LATEST_RU_PATCHNUM&gt;\n\n# Verify patch applied\n$ORACLE_HOME\/OPatch\/opatch lsinventory | grep -E \"Oracle Database|Patch\"<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">4.4 \u2014 Run preupgrade.jar \u2014 The Pre-Upgrade Utility<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udcdd <strong>What is preupgrade.jar?<\/strong> preupgrade.jar is Oracle&#8217;s official pre-upgrade checker. It is located in the 19c Oracle Home and is run against the source database (still on old home). It checks hundreds of conditions and generates:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A list of ERRORS that MUST be fixed before upgrade<\/li>\n\n\n\n<li>A list of WARNINGS that should be reviewed<\/li>\n\n\n\n<li>Fix scripts that can automatically resolve many issues<\/li>\n\n\n\n<li>A preupgrade_fixups.sql script for remaining manual fixes<\/li>\n<\/ul>\n<\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u26a0\ufe0f <strong>IMPORTANT:<\/strong> You MUST fix all ERROR items before starting the upgrade. WARNING items should be reviewed and fixed where possible.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code># Run preupgrade.jar from 19c home against source database\n# Source DB must be OPEN and running on OLD home\nsu - oracle\n\n# Set environment to OLD source home\nexport ORACLE_HOME=\/u01\/app\/oracle\/product\/12.2.0.1\/dbhome_1\nexport ORACLE_SID=ORCL\nexport PATH=$ORACLE_HOME\/bin:$PATH\n\n# Run preupgrade.jar from NEW 19c home\njava -jar \/u01\/app\/oracle\/product\/19.3.0\/dbhome_1\/rdbms\/admin\/preupgrade.jar \\\n    FILE DIR \/tmp\/preupgrade_output \\\n    TERMINAL TEXT\n\n# Review the output files\nls -lh \/tmp\/preupgrade_output\/<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Files generated by preupgrade.jar:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table has-small-font-size\"><table><thead><tr><th>File<\/th><th>Purpose<\/th><\/tr><\/thead><tbody><tr><td>preupgrade.log<\/td><td>Main output log \u2014 contains all checks, errors, warnings<\/td><\/tr><tr><td>preupgrade_fixups.sql<\/td><td>SQL script to fix issues BEFORE upgrade (run on OLD home)<\/td><\/tr><tr><td>postupgrade_fixups.sql<\/td><td>SQL script to fix issues AFTER upgrade (run on NEW home)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code># Read the preupgrade log carefully\ncat \/tmp\/preupgrade_output\/preupgrade.log\n\n# Check specifically for ERROR items\ngrep -E \"ERROR|WARNING|RECOMMEND\" \/tmp\/preupgrade_output\/preupgrade.log<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">4.5 \u2014 Review and Understand preupgrade.jar Output<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udcdd <strong>Common items found by preupgrade.jar and what to do:<\/strong><\/p>\n<\/blockquote>\n\n\n\n<figure class=\"wp-block-table has-small-font-size\"><table><thead><tr><th>Check<\/th><th>Typical Finding<\/th><th>Action<\/th><\/tr><\/thead><tbody><tr><td>TIMEZONE_UPGRADE_NEEDED<\/td><td>Timezone file version mismatch<\/td><td>Run timezone upgrade post-upgrade<\/td><\/tr><tr><td>DICTIONARY_STATS<\/td><td>Dictionary stats missing or stale<\/td><td>Gather dictionary stats before upgrade<\/td><\/tr><tr><td>INVALID_OBJECTS<\/td><td>Invalid objects in SYS\/SYSTEM<\/td><td>Recompile with utlrp.sql<\/td><\/tr><tr><td>HIDDEN_PARAMS<\/td><td>Non-default hidden parameters set<\/td><td>Review and document \u2014 may need removal<\/td><\/tr><tr><td>PURGE_RECYCLEBIN<\/td><td>Recyclebin has objects<\/td><td>Purge recyclebin before upgrade<\/td><\/tr><tr><td>DEPRECATED_PARAMS<\/td><td>Deprecated parameters in use<\/td><td>Remove or replace them<\/td><\/tr><tr><td>JAVA_JVM_COMPONENT<\/td><td>Java not installed<\/td><td>Install Java component if needed<\/td><\/tr><tr><td>TABLESPACES_NOT_ENCYPTED<\/td><td>Unencrypted sensitive tablespaces<\/td><td>Consider TDE before upgrade<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">4.6 \u2014 Run preupgrade_fixups.sql on Source Database<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udcdd <strong>What does fixups.sql do?<\/strong> It automatically fixes many of the issues identified by preupgrade.jar \u2014 gathers statistics, purges recyclebin, removes invalid objects, adjusts parameters etc. Run it on the SOURCE database while it is still on the OLD home.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code># Connect to SOURCE database (on OLD home)\nsu - oracle\nexport ORACLE_HOME=\/u01\/app\/oracle\/product\/12.2.0.1\/dbhome_1\nexport ORACLE_SID=ORCL\nexport PATH=$ORACLE_HOME\/bin:$PATH\n\nsqlplus \/ as sysdba<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Run the pre-upgrade fixup script\n-- This script is generated by preupgrade.jar\n@\/tmp\/preupgrade_output\/preupgrade_fixups.sql\n\n-- Review the output carefully\n-- It will show what was fixed and what still needs manual attention<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">4.7 \u2014 Manual Pre-Upgrade Fixes<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udcdd <strong>Fix these manually after running fixups.sql if still required:<\/strong><\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>-- On SOURCE database as SYSDBA\n\n-- 1. Purge recyclebin\nPURGE DBA_RECYCLEBIN;\n\n-- 2. Gather dictionary statistics (critical for upgrade performance)\nEXEC DBMS_STATS.GATHER_DICTIONARY_STATS;\n\n-- 3. Gather fixed object statistics\nEXEC DBMS_STATS.GATHER_FIXED_OBJECTS_STATS;\n\n-- 4. Compile invalid objects\n@?\/rdbms\/admin\/utlrp.sql\n\n-- Verify invalid objects after recompile\nSELECT COUNT(*) invalid_count\nFROM   dba_objects\nWHERE  status = 'INVALID';\n\n-- 5. Check and remove deprecated parameters\n-- Review spfile for any deprecated parameters\nset linesize 200\nset pagesize 100\ncol name  for a40\ncol value for a60\ncol description for a60\n\n-- Parameters deprecated in 19c\nSELECT name, value\nFROM   v$parameter\nWHERE  name IN (\n    'sec_case_sensitive_logon',\n    'o7_dictionary_accessibility',\n    'optimizer_adaptive_features',\n    'parallel_automatic_tuning',\n    'log_archive_local_first',\n    'standby_archive_dest'\n)\nAND    value IS NOT NULL;\n\n-- 6. Disable any database triggers that might interfere\n-- Re-enable after upgrade\nSELECT owner, trigger_name, status\nFROM   dba_triggers\nWHERE  triggering_event LIKE '%LOGON%'\nOR     triggering_event LIKE '%STARTUP%'\nORDER BY owner;\n\n-- Disable triggers temporarily\n-- ALTER TRIGGER &lt;trigger_name&gt; DISABLE;<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">4.8 \u2014 Check and Fix Timezone Version<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Check current timezone version on source database\nSELECT version FROM v$timezone_file;\n\n-- Check what version 19c ships with\n-- (Run from 19c home sqlplus)\n-- The version will be shown during upgrade -- note it for post-upgrade<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">4.9 \u2014 Gather Optimizer Statistics Before Upgrade<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udcdd <strong>Why?<\/strong> Fresh optimizer statistics ensure the upgrade scripts run efficiently. Stale statistics can cause upgrade scripts to choose bad execution plans resulting in a very slow upgrade.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>-- On SOURCE database\n-- Gather schema statistics for SYS and SYSTEM\nEXEC DBMS_STATS.GATHER_SCHEMA_STATS('SYS');\nEXEC DBMS_STATS.GATHER_SCHEMA_STATS('SYSTEM');\n\n-- Gather dictionary statistics\nEXEC DBMS_STATS.GATHER_DICTIONARY_STATS;\n\n-- Gather fixed objects statistics\nEXEC DBMS_STATS.GATHER_FIXED_OBJECTS_STATS;<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">4.10 \u2014 Check Component Status Before Upgrade<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>-- On SOURCE database\nset linesize 200\nset pagesize 100\ncol comp_name for a50\ncol version   for a15\ncol status    for a12\n\nSELECT comp_name, version, status\nFROM   dba_registry\nORDER BY comp_name;<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u26a0\ufe0f <strong>IMPORTANT:<\/strong> All components must be <code>VALID<\/code> before starting the upgrade. If any component shows <code>INVALID<\/code> \u2014 fix it first. An invalid component before upgrade becomes a failed component after upgrade.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">4.11 \u2014 Check for Long Running Transactions<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udcdd <strong>Why?<\/strong> The upgrade shuts down the database. Any uncommitted transactions at shutdown time will be rolled back. For very large transactions this can take a long time. Coordinate with application teams to ensure no long-running transactions are in progress when you shut down.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>-- On SOURCE database\nset linesize 200\nset pagesize 100\ncol username  for a20\ncol machine   for a25\ncol program   for a30\ncol status    for a12\ncol start_time for a25\ncol minutes   for 9999\n\nSELECT s.username,\n       s.machine,\n       s.program,\n       s.status,\n       TO_CHAR(t.start_time,'YYYY-MM-DD HH24:MI:SS') start_time,\n       ROUND((SYSDATE - CAST(t.start_time AS DATE)) * 24 * 60) minutes\nFROM   v$transaction t,\n       v$session     s\nWHERE  t.ses_addr = s.saddr\nORDER BY t.start_time;<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">4.12 \u2014 Take Full RMAN Backup Before Upgrade<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u26a0\ufe0f <strong>IMPORTANT:<\/strong> This is your last chance to take a backup of the database in its pre-upgrade state. If the upgrade fails and you need to roll back, this backup is your recovery point. Do NOT skip this step.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>su - oracle\nexport ORACLE_HOME=\/u01\/app\/oracle\/product\/12.2.0.1\/dbhome_1\nexport ORACLE_SID=ORCL\nexport PATH=$ORACLE_HOME\/bin:$PATH\n\nrman target \/<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>RMAN&gt; BACKUP AS COMPRESSED BACKUPSET\n        DATABASE\n        FORMAT '\/u01\/app\/oracle\/fast_recovery_area\/ORCL\/pre_upgrade\/full_%d_%T_%s_%p'\n        TAG 'PRE_UPGRADE_BACKUP'\n        PLUS ARCHIVELOG\n        FORMAT '\/u01\/app\/oracle\/fast_recovery_area\/ORCL\/pre_upgrade\/arch_%d_%T_%s_%p';\n\nRMAN&gt; LIST BACKUP SUMMARY;\nRMAN&gt; EXIT;<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">4.13 \u2014 Record Pre-Upgrade Baseline<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Record current state for comparison after upgrade\nsqlplus \/ as sysdba\n\n-- Save current component versions\nset linesize 200\nset pagesize 100\ncol comp_name for a50\ncol version   for a15\ncol status    for a12\n\nSELECT comp_name, version, status\nFROM   dba_registry\nORDER BY comp_name;\n\n-- Save current object counts\nset linesize 200\nset pagesize 50\ncol object_type for a25\ncol count       for 9999999\n\nSELECT object_type, COUNT(*) count\nFROM   dba_objects\nGROUP BY object_type\nORDER BY object_type;\n\n-- Save invalid object count\nSELECT COUNT(*) pre_upgrade_invalids\nFROM   dba_objects\nWHERE  status = 'INVALID';\n\n-- Save parameter file content\nSELECT name, value\nFROM   v$parameter\nWHERE  isdefault = 'FALSE'\nORDER BY name;<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code># Save to file for reference\nsqlplus -s \/ as sysdba &lt;&lt;EOF &gt; \/tmp\/pre_upgrade_baseline.txt\nSET LINESIZE 200 PAGESIZE 100\nSELECT comp_name, version, status FROM dba_registry ORDER BY comp_name;\nSELECT object_type, COUNT(*) FROM dba_objects GROUP BY object_type ORDER BY 1;\nSELECT name, value FROM v\\$parameter WHERE isdefault='FALSE' ORDER BY name;\nEXIT;\nEOF\n\ncat \/tmp\/pre_upgrade_baseline.txt<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">5. Upgrade Execution \u2014 Manual Method<\/h3>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u26a0\ufe0f <strong>IMPORTANT:<\/strong> From this point the database will be unavailable to users. Ensure maintenance window is active, OEM blackout is created, application teams are notified, and all necessary personnel are available.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">5.1 \u2014 Shut Down Source Database<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code># Set environment to OLD source home\nsu - oracle\nexport ORACLE_HOME=\/u01\/app\/oracle\/product\/12.2.0.1\/dbhome_1\nexport ORACLE_SID=ORCL\nexport PATH=$ORACLE_HOME\/bin:$PATH\n\nsqlplus \/ as sysdba<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Graceful shutdown\n-- IMMEDIATE = active transactions rolled back, DB cleanly shut down\nSHUTDOWN IMMEDIATE;\n\nEXIT;<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code># Verify database is down\nps -ef | grep ora_pmon_ORCL | grep -v grep\n# Should return no output<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">5.2 \u2014 Switch Environment to 19c Oracle Home<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code># CRITICAL STEP -- switch to NEW 19c Oracle Home\nsu - oracle\n\nexport ORACLE_HOME=\/u01\/app\/oracle\/product\/19.3.0\/dbhome_1\nexport ORACLE_SID=ORCL\nexport PATH=$ORACLE_HOME\/bin:$ORACLE_HOME\/OPatch:$PATH\nexport LD_LIBRARY_PATH=$ORACLE_HOME\/lib:\/lib:\/usr\/lib\n\n# Convention B\n# export ORACLE_HOME=\/oracle\/RDBMS\/19.31\n\n# Verify you are now on 19c home\necho $ORACLE_HOME\n$ORACLE_HOME\/bin\/sqlplus -V\n# Must show: SQL*Plus: Release 19.x.x.x.x<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u26a0\ufe0f <strong>IMPORTANT:<\/strong> This is the most common mistake during upgrades. Verify you are using the 19c home BEFORE starting the database in upgrade mode. If you start the database with the OLD home, the upgrade will not proceed.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">5.3 \u2014 Update oratab to Point to New Home<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code># Update \/etc\/oratab to point ORCL to the new 19c home\n# This ensures all tools use the correct home\nsu - root\n\n# Show current oratab entry\ngrep ORCL \/etc\/oratab\n\n# Update the entry\nsed -i 's|ORCL:\/u01\/app\/oracle\/product\/12.2.0.1\/dbhome_1|ORCL:\/u01\/app\/oracle\/product\/19.3.0\/dbhome_1|' \\\n    \/etc\/oratab\n\n# Convention B:\n# sed -i 's|ORCL:\/oracle\/RDBMS\/12.2|ORCL:\/oracle\/RDBMS\/19.31|' \/etc\/oratab\n\n# Verify\ngrep ORCL \/etc\/oratab<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">5.4 \u2014 Update Listener to Use New Oracle Home<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code># Update listener.ora to point to new 19c home\nsu - oracle\nexport ORACLE_HOME=\/u01\/app\/oracle\/product\/19.3.0\/dbhome_1\n\nvi $ORACLE_HOME\/network\/admin\/listener.ora<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Verify listener.ora references 19c home:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># listener.ora on 19c home\nLISTENER =\n  (DESCRIPTION_LIST =\n    (DESCRIPTION =\n      (ADDRESS = (PROTOCOL = TCP)(HOST = dbserver01.company.com)(PORT = 1521))\n    )\n  )\n\nSID_LIST_LISTENER =\n  (SID_LIST =\n    (SID_DESC =\n      (GLOBAL_DBNAME = ORCL)\n      (ORACLE_HOME   = \/u01\/app\/oracle\/product\/19.3.0\/dbhome_1)\n      (SID_NAME      = ORCL)\n    )\n  )<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code># Stop listener from OLD home\n\/u01\/app\/oracle\/product\/12.2.0.1\/dbhome_1\/bin\/lsnrctl stop\n\n# Start listener from NEW 19c home\n$ORACLE_HOME\/bin\/lsnrctl start\n$ORACLE_HOME\/bin\/lsnrctl status<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">5.5 \u2014 Copy SPFILE or Create pfile for 19c<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udcdd <strong>Why?<\/strong> The database spfile\/pfile must be accessible from the new 19c home. Oracle 19c can use the existing spfile \u2014 just ensure the 19c home can find it.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>su - oracle\nexport ORACLE_HOME=\/u01\/app\/oracle\/product\/19.3.0\/dbhome_1\n\n# Option A: Create a pfile pointing to spfile location\n# (If spfile is in default location under OLD home)\ncat &gt; $ORACLE_HOME\/dbs\/initORCL.ora &lt;&lt; EOF\nSPFILE='\/u01\/app\/oracle\/product\/12.2.0.1\/dbhome_1\/dbs\/spfileORCL.ora'\nEOF\n\n# Option B: Copy spfile to new home\ncp \/u01\/app\/oracle\/product\/12.2.0.1\/dbhome_1\/dbs\/spfileORCL.ora \\\n   \/u01\/app\/oracle\/product\/19.3.0\/dbhome_1\/dbs\/spfileORCL.ora\n\n# Option C: If password file is in old home -- copy to new home\ncp \/u01\/app\/oracle\/product\/12.2.0.1\/dbhome_1\/dbs\/orapwORCL \\\n   \/u01\/app\/oracle\/product\/19.3.0\/dbhome_1\/dbs\/orapwORCL\n\n# Verify\nls -lh $ORACLE_HOME\/dbs\/<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">5.6 \u2014 Start Database in UPGRADE Mode<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udcdd <strong>What is UPGRADE mode?<\/strong> Starting the database with the <code>UPGRADE<\/code> option opens it in a special restricted mode that allows the Oracle internal upgrade scripts to modify the data dictionary. Regular user connections are not allowed in UPGRADE mode.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code># On 19c home -- start in upgrade mode\nsu - oracle\nexport ORACLE_HOME=\/u01\/app\/oracle\/product\/19.3.0\/dbhome_1\nexport ORACLE_SID=ORCL\nexport PATH=$ORACLE_HOME\/bin:$PATH\n\nsqlplus \/ as sysdba<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Start in upgrade mode\n-- This opens the database with the new 19c binaries\n-- but the data dictionary is still at the old version\nSTARTUP UPGRADE;\n\n-- Verify database is in upgrade mode\nSELECT status, logins FROM v$instance;\n-- STATUS must show: OPEN\n-- LOGINS must show: RESTRICTED<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Expected output:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>INSTANCE_NAME   STATUS       LOGINS\n--------------- ------------ ------------\nORCL            OPEN         RESTRICTED<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u26a0\ufe0f <strong>IMPORTANT:<\/strong> If database fails to start with UPGRADE, check the alert log immediately. Common causes: spfile cannot be found, incompatible parameters, missing password file. Fix and retry before proceeding.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">5.7 \u2014 Create Upgrade Log Directory<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code># Create directory for upgrade logs\nmkdir -p \/u01\/app\/oracle\/cfgtoollogs\/ORCL\/upgrade\nchown oracle:oinstall \/u01\/app\/oracle\/cfgtoollogs\/ORCL\/upgrade\n\n# Convention B\n# mkdir -p \/oracle\/cfgtoollogs\/ORCL\/upgrade<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">5.8 \u2014 Run the Database Upgrade Script (catupgrd.sql)<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udcdd <strong>What is catupgrd.sql?<\/strong> This is Oracle&#8217;s main upgrade script. It upgrades the data dictionary from the source version to 19c. It runs hundreds of SQL scripts that modify system tables, recompile packages, create new dictionary objects, and update internal metadata. This is the core of the upgrade process.<\/p>\n<\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udcdd <strong>How long does it take?<\/strong> Typically 30-90 minutes for a small to medium database. Large databases with many schemas can take 2-4 hours. The time depends on database size and server performance.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code># Open a separate terminal to monitor upgrade progress\n# (Do NOT close the main upgrade terminal)\n\n# Terminal 2 -- monitor upgrade progress\ntail -100f \/u01\/app\/oracle\/product\/19.3.0\/dbhome_1\/rdbms\/log\/catupgrd*.log<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code># Terminal 1 -- run the upgrade (this is the main upgrade command)\n# Connect as sysdba from 19c home\nsu - oracle\nexport ORACLE_HOME=\/u01\/app\/oracle\/product\/19.3.0\/dbhome_1\nexport ORACLE_SID=ORCL\nexport PATH=$ORACLE_HOME\/bin:$PATH\n\nsqlplus \/ as sysdba<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Run the upgrade script\n-- This takes 30-90 minutes\n-- DO NOT interrupt or close this session\n@?\/rdbms\/admin\/catupgrd.sql<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udcdd <strong>Monitor upgrade progress<\/strong> while catupgrd.sql is running \u2014 in another terminal:<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>-- In a separate sqlplus session -- check upgrade progress\n-- This view shows component-by-component upgrade status\nset linesize 200\nset pagesize 100\ncol comp_name   for a45\ncol version     for a15\ncol status      for a15\ncol start_time  for a25\ncol end_time    for a25\n\nSELECT comp_name, version, status,\n       TO_CHAR(modified,'YYYY-MM-DD HH24:MI:SS') modified\nFROM   dba_registry\nORDER BY modified;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Expected final message from catupgrd.sql:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Oracle Database instance restarted...\n...\nUpgrade Summary Report Located in:\n\/u01\/app\/oracle\/cfgtoollogs\/ORCL\/upgrade\/upg_summary.log<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">5.9 \u2014 Shut Down and Restart Database Normally After Upgrade<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udcdd <strong>Why restart after upgrade?<\/strong> After catupgrd.sql completes, the database is still in UPGRADE\/RESTRICTED mode. You must restart it normally to open it for users.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Shut down after upgrade script completes\nSHUTDOWN IMMEDIATE;\n\n-- Start normally (not in upgrade mode)\nSTARTUP;\n\n-- Verify database is open normally\nSELECT status, logins FROM v$instance;\n-- STATUS = OPEN, LOGINS = ALLOWED (not RESTRICTED)\n\nSELECT name, open_mode FROM v$database;\n-- open_mode = READ WRITE<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">6. Post-Upgrade Tasks<\/h3>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u26a0\ufe0f <strong>IMPORTANT:<\/strong> Post-upgrade tasks are NOT optional. An upgrade is not complete until every post-upgrade task is done. Many DBAs consider the database upgraded when catupgrd.sql finishes \u2014 this is wrong. The database is only fully upgraded and stable after all post-upgrade tasks complete.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">6.1 \u2014 Run Post-Upgrade Status Script<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udcdd <strong>What is utlu19s.sql?<\/strong> This script checks the upgrade status of all components and generates a summary report. Run it immediately after the first normal startup post-upgrade.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Connect to upgraded database (now on 19c)\nsqlplus \/ as sysdba\n\n-- Run post-upgrade status check\n@?\/rdbms\/admin\/utlu19s.sql<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>What to look for in output:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Oracle Database 19.0 Post-Upgrade Status Tool\nComponent Status     Version  HH:MM:SS\nOracle Server        VALID    19.x.x.x  00:45:23\nREQUIRED COMPONENTS VALID\n...\nElapsed Time:    45:23\n...\nSTATUS: SUCCESSFUL<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u26a0\ufe0f <strong>IMPORTANT:<\/strong> If any component shows INVALID or UPGRADED status \u2014 do NOT proceed. Investigate the specific component and fix it before continuing.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">6.2 \u2014 Run Post-Upgrade Fixups Script<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udcdd <strong>What is postupgrade_fixups.sql?<\/strong> Generated by preupgrade.jar earlier. Contains fixes that must be applied AFTER the upgrade completes \u2014 timezone adjustments, parameter updates, deprecated object removal etc.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Run the post-upgrade fixup script\n-- This was generated by preupgrade.jar in Section 4.4\n@\/tmp\/preupgrade_output\/postupgrade_fixups.sql<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">6.3 \u2014 Run catcon.pl to Recompile Invalid Objects<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udcdd <strong>What is utlrp.sql in 19c?<\/strong> In 19c, Oracle recommends using <code>utlrp.sql<\/code> which internally uses <code>catcon.pl<\/code> for parallel recompilation. This recompiles all invalid PL\/SQL objects in the database using multiple CPUs \u2014 much faster than serial recompilation.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Recompile all invalid objects\n-- This MUST be run after upgrade\n@?\/rdbms\/admin\/utlrp.sql\n\n-- Monitor recompilation progress\nSELECT count(*) remaining_invalids\nFROM   dba_objects\nWHERE  status = 'INVALID';\n-- Run this repeatedly until count reaches 0 or stable minimum<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">6.4 \u2014 Check Component Status After Upgrade<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>set linesize 200\nset pagesize 100\ncol comp_name for a50\ncol version   for a15\ncol status    for a12\n\nSELECT comp_name, version, status\nFROM   dba_registry\nORDER BY comp_name;<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u26a0\ufe0f <strong>IMPORTANT:<\/strong> ALL components must show <code>VALID<\/code> and version must be <code>19.x.x.x.x<\/code>. Any component showing <code>INVALID<\/code> must be reinitiated using its specific catalog script.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">6.5 \u2014 Check for INVALID Objects After Upgrade<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>set linesize 200\nset pagesize 100\ncol owner       for a20\ncol object_name for a45\ncol object_type for a25\ncol status      for a10\n\n-- List invalid objects\nSELECT owner, object_name, object_type, status\nFROM   dba_objects\nWHERE  status = 'INVALID'\nORDER BY owner, object_type, object_name;\n\n-- Count by owner\nSELECT owner, COUNT(*) invalid_count\nFROM   dba_objects\nWHERE  status = 'INVALID'\nGROUP BY owner\nORDER BY invalid_count DESC;<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udcdd Some invalid objects in USER schemas immediately after upgrade is normal \u2014 applications often have compiled code that references internal Oracle packages that changed version. Have application teams recompile their code after upgrade.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">6.6 \u2014 Upgrade Timezone File<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udcdd <strong>Why upgrade timezone?<\/strong> Oracle ships updated timezone data files with each release. The timezone file version in the database must be upgraded to match the new Oracle Home. Without this, timezone-dependent operations may behave incorrectly.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Check current timezone version in database\nSELECT version FROM v$timezone_file;\n\n-- Check what timezone version 19c home provides\n-- (Check the file in 19c home)<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code># Check timezone version in 19c Oracle Home\nls -la $ORACLE_HOME\/oracore\/zoneinfo\/timezlrg_*.dat | tail -1\n# The number in the filename is the version<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Upgrade timezone (if database version is lower than 19c home version)\n-- Step 1: Run the timezone upgrade script\n@?\/rdbms\/admin\/utltz_upg_check.sql\n\n-- Step 2: Run the actual upgrade\n@?\/rdbms\/admin\/utltz_upg_apply.sql\n\n-- Step 3: Restart the database\nSHUTDOWN IMMEDIATE;\nSTARTUP;\n\n-- Step 4: Verify new timezone version\nSELECT version FROM v$timezone_file;<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">6.7 \u2014 Run datapatch After Upgrade<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udcdd <strong>Why run datapatch after upgrade?<\/strong> If you applied a Release Update (RU) to the 19c home before upgrading (as recommended in Section 4.3), datapatch must be run to apply the SQL-level changes from that RU to the data dictionary. The upgrade scripts (catupgrd.sql) bring the dictionary to base 19.3 \u2014 datapatch brings it to the patched version.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>su - oracle\nexport ORACLE_HOME=\/u01\/app\/oracle\/product\/19.3.0\/dbhome_1\nexport ORACLE_SID=ORCL\n\n# Database must be open before running datapatch\ncd $ORACLE_HOME\/OPatch\n.\/datapatch -verbose\n\n# Monitor log\nls -lrt \/u01\/app\/oracle\/cfgtoollogs\/sqlpatch\/\ntail -100f \/u01\/app\/oracle\/cfgtoollogs\/sqlpatch\/&lt;latest_dir&gt;\/&lt;latest_log&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Expected output:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Connecting to database...OK\nBootstrapping registry...done\ndatapatch: ALL PATCHES APPLIED SUCCESSFULLY.<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">6.8 \u2014 Gather Dictionary Statistics After Upgrade<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udcdd <strong>Why?<\/strong> The upgrade significantly changes the data dictionary. After upgrade, all optimizer statistics for dictionary objects are stale. Gathering fresh statistics ensures good query performance on the newly upgraded dictionary.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Gather dictionary statistics\nEXEC DBMS_STATS.GATHER_DICTIONARY_STATS;\n\n-- Gather fixed objects statistics\nEXEC DBMS_STATS.GATHER_FIXED_OBJECTS_STATS;\n\n-- Gather complete system statistics if using system statistics\nEXEC DBMS_STATS.GATHER_SYSTEM_STATS('NOWORKLOAD');<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">6.9 \u2014 Review and Clean Up Deprecated Parameters<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udcdd <strong>Why?<\/strong> Some parameters valid in older Oracle versions are deprecated or obsolete in 19c. Having them in spfile generates warning messages in the alert log and may cause unexpected behavior. Remove or replace them.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Check for deprecated parameters\nset linesize 200\nset pagesize 100\ncol name        for a45\ncol value       for a40\ncol description for a60\n\nSELECT name, value, description\nFROM   v$parameter\nWHERE  isdeprecated = 'TRUE'\nAND    isdefault    = 'FALSE'\nORDER BY name;<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code># Remove deprecated parameters from spfile\n# Example for commonly deprecated params in 19c upgrades:\nsqlplus \/ as sysdba<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Remove deprecated parameters (examples -- check your specific list)\nALTER SYSTEM RESET sec_case_sensitive_logon SCOPE=SPFILE;\nALTER SYSTEM RESET parallel_automatic_tuning SCOPE=SPFILE;\nALTER SYSTEM RESET log_archive_local_first SCOPE=SPFILE;\n\n-- Restart to apply spfile changes\nSHUTDOWN IMMEDIATE;\nSTARTUP;<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">6.10 \u2014 Set COMPATIBLE Parameter<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udcdd <strong>What is COMPATIBLE?<\/strong> The COMPATIBLE parameter controls which Oracle features are available and which file format is used. Increasing it enables new 19c features but makes the database incompatible with older Oracle versions. Once increased, you cannot downgrade below the COMPATIBLE setting.<\/p>\n<\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u26a0\ufe0f <strong>IMPORTANT:<\/strong> Do NOT increase COMPATIBLE immediately after upgrade. Wait until you have verified the application works correctly on 19c, all testing is complete, and the decision to stay on 19c is confirmed. Once you increase COMPATIBLE \u2014 there is no downgrade path.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Check current COMPATIBLE setting\nSHOW PARAMETER compatible;\n\n-- Only increase COMPATIBLE after full testing and sign-off\n-- This is the one-way door -- no going back after this\n-- ALTER SYSTEM SET COMPATIBLE='19.0.0' SCOPE=SPFILE;\n-- SHUTDOWN IMMEDIATE;\n-- STARTUP;\n\n-- Verify after change\n-- SHOW PARAMETER compatible;<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">6.11 \u2014 Upgrade Optimizer Statistics<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udcdd <strong>Why?<\/strong> After upgrading the optimizer version changes. Old optimizer statistics gathered under the previous version may cause suboptimal plans under the new optimizer. Run a comprehensive statistics gather after upgrade.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Gather statistics for all user schemas\n-- Run this during off-peak hours -- can take significant time\nEXEC DBMS_STATS.GATHER_DATABASE_STATS(\n    options       =&gt; 'GATHER AUTO',\n    degree        =&gt; 4,\n    cascade       =&gt; TRUE\n);\n\n-- Or gather schema by schema for better control\nEXEC DBMS_STATS.GATHER_SCHEMA_STATS(\n    ownname =&gt; 'HR',\n    degree  =&gt; 4,\n    cascade =&gt; TRUE\n);<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">7. Post-Upgrade Verification Checks<\/h3>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u26a0\ufe0f <strong>IMPORTANT:<\/strong> Do not close the maintenance window or hand over the upgraded database without completing every check below. These checks confirm the upgrade was successful and the database is healthy on 19c.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">7.1 \u2014 Verify Oracle Version is 19c<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>sqlplus \/ as sysdba\n\nset linesize 200\nset pagesize 50\ncol banner for a80\n\nSELECT banner FROM v$version WHERE banner LIKE 'Oracle%';\n\nSELECT version, version_full FROM v$instance;\n-- Must show 19.x.x.x.x<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">7.2 \u2014 Verify Database is Open Normally<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>set linesize 150\nset pagesize 50\ncol name           for a12\ncol db_unique_name for a15\ncol open_mode      for a15\ncol log_mode       for a15\ncol status         for a12\n\nSELECT name, db_unique_name, open_mode, log_mode\nFROM   v$database;\n\nSELECT instance_name, version_full, host_name, status\nFROM   v$instance;<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">7.3 \u2014 Compare Component Versions Before and After<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>set linesize 200\nset pagesize 100\ncol comp_name for a50\ncol version   for a15\ncol status    for a12\n\n-- Post-upgrade component versions (compare with pre-upgrade baseline)\nSELECT comp_name, version, status\nFROM   dba_registry\nORDER BY comp_name;<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">7.4 \u2014 Check All Datafiles Online<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">sql<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>set linesize 200\nset pagesize 100\ncol file#           for 999\ncol tablespace_name for a25\ncol status          for a12\ncol name            for a70\n\nSELECT file#, tablespace_name, status, name\nFROM   v$datafile\nWHERE  status != 'ONLINE'\nORDER BY file#;\n-- Should return no rows<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">7.5 \u2014 Check All Tablespaces<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>set linesize 200\nset pagesize 100\ncol tablespace_name for a25\ncol status          for a12\ncol contents        for a12\ncol total_mb        for 9999999\ncol free_mb         for 9999999\ncol used_pct        for 999.99\n\nSELECT df.tablespace_name,\n       df.status,\n       df.contents,\n       ROUND(df.bytes\/1024\/1024,2)                  total_mb,\n       ROUND(NVL(fs.bytes,0)\/1024\/1024,2)            free_mb,\n       ROUND((1-NVL(fs.bytes,0)\/df.bytes)*100,2)     used_pct\nFROM  (SELECT tablespace_name, status, contents,\n              SUM(bytes) bytes\n       FROM   dba_data_files\n       GROUP BY tablespace_name, status, contents) df,\n      (SELECT tablespace_name, SUM(bytes) bytes\n       FROM   dba_free_space\n       GROUP BY tablespace_name) fs\nWHERE  df.tablespace_name = fs.tablespace_name(+)\nORDER BY df.tablespace_name;<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">7.6 \u2014 Check Invalid Object Count vs Pre-Upgrade Baseline<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Compare with pre-upgrade baseline recorded in Section 4.13\nset linesize 180\nset pagesize 100\ncol owner       for a20\ncol object_type for a25\ncol count       for 9999999\n\nSELECT owner, object_type, COUNT(*) count\nFROM   dba_objects\nWHERE  status = 'INVALID'\nGROUP BY owner, object_type\nORDER BY owner, count DESC;\n\nSELECT COUNT(*) post_upgrade_invalids\nFROM   dba_objects\nWHERE  status = 'INVALID';<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">7.7 \u2014 Verify Redo Logs and Archiving<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>set linesize 180\nset pagesize 50\ncol l#      for 999\ncol status  for a12\ncol members for 999\n\nSELECT group# l#, members, bytes\/1024\/1024 size_mb,\n       status, archived\nFROM   v$log\nORDER BY group#;\n\nARCHIVE LOG LIST;<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">7.8 \u2014 Verify datapatch Applied Correctly<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>set linesize 200\nset pagesize 100\ncol patch_id    for 9999999999\ncol version     for a15\ncol status      for a15\ncol description for a55\ncol action_time for a25\n\nSELECT patch_id, version, status, description, action_time\nFROM   dba_registry_sqlpatch\nORDER BY action_time DESC;<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">7.9 \u2014 Check Timezone Version<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Verify timezone was upgraded\nSELECT version FROM v$timezone_file;\n-- Should match the version in 19c Oracle Home<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">7.10 \u2014 Run OPatch Inventory Check<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code># Verify 19c home and patches are correctly registered\nsu - oracle\n$ORACLE_HOME\/OPatch\/opatch lsinventory | grep -E \"Oracle Database|Patch\"<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">7.11 \u2014 Check Alert Log for Upgrade Errors<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code># Scan alert log for any errors during upgrade\ntail -500 \/u01\/app\/oracle\/diag\/rdbms\/orcl\/ORCL\/trace\/alert_ORCL.log \\\n     | grep -E \"ORA-|Error|WARNING|FAILED|CORRUPTED\"\n\n# Convention B\ntail -500 \/oracle\/diag\/rdbms\/orcl\/ORCL\/trace\/alert_ORCL.log \\\n     | grep -E \"ORA-|Error|WARNING|FAILED|CORRUPTED\"<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">7.12 \u2014 Verify Listener is Running and Database Registered<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code># Listener check\nlsnrctl status\n\n# Test TNS connectivity\nsqlplus system\/Oracle_123@localhost:1521\/ORCL<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">7.13 \u2014 Run Upgrade Summary Report<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Review the upgrade summary that catupgrd.sql generated\n-- This file contains the complete upgrade history<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>cat \/u01\/app\/oracle\/cfgtoollogs\/ORCL\/upgrade\/upg_summary.log<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">7.14 \u2014 Take RMAN Backup After Upgrade<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u26a0\ufe0f <strong>IMPORTANT:<\/strong> Take a full backup IMMEDIATELY after the upgrade completes and all post-upgrade tasks are done. This is your first backup of the upgraded database. The pre-upgrade backup cannot be used to restore a 19c database \u2014 you need a post-upgrade backup.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>su - oracle\nexport ORACLE_HOME=\/u01\/app\/oracle\/product\/19.3.0\/dbhome_1\nexport ORACLE_SID=ORCL\n\nrman target \/<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>RMAN&gt; BACKUP AS COMPRESSED BACKUPSET\n        DATABASE\n        FORMAT '\/u01\/app\/oracle\/fast_recovery_area\/ORCL\/post_upgrade\/full_%d_%T_%s_%p'\n        TAG 'POST_UPGRADE_BACKUP'\n        PLUS ARCHIVELOG\n        FORMAT '\/u01\/app\/oracle\/fast_recovery_area\/ORCL\/post_upgrade\/arch_%d_%T_%s_%p';\n\nRMAN&gt; LIST BACKUP SUMMARY;\nRMAN&gt; EXIT;<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">8. AutoUpgrade Tool (Alternative Method)<\/h3>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udcdd <strong>What is AutoUpgrade?<\/strong> AutoUpgrade is Oracle&#8217;s fully automated upgrade tool introduced in 19c. It handles the entire upgrade process including pre-checks, fixups, upgrade execution, post-upgrade tasks, and timezone upgrade \u2014 all in one tool with minimal DBA intervention. For multiple databases or standardized enterprise upgrades, AutoUpgrade is the most efficient method.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">8.1 \u2014 Download and Verify AutoUpgrade<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code># AutoUpgrade is a JAR file -- download latest version from MOS\n# MOS Doc ID 2485457.1 -- latest autoupgrade.jar download link\nls -lh \/stage\/upgrade\/autoupgrade.jar\n\n# Check version\njava -jar \/stage\/upgrade\/autoupgrade.jar -version<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">8.2 \u2014 Create AutoUpgrade Configuration File<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>vi \/home\/oracle\/autoupgrade_ORCL.cfg<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code># -------------------------------------------------------\n# AutoUpgrade Configuration File for ORCL database\n# -------------------------------------------------------\n\n# Global settings\nglobal.autoupg_log_dir=\/u01\/app\/oracle\/cfgtoollogs\/autoupgrade\n\n# Database-specific settings (one section per database)\nupg1.dbname=ORCL\nupg1.start_time=NOW\nupg1.source_home=\/u01\/app\/oracle\/product\/12.2.0.1\/dbhome_1\nupg1.target_home=\/u01\/app\/oracle\/product\/19.3.0\/dbhome_1\nupg1.sid=ORCL\nupg1.log_dir=\/u01\/app\/oracle\/cfgtoollogs\/autoupgrade\/ORCL\nupg1.upgrade_node=dbserver01\nupg1.target_version=19\nupg1.run_utlrp=yes\nupg1.timezone_upg=yes<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">8.3 \u2014 Run AutoUpgrade in Analyze Mode (Pre-Checks Only)<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code># Analyze mode -- runs pre-upgrade checks only, makes no changes\njava -jar \/stage\/upgrade\/autoupgrade.jar \\\n    -config \/home\/oracle\/autoupgrade_ORCL.cfg \\\n    -mode analyze<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">8.4 \u2014 Run AutoUpgrade in Deploy Mode (Full Upgrade)<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code># Deploy mode -- runs complete upgrade end-to-end\n# This handles everything: pre-checks, upgrade, post-upgrade tasks\njava -jar \/stage\/upgrade\/autoupgrade.jar \\\n    -config \/home\/oracle\/autoupgrade_ORCL.cfg \\\n    -mode deploy\n\n# Monitor AutoUpgrade progress in another terminal\ntail -100f \/u01\/app\/oracle\/cfgtoollogs\/autoupgrade\/cfgtoollogs\/upgrade\/auto\/autoupgrade_&lt;date&gt;.log<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">9. Upgrade with Data Guard (Transient Logical Standby Method)<\/h3>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udcdd <strong>What is the Transient Logical Standby method?<\/strong> This is an advanced upgrade technique that provides near-zero downtime. The physical standby is temporarily converted to a logical standby, upgraded to 19c, then switched over to become the new primary. The old primary is then upgraded and becomes the standby. Total downtime is only the switchover time.<\/p>\n<\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udcdd <strong>This method is complex and requires Data Guard Broker to be configured.<\/strong> High-level steps only are shown here \u2014 refer to MOS Doc ID 2485457.1 for full details.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>High Level Steps:\n\n1. Primary on 12c, Standby on 12c -- both running\n2. Convert standby to Logical Standby (DBMS_LOGSTDBY)\n3. Upgrade Logical Standby to 19c (catupgrd.sql on logical standby)\n4. Switchover -- Logical Standby (19c) becomes new Primary\n5. Applications now connecting to 19c database (minimal downtime)\n6. Convert old Primary (12c) to Physical Standby\n7. Upgrade old Primary Oracle Home to 19c\n8. Switchover back to original primary (now on 19c) -- optional<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udcce Full procedure: MOS Doc ID <strong>2485457.1<\/strong> Section 4 \u2014 Using Data Guard Standby Database for Upgrade<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">10. Rollback Plan (If Upgrade Fails)<\/h3>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udcdd <strong>Can an upgrade be rolled back?<\/strong> If the upgrade fails during catupgrd.sql before completing, you can restore the database from the pre-upgrade RMAN backup taken in Section 4.12 and restart the old version. After catupgrd.sql completes and you open the database normally, the upgrade is committed and the only rollback path is from backup.<\/p>\n<\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u26a0\ufe0f <strong>IMPORTANT:<\/strong> This is why the pre-upgrade backup is so critical. Plan a rollback procedure BEFORE starting the upgrade.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">10.1 \u2014 Rollback Procedure (If Upgrade Fails Mid-Way)<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code># If upgrade fails during catupgrd.sql or database fails to open after upgrade\n# Restore from pre-upgrade backup\n\nsu - oracle\n# Switch back to OLD Oracle Home\nexport ORACLE_HOME=\/u01\/app\/oracle\/product\/12.2.0.1\/dbhome_1\nexport ORACLE_SID=ORCL\nexport PATH=$ORACLE_HOME\/bin:$PATH\n\nrman target \/<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Restore from pre-upgrade backup\nRMAN&gt; SHUTDOWN ABORT;\nRMAN&gt; STARTUP MOUNT;\nRMAN&gt; RESTORE DATABASE FROM TAG 'PRE_UPGRADE_BACKUP';\nRMAN&gt; RECOVER DATABASE;\nRMAN&gt; ALTER DATABASE OPEN RESETLOGS;\n\n-- Verify old version is restored\nRMAN&gt; EXIT;<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>sqlplus \/ as sysdba\nSELECT banner FROM v$version;\n-- Must show old version (12c etc.)<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">11. Quick Reference Card<\/h3>\n\n\n\n<figure class=\"wp-block-table has-small-font-size\"><table><thead><tr><th>Task<\/th><th>Command<\/th><\/tr><\/thead><tbody><tr><td>Check source DB version<\/td><td><code>SELECT banner FROM v$version;<\/code><\/td><\/tr><tr><td>Check upgrade path<\/td><td>Confirm source is 11.2.0.4 \/ 12.1 \/ 12.2 \/ 18c<\/td><\/tr><tr><td>Install 19c software<\/td><td>Refer to SOP 01 \u2014 software-only install<\/td><\/tr><tr><td>Apply latest RU to 19c<\/td><td>Refer to SOP 02 \u2014 patch new home before upgrade<\/td><\/tr><tr><td>Run preupgrade.jar<\/td><td><code>java -jar $NEW_HOME\/rdbms\/admin\/preupgrade.jar FILE DIR \/tmp\/preupgrade_output<\/code><\/td><\/tr><tr><td>Review preupgrade log<\/td><td><code>grep -E \"ERROR|WARNING\" \/tmp\/preupgrade_output\/preupgrade.log<\/code><\/td><\/tr><tr><td>Run pre-fixups<\/td><td><code>@\/tmp\/preupgrade_output\/preupgrade_fixups.sql<\/code><\/td><\/tr><tr><td>Purge recyclebin<\/td><td><code>PURGE DBA_RECYCLEBIN;<\/code><\/td><\/tr><tr><td>Gather dict stats<\/td><td><code>EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;<\/code><\/td><\/tr><tr><td>Recompile invalids<\/td><td><code>@?\/rdbms\/admin\/utlrp.sql<\/code><\/td><\/tr><tr><td>Check components (pre)<\/td><td><code>SELECT comp_name,version,status FROM dba_registry;<\/code><\/td><\/tr><tr><td>Take pre-upgrade backup<\/td><td><code>BACKUP DATABASE TAG 'PRE_UPGRADE_BACKUP' PLUS ARCHIVELOG;<\/code><\/td><\/tr><tr><td>Shutdown source DB<\/td><td><code>SHUTDOWN IMMEDIATE;<\/code><\/td><\/tr><tr><td>Switch to 19c home<\/td><td><code>export ORACLE_HOME=\/u01\/...\/19.3.0\/dbhome_1<\/code><\/td><\/tr><tr><td>Update oratab<\/td><td>`sed -i &#8216;s<\/td><\/tr><tr><td>Start in upgrade mode<\/td><td><code>STARTUP UPGRADE;<\/code><\/td><\/tr><tr><td>Run upgrade script<\/td><td><code>@?\/rdbms\/admin\/catupgrd.sql<\/code><\/td><\/tr><tr><td>Restart normally<\/td><td><code>SHUTDOWN IMMEDIATE; STARTUP;<\/code><\/td><\/tr><tr><td>Check upgrade status<\/td><td><code>@?\/rdbms\/admin\/utlu19s.sql<\/code><\/td><\/tr><tr><td>Run post-fixups<\/td><td><code>@\/tmp\/preupgrade_output\/postupgrade_fixups.sql<\/code><\/td><\/tr><tr><td>Recompile after upgrade<\/td><td><code>@?\/rdbms\/admin\/utlrp.sql<\/code><\/td><\/tr><tr><td>Check components (post)<\/td><td><code>SELECT comp_name,version,status FROM dba_registry;<\/code><\/td><\/tr><tr><td>Upgrade timezone<\/td><td><code>@?\/rdbms\/admin\/utltz_upg_check.sql<\/code> then <code>utltz_upg_apply.sql<\/code><\/td><\/tr><tr><td>Run datapatch<\/td><td><code>$ORACLE_HOME\/OPatch\/datapatch -verbose<\/code><\/td><\/tr><tr><td>Check datapatch result<\/td><td><code>SELECT patch_id,status FROM dba_registry_sqlpatch ORDER BY action_time DESC;<\/code><\/td><\/tr><tr><td>Gather dict stats (post)<\/td><td><code>EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;<\/code><\/td><\/tr><tr><td>Check deprecated params<\/td><td><code>SELECT name,value FROM v$parameter WHERE isdeprecated='TRUE' AND isdefault='FALSE';<\/code><\/td><\/tr><tr><td>Check COMPATIBLE<\/td><td><code>SHOW PARAMETER compatible;<\/code><\/td><\/tr><tr><td>Increase COMPATIBLE<\/td><td><code>ALTER SYSTEM SET COMPATIBLE='19.0.0' SCOPE=SPFILE;<\/code> (only after full testing)<\/td><\/tr><tr><td>Post-upgrade backup<\/td><td><code>BACKUP DATABASE TAG 'POST_UPGRADE_BACKUP' PLUS ARCHIVELOG;<\/code><\/td><\/tr><tr><td>AutoUpgrade analyze<\/td><td><code>java -jar autoupgrade.jar -config cfg.cfg -mode analyze<\/code><\/td><\/tr><tr><td>AutoUpgrade deploy<\/td><td><code>java -jar autoupgrade.jar -config cfg.cfg -mode deploy<\/code><\/td><\/tr><tr><td>Check alert log<\/td><td><code>grep -E \"ORA-|Error\" alert_ORCL.log<\/code><\/td><\/tr><tr><td>MOS Upgrade Checklist<\/td><td>Doc ID 2485457.1<\/td><\/tr><tr><td>MOS 19c Upgrade Best Practices<\/td><td>Doc ID 2539778.1<\/td><\/tr><tr><td>MOS AutoUpgrade Tool<\/td><td>Doc ID 1211665.1<\/td><\/tr><tr><td>MOS Upgrade Companion<\/td><td>Doc ID 412160.1<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">This SOP covers everything you need to upgrade Oracle Database to 19c on Linux without referring to any other source. Always run preupgrade.jar and fix every ERROR before starting the upgrade, always take a full RMAN backup immediately before and after the upgrade, always run datapatch after upgrade if a Release Update was pre-applied to the 19c home, do not increase the COMPATIBLE parameter until testing is fully complete and signed off, and always take a post-upgrade backup before handing over the upgraded database.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A complete production-ready SOP for upgrading Oracle Database from 11g\/12c\/18c to 19c on Linux. Covers pre-upgrade checks, preupgrade utility, upgrade methods, post-upgrade tasks, timezone upgrade, optimizer statistics, and full validation \u2014 with real commands, expected outputs, and consultant-level notes for both standard OFA and enterprise custom path conventions. 1. Document Info Item Detail Source Version [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":5797,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"googlesitekit_rrm_CAowu461DA:productID":"","footnotes":""},"categories":[1534],"tags":[],"class_list":["post-5796","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-oracle-sop"],"_links":{"self":[{"href":"https:\/\/w3buddy.com\/blog\/wp-json\/wp\/v2\/posts\/5796","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/w3buddy.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/w3buddy.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/w3buddy.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/w3buddy.com\/blog\/wp-json\/wp\/v2\/comments?post=5796"}],"version-history":[{"count":2,"href":"https:\/\/w3buddy.com\/blog\/wp-json\/wp\/v2\/posts\/5796\/revisions"}],"predecessor-version":[{"id":5808,"href":"https:\/\/w3buddy.com\/blog\/wp-json\/wp\/v2\/posts\/5796\/revisions\/5808"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/w3buddy.com\/blog\/wp-json\/wp\/v2\/media\/5797"}],"wp:attachment":[{"href":"https:\/\/w3buddy.com\/blog\/wp-json\/wp\/v2\/media?parent=5796"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/w3buddy.com\/blog\/wp-json\/wp\/v2\/categories?post=5796"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/w3buddy.com\/blog\/wp-json\/wp\/v2\/tags?post=5796"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}