Release mismatch, 19.0.0.0.230718 1.8 in database (classes.bin) vs 19.0.0.0.231017 1.8 in executable

Vamos a tratar de solucionar el siguiente error que teníamos presente en el alert log.

__(3):joxcsys: release mismatch, 19.0.0.0.230718 1.8 in database (classes.bin) vs 19.0.0.0.231017 1.8 in executable pid 35577 cid 3
2024-01-29T09:27:44.180287+01:00

Parece un error poco común a nivel de Java.

Para ver si tenemos algún error en la BBDD con Java, vamos a intentar ver si la api de DBMS_JAVA funciona con normalidad

SQL> select dbms_java.get_jdk_version() from dual;
select dbms_java.get_jdk_version() from dual
                                        *
ERROR at line 1:
ORA-29548: Java system class reported: release of Java system classes in the
database (19.0.0.0.230718 1.8) does not match that of the oracle executable
(19.0.0.0.231017 1.8)

No da respuesta. Mirando en la página de Oracle, concretamente la nota Doc ID 2934546.1 indica que uno de los motivos de error puede ser el siguiente "The Oracle JVM component became invalid after applying or rolling back an OJVM PSU patch to the database"

Así que vamos a realizar los siguientes pasos que nos indican a ver si conseguimos solucionar el error

SQL> shu immediate
SQL> startup upgrade
....
SQL> alter pluggable database all open upgrade ;
SQL> quit
[oracle@~]$ cd $ORACLE_HOME/OPatch
[oracle@OPatch]$ datapatch -verbose
SQL Patching tool version 19.21.0.0.0 Production on Mon Jan 29 09:35:34 2024
Copyright (c) 2012, 2023, Oracle.  All rights reserved.
....

Una vez aplicado cada paso anterior de manera exitosa y al ejecutar el OPatch, tenemos que recompilar siempre los objetos con el script @?/rdbms/admin/utlrp.sql.

SQL> shu immediate
SQL> startup
SQL> alter pluggable database all open;
SQL>  @?/rdbms/admin/utlrp.sql

Una vez finalizamos y vemos que el script se ha ejecutado bien, volvemos a ejecutar la api DBMS_JAVA a ver si nos devuelve información

SQL> select dbms_java.get_jdk_version() from dual;

DBMS_JAVA.GET_JDK_VERSION()
--------------------------------------------------------------------------------
1.8.0_391

Bien, a nivel de CDB$ROOT funciona, probamos a nivel de PDB

SQL> select dbms_java.get_jdk_version() from dual;
select dbms_java.get_jdk_version() from dual
                                        *
ERROR at line 1:
ORA-29548: Java system class reported: release of Java system classes in the
database (19.0.0.0.230718 1.8) does not match that of the oracle executable
(19.0.0.0.231017 1.8)

Vaya, seguimos con el mismo error, ¿Qué sucede?.

Revisando el alert log vemos que el motivo de error es porque las versiones han quedado desalineadas entre CDB$ROOT y la PDB

(3):joxcsys: release mismatch, 19.0.0.0.230718 1.8 in
 database (classes.bin) vs 19.0.0.0.231017 1.8 in executable pid 74271 cid 3

Para alinear ambas versiones, lo que vamos hacer es ejecutar el script @?/javavm/install/update_javavm_db.sql a nivel de PDB, no a nivel de CDB$ROOT

SQL>  @?/javavm/install/update_javavm_db.sql
....

Una vez que se ejecute con éxito, probamos de nuevo

SQL> select dbms_java.get_jdk_version() from dual;

DBMS_JAVA.GET_JDK_VERSION()
--------------------------------------------------------------------------------
1.8.0_391

Perfecto, ya funciona DBMS_JAVA a nivel de PDB. Espero que os sirva.