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.
Subscribe to my newsletter
Read articles from David Sanz directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
David Sanz
David Sanz
Soy desarrollador, Analista, DBA Oracle y Arquitecto OCI, certificado en OCI Migration and Integration Certified Professional y Certified Architect Associate con más de 15 años de experiencia en plataformas Oracle además de especialista en temas de rendimiento.