ORA-29548: Java system class reported in Oracle

You might have encountered ORA-29548: Java system class reported error after applying OJVM patch in Oracle.

ORA-29548: Java system class reported: release of Java system classes in the database (19.0.0.0.200114 1.8) does not match that of the oracle executable (19.0.0.0.200714 1.8) ORA-06512: at line 1.

Recently we applied July 2020 database and OJVM PSU patch in Oracle database 19c which went very smooth but adpatch on APPS R12 failed due to error “ATTENTION: All workers either have failed or are waiting:”

On further investigation we observed ORA-29548 error in log file.

How to Resolve ORA-29548: Java system class reported?

Most of the time this error comes when you have not completed post patch steps for JVM Patch or if there is a problem with JAVA. First of all check if you are getting the same error using below query.

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.200114 1.8) does not match that of the oracle executable
(19.0.0.0.200714 1.8)

Workaround for this issue is to run “update_javavm_db.sql” script as a sys user. If you are using 12c, 19c multitenant container and pluggable database then you need to run this script in both CDB and PDB.

sqlplus / as sysdba
SQL> @?/javavm/install/update_javavm_db.sql
SQL> SET FEEDBACK 1
SQL> SET NUMWIDTH 10
SQL> SET LINESIZE 80
SQL> SET TRIMSPOOL ON
SQL> SET TAB OFF
SQL> SET PAGESIZE 100
SQL>
SQL> alter session set "_ORACLE_SCRIPT"=true;
Session altered.
SQL>
SQL> -- If Java is installed, do CJS.
SQL>
SQL> -- If CJS can deal with the SROs inconsistent with the new JDK,
SQL> -- the drop_sros() call here can be removed.
SQL> call initjvmaux.drop_sros();
Call completed.
SQL>
SQL> create or replace java system;
2 /
Java created.
SQL>
SQL> update dependency$
2 set p_timestamp=(select stime from obj$ where obj#=p_obj#)
3 where (select stime from obj$ where obj#=p_obj#)!=p_timestamp and
4 (select type# from obj$ where obj#=p_obj#)=29 and
5 (select owner# from obj$ where obj#=p_obj#)=0;
0 rows updated.
SQL>
SQL> commit;
Commit complete.
SQL>
SQL> alter session set "_ORACLE_SCRIPT"=false;
Session altered.

Check the version again. This time you should not get any error.

SQL> select dbms_java.get_jdk_version() from dual;
DBMS_JAVA.GET_JDK_VERSION()
1.8.0_261
1 row selected.