Autoupgrade Oracle 19c: Aggiornamento all'ultima RU disponibile!



Ciao naviganti in cerca di esperienze forti! In attesa che Oracle rilasci on premise l'ultima interessante release, la 23ai, proviamo ad aggiornare la nostra istanza con questo tool che a detta del product group è il tool definitivo per un aggiornamento senza bestemmie del db più tosto del mondo. 

19.02.2025 Oracle Linux 9.x è supportata dall'ultima release di AutoUpgrade

** 02.04.2025 Dopo oltre un mese di scambio di poco efficaci messaggi con il supporto, hanno confermato un bug!! Ve lo riporto appena lo rendono di pubblico dominio.

*** 13.05.2025 Siamo oltre i tre mesi, ingaggiato un altro tecnico, ancora analisi. Il BUG alla fine è stato segnato ma non gestito. BOH!

**** 05.08.2025 sto provando l'ultima release di Autoupgrade (25.4) Dal supporto silenzio assoluto se non banali "le faremo sapere" o "development working". Ho chiuso in malo modo l'SR.

***** 06.08.25 finalmente, per puro caso, mi sono imbattuto in questo MOS 3049238.1
pare che l'errore fosse nella mancanza del file oraInst.loc sotto la /u01/app/oraInventory !!!

Di fatto la colpa non era di Autoupgrade che riportava lo stesso errore di quando ho provato ad installare a mano in binari con l'opzione -ApplyRU. Però per il loro Dio... potrebbero implementare un check sull'esistenza di quel file anche durante l'analyze mode.....

NB: Se durante l'installazione e/o creazione della nuova home si seleziona nelle patch da installare anche OJVM, bisogna assicurarsi che in path ci siano i binari di perl:
export PATH=$ORACLE_HOME/perl/bin:$PATH

export PERL5LIB=$ORACLE_HOME/perl/lib


Parto subito dicendo che su due test differenti ho fallito miseramente, quindi proprio così smothless di fatto non è. E pensare che la prima prova l'ho fatta su'istanza che viene da un doppio aggiornamento: 11.2.04->12.2.01->19.3.0** quindi magari mi son complicato la vita, ma la seconda, tutto solamente di test con db assoutalmente vuoto, mi sta facendo saltare tutti i nervi già nervosi ed è da qui sotto in poi che vi chiedo tutta la vostra energia positiva!

Come ambiente di test utilizzo quello che ho parzialmente descritto nel mio primo post, una 19c tirata al pelo in configurazione multitenant (CDB/PDB) su una Oracle Linux 9.5 che è in matrice. 

Tutto quello che riporterò è documentato molto meglio ma con un sacco di parole in più qui:

About Oracle Database AutoUpgrade

La prima cosa da fare in assoluto è scaricare l'ultima versione del tool ora disponibile anche pubblicamente senza necessità di un account a pagamento, potete scaricarla da qui e poi sostituirla a quella presente nella $ORACLE_HOME/rdbms/admin/autoupgrade.jar. Altro prerequisito è avere installata la JDK 11.x con la quale è stato sviluppato.:

[root@orcl19c ~]# dnf install java-11-openjdk.x86_64

Per comodità mi sono creato sotto la home una cartella autoupgrade che contiene sia il keyvault (nel file di testo allegato al pacchetto ci sono le istruzione su come crearlo) utile a scaricare le ultime patch in automatico ma che richiede un account aziendale, e la cartella dei log che sono andato a specificare nel file di configurazione:

[root@orcl19c ~]#  java -jar $ORACLE_HOME/rdbms/admin/autoupgrade.jar -create_sample_file config

Vi creerà il file sample_config.cfg che potete rinominare e modificare a seconda delle vostre particolarità, questo è il mio (estratto parziale ma con l'essenziale 😀):

global.autoupg_log_dir=/u01/app/oracle/cfgtoollogs/autoupgrade-patchingglobal.global_log_dir=/home/oracle/scripts/autopatch/logs

# Database number 1 - Full DB/CDB upgrade

global.keystore=/home/oracle/scripts/autopatch/keystore
upg1.sid=cdbcrow
upg1.source_home=/u01/app/oracle/product/19.3.0/dbhome_1
upg1.target_home=/u01/app/oracle/product/19.3.0/dbhome_2
upg1.folder=/u01/software
upg1.patch=OPATCH,RU,DPBP #per usare questa dovete avere un account con il supporto.
upg1.download=YES
upg1.upgrade_node=orcl19c.luliba.lan
upg1.run_utlrp=yes
upg1.timezone_upg=yes


ATTENZIONE ATTENZIONE! L'istanza deve avere l'archive mode abilitato per darvi la possibilità di rollbackare l'attività in caso di merdone. Senza non parte quindi armatevi di pazienza, smontate l'istanza, date l'alter e riapritela. NB, l'operazione è a livello di CBD, i PDB non hanno "vita propria" quindi sincerativi di essere sulla root. Sapete farlo? No? Vabbè lasciate un commento che ve lo spiego, non ho voglia di documentare anche questo 👹
A differenza del solito opatch (non rolling) che vuole istanza & listener chiusi, autoupgrade pretende che sia tutto up&running

05.08.25
--per evitare l'archive mode, quindi no rollback in caso di disastro, va aggiunta questa opzione:
patch1.restoration=YES

Direi che come prereq sono a posto, quindi fuoco alle polveri e dai che va......!

Partiamo con l'ANALIZZARE se siamo buoni per il brodo:

[oracle@orcl19c scripts]$ java -jar $ORACLE_HOME/rdbms/admin/autoupgrade.jar -patch -config config.cfg -mode analyze

AutoUpgrade Patching 25.1.250212 launched with default internal options
Processing config file ...
Loading AutoUpgrade Patching keystore

AutoUpgrade Patching keystore was successfully loaded

Connected to MOS - Searching for specified patches
----------------------------------
Downloading files to /u01/software
----------------------------------
DATABASE RELEASE UPDATE 19.28.0.0.0
File: p37260974_190000_Linux-x86-64.zip - LOCATED

DATAPUMP BUNDLE PATCH 19.28.0.0.0
File: p37470729_1926000DBRU_Generic.zip - LOCATED

OPatch 12.2.0.1.47 for DB 19.0.0.0.0 (Jul 2025)
File: p6880880_190000_Linux-x86-64.zip - LOCATED
----------------------------------

+-----------------------------------------+
| Starting AutoUpgrade Patching execution |
+-----------------------------------------+
1 CDB(s) plus 2 PDB(s) will be analyzed
Type 'help' to list console commands
patch> lsj -a 10 <-Controllo ogni 10" l'avanzamento
patch> +----+-------+---------+---------+-------+----------+-------+----------------------------+
|Job#|DB_NAME|    STAGE|OPERATION| STATUS|START_TIME|UPDATED|                     MESSAGE|
+----+-------+---------+---------+-------+----------+-------+----------------------------+
| 103|cdbcrow|PRECHECKS|EXECUTING|RUNNING|  14:23:10| 5s ago|Loading database information|
+----+-------+---------+---------+-------+----------+-------+----------------------------+
Total jobs 1

The command lsj is running every 10 seconds. PRESS ENTER TO EXIT

..dopo alcune decine di secondi di analisi:
The command lsj is running every 10 seconds. PRESS ENTER TO EXIT
+----+-------+---------+---------+-------+----------+-------+----------------+
|Job#|DB_NAME|    STAGE|OPERATION| STATUS|START_TIME|UPDATED|         MESSAGE|
+----+-------+---------+---------+-------+----------+-------+----------------+
| 107|cdbcrow|PRECHECKS|EXECUTING|RUNNING|  14:23:10| 0s ago|Executing Checks|
+----+-------+---------+---------+-------+----------+-------+----------------+
Total jobs 1

The command lsj is running every 10 seconds. PRESS ENTER TO EXIT
Job 103 completed
------------------- Final Summary --------------------
Number of databases            [ 1 ]

Jobs finished                  [1]
Jobs failed                    [0]

Please check the summary report at:
/home/oracle/scripts/autopatch/logs/cfgtoollogs/patch/auto/status/status.html
/home/oracle/scripts/autopatch/logs/cfgtoollogs/patch/auto/status/status.log
[oracle@orcl19c scripts]$

Ti viene da dire: "Figo, è tutto perfetto, guarda anche il log, siamo in una botte di ferro!"
==========================================
[Job ID] 107
==========================================
[DB Name]                orcl
[Version Before AutoUpgrade Patching] 19.25.0.0.0
[Version After AutoUpgrade Patching]  19.26.0.0.250121
------------------------------------------
[Stage Name]    PENDING
[Status]        SUCCESS
[Start Time]    2025-02-25 11:05:10
[Duration]      0:00:00
[Log Directory] /home/oracle/scripts/autopatch/logs/cdbcrow/103/pending
------------------------------------------
[Stage Name]    PRECHECKS
[Status]        SUCCESS
[Start Time]    2025-02-02 14:23:10
[Duration]      0:03:09
[Log Directory] /home/oracle/scripts/autopatch/logs/cdbcrow/103/prechecks
[Detail]        /home/oracle/scripts/autopatch/logs/cdbcrow/103/prechecks/orcl_preupgrade.log
                Check passed and no manual intervention needed


Vai lanciamolo in modalità DEPLOY, quindi fa cose di un certo peso! Ora ci vorrà un po' perché deve scompattare i binari nella nuova dbhome_2, applicare l'ultima versione di OPatch e poi applicare la RU di Gennaio.:

[oracle@orcl19c scripts]$ java -jar $ORACLE_HOME/rdbms/admin/autoupgrade.jar -patch -config config.cfg -mode deploy
...

schippo un po' di pre-check
..

The command lsj is running every 10 seconds. PRESS ENTER TO EXIT
+----+-------+-------+---------+-------+----------+-------+---------------------+
|Job#|DB_NAME|  STAGE|OPERATION| STATUS|START_TIME|UPDATED|              MESSAGE|
+----+-------+-------+---------+-------+----------+-------+---------------------+
| 107|cdbcrow|EXTRACT|EXECUTING|RUNNING|  14:31:12|14s ago|Extracting gold image|
+----+-------+-------+---------+-------+----------+-------+---------------------+
...

The command lsj is running every 10 seconds. PRESS ENTER TO EXIT
+----+-------+-------+---------+-------+----------+-------+----------------------+
|Job#|DB_NAME|  STAGE|OPERATION| STATUS|START_TIME|UPDATED|               MESSAGE|
+----+-------+-------+---------+-------+----------+-------+----------------------+
| 107|cdbcrow|INSTALL|EXECUTING|RUNNING|  14:31:12| 2s ago|Installing ORACLE_HOME|
+----+-------+-------+---------+-------+----------+-------+----------------------+

...

The command lsj is running every 10 seconds. PRESS ENTER TO EXIT
+----+-------+------+---------+-------+----------+-------+---------------------------------+
|Job#|DB_NAME| STAGE|OPERATION| STATUS|START_TIME|UPDATED|                          MESSAGE|
+----+-------+------+---------+-------+----------+-------+---------------------------------+
| 107|cdbcrow|OPATCH|EXECUTING|RUNNING|  11:09:26| 3s ago|DATAPUMP BUNDLE PATCH 19.26.0.0.0|
+----+-------+------+---------+-------+----------+-------+---------------------------------+

...

0 seconds. PRESS ENTER TO EXIT
+----+-------+--------+---------+-------+----------+-------+--------+
|Job#|DB_NAME|   STAGE|OPERATION| STATUS|START_TIME|UPDATED| MESSAGE|
+----+-------+--------+---------+-------+----------+-------+--------+
| 107|cdbcrow|PATCHING|EXECUTING|RUNNING|  11:09:26|32s ago|Patching|
+----+-------+--------+---------+-------+----------+-------+--------+
Total jobs 1

The command lsj is running every 10 seconds. PRESS ENTER TO EXIT
+----+-------+--------+---------+-------+----------+-------+----------------------------------------+
|Job#|DB_NAME|   STAGE|OPERATION| STATUS|START_TIME|UPDATED|                                 MESSAGE|
+----+-------+--------+---------+-------+----------+-------+----------------------------------------+
| 107|cdbcrow|PATCHING|EXECUTING|RUNNING|  11:09:26| 0s ago|PRECHECKS - Loading database information|
+----+-------+--------+---------+-------+----------+-------+----------------------------------------+
Total jobs 1

..

The command lsj is running every 10 seconds. PRESS ENTER TO EXIT
+----+-------+--------+---------+-------+----------+-------+----------------------------+
|Job#|DB_NAME|   STAGE|OPERATION| STATUS|START_TIME|UPDATED|                     MESSAGE|
+----+-------+--------+---------+-------+----------+-------+----------------------------+
| 107|cdbcrow|PATCHING|EXECUTING|RUNNING|  11:09:26|20s ago|PRECHECKS - Executing Checks|
+----+-------+--------+---------+-------+----------+-------+----------------------------+
Total jobs 1

The command lsj is running every 10 seconds. PRESS ENTER TO EXIT
+----+-------+--------+---------+-------+----------+-------+------------------------------+
|Job#|DB_NAME|   STAGE|OPERATION| STATUS|START_TIME|UPDATED|                       MESSAGE|
+----+-------+--------+---------+-------+----------+-------+------------------------------+
| 107|cdbcrow|PATCHING|EXECUTING|RUNNING|  11:09:26| 0s ago|PREFIXUPS - Refreshing DB info|
+----+-------+--------+---------+-------+----------+-------+------------------------------+
Total jobs 1

The command lsj is running every 10 seconds. PRESS ENTER TO EXIT
+----+-------+--------+---------+-------+----------+-------+------------------------------+
|Job#|DB_NAME|   STAGE|OPERATION| STATUS|START_TIME|UPDATED|                       MESSAGE|
+----+-------+--------+---------+-------+----------+-------+------------------------------+
| 107|cdbcrow|PATCHING|EXECUTING|RUNNING|  11:09:26|10s ago|PREFIXUPS - Refreshing DB info|
+----+-------+--------+---------+-------+----------+-------+------------------------------+

The command lsj is running every 10 seconds. PRESS ENTER TO EXIT
+----+-------+--------+---------+-------+----------+-------+-------------------------------+
|Job#|DB_NAME|   STAGE|OPERATION| STATUS|START_TIME|UPDATED|                        MESSAGE|
+----+-------+--------+---------+-------+----------+-------+-------------------------------+
| 107|cdbcrow|PATCHING|EXECUTING|RUNNING|  11:09:26|20s ago|PREFIXUPS - Re-Executing Checks|
+----+-------+--------+---------+-------+----------+-------+-------------------------------+
Total jobs 1

The command lsj is running every 10 seconds. PRESS ENTER TO EXIT
+----+-------+--------+---------+-------+----------+-------+----------------------------------------+
|Job#|DB_NAME|   STAGE|OPERATION| STATUS|START_TIME|UPDATED|                                 MESSAGE|
+----+-------+--------+---------+-------+----------+-------+----------------------------------------+
| 107|cdbcrow|PATCHING|EXECUTING|RUNNING|  11:09:26| 0s ago|DRAIN - Creating final SpFile in drain f|
+----+-------+--------+---------+-------+----------+-------+----------------------------------------+
Total jobs 1

..
The command lsj is running every 10 seconds. PRESS ENTER TO EXIT
+----+-------+--------+---------+-------+----------+-------+-------------------+
|Job#|DB_NAME|   STAGE|OPERATION| STATUS|START_TIME|UPDATED|            MESSAGE|
+----+-------+--------+---------+-------+----------+-------+-------------------+
| 107|cdbcrow|PATCHING|EXECUTING|RUNNING|  11:09:26|20s ago|DBUPGRADE - Running|
+----+-------+--------+---------+-------+----------+-------+-------------------+
...
The command lsj is running every 10 seconds. PRESS ENTER TO EXIT
+----+-------+--------+---------+-------+----------+-------+-------------------------------+
|Job#|DB_NAME|   STAGE|OPERATION| STATUS|START_TIME|UPDATED|                        MESSAGE|
+----+-------+--------+---------+-------+----------+-------+-------------------------------+
| 107|cdbcrow|PATCHING|EXECUTING|RUNNING|  11:09:26|10s ago|DBUPGRADE - 0%Patching CDB$ROOT|
+----+-------+--------+---------+-------+----------+-------+-------------------------------+
Total jobs 1

..

The command lsj is running every 10 seconds. PRESS ENTER TO EXIT
+----+-------+--------+---------+-------+----------+-------+--------------------------------+
|Job#|DB_NAME|   STAGE|OPERATION| STATUS|START_TIME|UPDATED|                         MESSAGE|
+----+-------+--------+---------+-------+----------+-------+--------------------------------+
| 107|cdbcrow|PATCHING|EXECUTING|RUNNING|  11:09:26|10s ago|DBUPGRADE - 90%Patching CDB$ROOT|
+----+-------+--------+---------+-------+----------+-------+--------------------------------+

...

The command lsj is running every 10 seconds. PRESS ENTER TO EXIT
+----+-------+--------+---------+-------+----------+-------+-------------------------------+
|Job#|DB_NAME|   STAGE|OPERATION| STATUS|START_TIME|UPDATED|                        MESSAGE|
+----+-------+--------+---------+-------+----------+-------+-------------------------------+
| 107|cdbcrow|PATCHING|EXECUTING|RUNNING|  11:09:26| 0s ago|DBUPGRADE - 0%Patching PDB$SEED|
+----+-------+--------+---------+-------+----------+-------+-------------------------------+

The command lsj is running every 10 seconds. PRESS ENTER TO EXIT
+----+-------+--------+---------+-------+----------+-------+-------------------------------+
|Job#|DB_NAME|   STAGE|OPERATION| STATUS|START_TIME|UPDATED|                        MESSAGE|
+----+-------+--------+---------+-------+----------+-------+-------------------------------+
| 107|cdbcrow|PATCHING|EXECUTING|RUNNING|  11:09:26|20s ago|DBUPGRADE - 90%Patching PDBCROW|
+----+-------+--------+---------+-------+----------+-------+-------------------------------+
Total jobs 1

The command lsj is running every 10 seconds. PRESS ENTER TO EXIT
+----+-------+--------+---------+-------+----------+-------+--------------------------------+
|Job#|DB_NAME|   STAGE|OPERATION| STATUS|START_TIME|UPDATED|                         MESSAGE|
+----+-------+--------+---------+-------+----------+-------+--------------------------------+
| 107|cdbcrow|PATCHING|EXECUTING|RUNNING|  11:09:26| 0s ago|DBUPGRADE - 13%Patching PDB$SEED|
+----+-------+--------+---------+-------+----------+-------+--------------------------------+
Total jobs 1

The command lsj is running every 10 seconds. PRESS ENTER TO EXIT
+----+-------+--------+---------+-------+----------+-------+-----------------------------+
|Job#|DB_NAME|   STAGE|OPERATION| STATUS|START_TIME|UPDATED|                      MESSAGE|
+----+-------+--------+---------+-------+----------+-------+-----------------------------+
| 107|cdbcrow|PATCHING|EXECUTING|RUNNING|  11:09:26|20s ago|POSTFIXUPS - Executing fixups|
+----+-------+--------+---------+-------+----------+-------+-----------------------------+
Total jobs 1

The command lsj is running every 10 seconds. PRESS ENTER TO EXIT
+----+-------+--------+---------+-------+----------+-------+--------------------------------+
|Job#|DB_NAME|   STAGE|OPERATION| STATUS|START_TIME|UPDATED|                         MESSAGE|
+----+-------+--------+---------+-------+----------+-------+--------------------------------+
| 107|cdbcrow|PATCHING|EXECUTING|RUNNING|  11:09:26| 0s ago|POSTFIXUPS - Re-Executing Checks|
+----+-------+--------+---------+-------+----------+-------+--------------------------------+
Total jobs 1

The command lsj is running every 10 seconds. PRESS ENTER TO EXIT
+----+-------+----------+---------+-------+----------+-------+----------------+
|Job#|DB_NAME|     STAGE|OPERATION| STATUS|START_TIME|UPDATED|         MESSAGE|
+----+-------+----------+---------+-------+----------+-------+----------------+
| 107|cdbcrow|POSTCHECKS|EXECUTING|RUNNING|  11:09:26| 2s ago|Executing Checks|
+----+-------+----------+---------+-------+----------+-------+----------------+
Total jobs 1

The command lsj is running every 10 seconds. PRESS ENTER TO EXIT
+----+-------+----------+---------+-------+----------+-------+----------------+
|Job#|DB_NAME|     STAGE|OPERATION| STATUS|START_TIME|UPDATED|         MESSAGE|
+----+-------+----------+---------+-------+----------+-------+----------------+
| 107|cdbcrow|POSTFIXUPS|EXECUTING|RUNNING|  11:09:26| 6s ago|Executing fixups|
+----+-------+----------+---------+-------+----------+-------+----------------+

The command lsj is running every 10 seconds. PRESS ENTER TO EXIT
+----+-------+----------+---------+-------+----------+-------+-------------------+
|Job#|DB_NAME|     STAGE|OPERATION| STATUS|START_TIME|UPDATED|            MESSAGE|
+----+-------+----------+---------+-------+----------+-------+-------------------+
| 107|cdbcrow|POSTFIXUPS|EXECUTING|RUNNING|  11:09:26| 0s ago|Re-Executing Checks|
+----+-------+----------+---------+-------+----------+-------+-------------------+
Total jobs 1

The command lsj is running every 10 seconds. PRESS ENTER TO EXIT
Job 107 completed
------------------- Final Summary --------------------
Number of databases            [ 1 ]

Jobs finished                  [1]
Jobs failed                    [0]
Jobs restored                  [0]
Jobs pending                   [0]

---- Drop GRP at your convenience once you consider it is no longer needed ----

Please check the summary report at:
/home/oracle/scripts/autopatch/logs/cfgtoollogs/patch/auto/status/status.html
/home/oracle/scripts/autopatch/logs/cfgtoollogs/patch/auto/status/status.log
[oracle@orcl19c scripts]$

DAJEEEEEEEE

oracle@orcl19c ~]$ opatch lsinv

Oracle Interim Patch Installer version 12.2.0.1.45

Copyright (c) 2025, Oracle Corporation.  All rights reserved.

Oracle Home       : /u01/app/oracle/product/19.3.0/dbhome_2

Central Inventory : /u01/app/oraInventory

   from           : /u01/app/oracle/product/19.3.0/dbhome_2/oraInst.loc

OPatch version    : 12.2.0.1.45

OUI version       : 12.2.0.7.0

Log file location : /u01/app/oracle/product/19.3.0/dbhome_2/cfgtoollogs/opatch/opatch2025-02-26_13-30-18PM_1.log

Lsinventory Output file location : /u01/app/oracle/product/19.3.0/dbhome_2/cfgtoollogs/opatch/lsinv/lsinventory2025-02-26_13-30-18PM.txt

--------------------------------------------------------------------------------

Local Machine Information::

Hostname: orcl19c.luliba.lan

ARU platform id: 226

ARU platform description:: Linux x86-64

Installed Top-level Products (1):

Oracle Database 19c                                                  19.0.0.0.0

There are 1 products installed in this Oracle Home.


Interim patches (3) :

Patch  37470729     : applied on Wed Feb 26 11:49:56 CET 2025

Unique Patch ID:  26036111

Patch description:  "DATAPUMP BUNDLE PATCH 19.26.0.0.0"

   Created on 19 Jan 2025, 23:06:04 hrs PST8PDT

   Bugs fixed:

     11845132, 20656226, 21664172, 23625458, 24338134, 24794088, 25143018

....

   This patch overlays patches:

     37260974

   This patch needs patches:

     37260974

   as prerequisites


Patch  37260974     : applied on Wed Feb 26 11:35:53 CET 2025

Unique Patch ID:  26040769

Patch description:  "Database Release Update : 19.26.0.0.250121 (37260974)"

   Created on 20 Jan 2025, 04:30:30 hrs UTC

   Bugs fixed:


Rimozione vecchia HOME

Il primo tentativo ha fallito con un "ERROR:null" e cercando sul MOS ho trovato il workaround:
[oracle@orcl19c dbhome_1]$ export CV_ASSUME_DISTID=OL7
[oracle@orcl19c 19.3.0]$ export ORACLE_HOME=$ORACLE_BASE/product/19.3.0/dbhome_1
[oracle@orcl19c dbhome_1]$ $ORACLE_HOME/deinstall/deinstall 

ALLA PROSSIMA RU! Sto giro è stato davvero estenuante :D

Commenti