# 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.

```plaintext
__(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

```plaintext
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

```plaintext
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**.

```plaintext
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

```plaintext
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

```plaintext
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

```plaintext
(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

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

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

```plaintext
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.
