Wednesday, November 11, 2026
  • About Us
  • Contact
DBAInsight
  • Guides
    • 23ai
    • RMAN
    • 26ai
    • Patch Update
    • RMAN
    • MySQL
    • Oracle GoldenGate
  • Cloud Technology
  • Case Studies
  • Troubleshooting
  • Training & Certification
NEWSLETTER
No Result
View All Result
DBAInsight
Home Troubleshooting

How to Fix ORA-29548: Java System Classes Version Mismatch in Oracle Database (CDB and PDB)

November 11, 2026
in Troubleshooting
0
How to Fix ORA-29548: Java System Classes Version Mismatch in Oracle Database (CDB and PDB)
0
SHARES
5
VIEWS

Table of Contents

Toggle
  • Introduction
    • Related posts
    • How to Fix ORA-01122, ORA-01110, and ORA-17503 Errors in Oracle Database 19c
    • How to Fix Oracle Datapatch Errors: DBMS_AW, HTTPURITYPE, and UTL_TCP
  • 1. Understanding ORA-29548
    • Common causes
  • 2. Check Oracle Java Component Status
  • 3. Resolving ORA-29548 in CDB$ROOT
    • Step 1: Capture Existing Parameter Values
    • Step 2: Execute the Java Recreation Script
    • Explanation of the Script
    • Step 3: Restore Original Parameter Values
    • Step 4: Verify Parameter Values
  • 4. Resolving ORA-29548 in PDB Databases
    • Step 1: Connect to the affected PDB
    • Step 2: Execute the Java VM Update Script
  • 5. Recompile Invalid Database Objects
  • 6. Validate the Java Components
    • Step 1: Check Database Component Status
    • Step 2: Verify Java Functionality
    • Step 3: Check Java Version
    • Step 4: Check Invalid Database Objects
  • 7. Important Considerations for Oracle RAC and Multitenant Environments
    • Check Installed Oracle Patches
    • Check SQL Patch History
  • Conclusion

Introduction

The Oracle Database error ORA-29548: Java system class reported occurs when the Java system classes stored inside the database do not match the Java version available in the Oracle Database software home.

This issue is commonly encountered after applying Oracle Database Release Updates (RUs), Oracle JVM (OJVM) patches, or performing database patching activities where the Java components are not updated consistently.

Related posts

How to Fix ORA-01122, ORA-01110, and ORA-17503 Errors in Oracle Database 19c

How to Fix ORA-01122, ORA-01110, and ORA-17503 Errors in Oracle Database 19c

November 4, 2026
How to Fix Oracle Datapatch Errors: DBMS_AW, HTTPURITYPE, and UTL_TCP

How to Fix Oracle Datapatch Errors: DBMS_AW, HTTPURITYPE, and UTL_TCP

November 2, 2026

For example, the following error indicates a mismatch between the Java system classes stored in the database and the Oracle executable:

ORA-29548: Java system class reported:
release of Java system classes in the database
(12.1.0.2.160419 1.6) does not match that of
the oracle executable (12.1.0.2.170117 1.6)

In this example:

  • Database Java system classes: 12.1.0.2.160419
  • Oracle executable Java version: 12.1.0.2.170117

The mismatch indicates that the Java system classes in the database are not synchronized with the Java version expected by the Oracle executable.

This article explains how to investigate and resolve ORA-29548 in Oracle Multitenant environments, including CDB and PDB databases.

1. Understanding ORA-29548

Oracle JVM (OJVM) is an integrated component of Oracle Database that allows Java applications and Java stored procedures to execute within the database.

The Java system classes are maintained inside the database. When an OJVM patch or database patch is applied, the corresponding database components may also need to be updated.

If the Oracle executable contains a newer Java version than the Java system classes stored in the database, Oracle may report ORA-29548.

Common causes

  • Applying an OJVM patch without completing the required database post-installation steps.
  • Incomplete OJVM patching.
  • Oracle Home and database component version mismatches.
  • Inconsistent patching across RAC nodes.
  • Failure to update Java components in individual PDBs.
  • Incomplete execution of Oracle-provided Java VM update scripts.

2. Check Oracle Java Component Status

Before performing any corrective action, check the installed database components.

Execute the following query as SYSDBA:

SET LINESIZE 200
SET PAGESIZE 100

SELECT comp_id,
       comp_name,
       version,
       status
FROM   dba_registry
ORDER BY comp_name;

Pay particular attention to the following components:

  • JAVAVM
  • CATJAVA
  • XML

Check whether these components are installed and whether their status is VALID.

Also verify Java functionality:

SELECT dbms_java.longname('TEST') AS long_name
FROM dual;

If the query returns ORA-29548, further investigation of the Java component versions is required.

3. Resolving ORA-29548 in CDB$ROOT

For certain Oracle Database releases and patching scenarios, recreating the Java system classes in the database may be used as a corrective procedure.

Before executing the Java recreation procedure, it is important to capture the existing values of the database parameters that will be modified. This ensures that the original configuration can be restored after completing the maintenance.

Step 1: Capture Existing Parameter Values

Connect to the CDB as SYSDBA and execute the following query:

SET LINESIZE 200
SET PAGESIZE 100

COLUMN name FORMAT A30
COLUMN value FORMAT A30
COLUMN display_value FORMAT A30

SELECT name,
       value,
       display_value,
       issys_modifiable,
       isdefault
FROM   v$parameter
WHERE  name IN (
       'java_jit_enabled',
       '_system_trig_enabled',
       'job_queue_processes'
)
ORDER BY name;

For Oracle RAC environments, capture parameter values across all instances:

SELECT inst_id,
       name,
       value,
       display_value,
       isdefault
FROM   gv$parameter
WHERE  name IN (
       'java_jit_enabled',
       '_system_trig_enabled',
       'job_queue_processes'
)
ORDER BY inst_id, name;

Additionally, capture the persistent parameter settings from the SPFILE:

SELECT sid,
       name,
       value,
       isspecified
FROM   v$spparameter
WHERE  name IN (
       'java_jit_enabled',
       '_system_trig_enabled',
       'job_queue_processes'
)
ORDER BY name, sid;

Save these outputs for reference before proceeding.

Step 2: Execute the Java Recreation Script

Create the following script as Create_Java.sql:

SPOOL Create_Java.log

SET ECHO ON

CONNECT / AS SYSDBA

ALTER SYSTEM SET JAVA_JIT_ENABLED=FALSE SCOPE=BOTH;

ALTER SYSTEM SET "_system_trig_enabled"=FALSE SCOPE=MEMORY;

ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

CREATE OR REPLACE JAVA SYSTEM;
/

@?/rdbms/admin/utlrp.sql

SET ECHO OFF

SPOOL OFF

EXIT

Execute the script:

sqlplus / as sysdba @Create_Java.sql

Explanation of the Script

JAVA_JIT_ENABLED=FALSE

Disables Java Just-In-Time compilation.

_system_trig_enabled=FALSE

Temporarily disables system triggers. This is a hidden Oracle parameter and should only be changed when specifically directed by Oracle Support.

JOB_QUEUE_PROCESSES=0

Temporarily disables job queue processes during the maintenance operation.

CREATE OR REPLACE JAVA SYSTEM

Recreates the Java system classes in the database.

utlrp.sql

Recompiles invalid database objects after the Java system recreation.

Important: This procedure is not a universal fix for every ORA-29548 occurrence. The use of hidden parameters and recreation of Java system classes can affect database operations. Confirm the procedure with Oracle Support for the exact database release and patch combination before executing it in production.

Step 3: Restore Original Parameter Values

After completing the Java recreation and recompilation, restore the parameters to their original values captured in Step 1.

For example, if the original parameter values were:

ParameterOriginal value
JAVA_JIT_ENABLEDTRUE
_system_trig_enabledTRUE
JOB_QUEUE_PROCESSES1000

The restoration commands would be:

ALTER SYSTEM SET JAVA_JIT_ENABLED=TRUE SCOPE=BOTH;

ALTER SYSTEM SET "_system_trig_enabled"=TRUE SCOPE=MEMORY;

ALTER SYSTEM SET JOB_QUEUE_PROCESSES=1000 SCOPE=BOTH;

The above values are examples. Always restore the actual original values from your environment.

Important considerations:

  • Restore instance-specific settings appropriately in Oracle RAC environments.
  • The hidden parameter _system_trig_enabled should only be modified and restored according to the applicable Oracle Support instructions.
  • Setting JOB_QUEUE_PROCESSES=0 disables scheduled job execution. Confirm that scheduled jobs can safely resume after maintenance.
  • Verify all parameter values after restoration.
  • If a parameter was originally using its default value, preserve that configuration rather than unnecessarily introducing an explicit setting.

Step 4: Verify Parameter Values

Execute the following query to confirm that the original settings have been restored:

SELECT name,
       value,
       display_value
FROM   v$parameter
WHERE  name IN (
       'java_jit_enabled',
       '_system_trig_enabled',
       'job_queue_processes'
)
ORDER BY name;

4. Resolving ORA-29548 in PDB Databases

In Oracle Multitenant architecture, Java components must also be checked and maintained within individual Pluggable Databases (PDBs).

If the Java component mismatch exists within a PDB, Oracle provides Java VM database update scripts as part of the Oracle Database software installation.

Step 1: Connect to the affected PDB

Connect to the CDB as SYSDBA and switch to the affected PDB:

ALTER SESSION SET CONTAINER = PDB_NAME;

Verify the current container:

SHOW CON_NAME;

Step 2: Execute the Java VM Update Script

Execute the following script using the appropriate SYSDBA privileges:

@?/javavm/install/update_javavm_db.sql

This script performs the Java VM database update procedure.

Repeat the validation and appropriate update procedure for each affected PDB.

Note: The exact update procedure depends on the Oracle Database release and installed OJVM patch level. Follow the corresponding Oracle patch README and Oracle Support instructions.

5. Recompile Invalid Database Objects

After completing the Java component update, execute the Oracle recompilation script:

@?/rdbms/admin/utlrp.sql

For a multitenant database, ensure that recompilation is performed in the appropriate containers.

6. Validate the Java Components

After completing the corrective procedure, verify the component status.

Step 1: Check Database Component Status

SELECT comp_id,
       comp_name,
       version,
       status
FROM   dba_registry
ORDER BY comp_name;

Pay particular attention to JAVAVM and CATJAVA.

Step 2: Verify Java Functionality

SELECT dbms_java.longname('TEST') AS long_name
FROM dual;

The query should execute successfully without ORA-29548.

Step 3: Check Java Version

SELECT dbms_java.get_jdk_version()
FROM dual;

Step 4: Check Invalid Database Objects

SELECT owner,
       object_type,
       COUNT(*) AS invalid_count
FROM   dba_objects
WHERE  status = 'INVALID'
GROUP BY owner, object_type
ORDER BY owner, object_type;

Review any remaining invalid objects and investigate whether they are related to the Java component update.

7. Important Considerations for Oracle RAC and Multitenant Environments

When resolving ORA-29548 in an Oracle RAC environment, consider the following:

  1. Verify that the required Oracle patches have been applied consistently across all RAC nodes.
  2. Compare the OPatch inventory across the Oracle Homes.
  3. Verify the OJVM patch status and database SQL patch status.
  4. Check JAVAVM and CATJAVA component status in CDB$ROOT and all affected PDBs.
  5. Review the relevant Oracle patch README for post-installation instructions.
  6. Take a valid RMAN backup before making changes.
  7. Capture existing parameter values before modifying database configuration.
  8. Restore all modified parameters after maintenance.
  9. Perform the maintenance during an approved maintenance window.
  10. Validate Java functionality in every affected container.

Check Installed Oracle Patches

Execute the following command from the operating system:

$ORACLE_HOME/OPatch/opatch lsinventory

This displays the installed patches in the Oracle Home.

Check SQL Patch History

Execute the following query:

SELECT patch_id,
       patch_type,
       action,
       status,
       action_time,
       description
FROM   dba_registry_sqlpatch
ORDER BY action_time DESC;

This helps identify the SQL patch installation and rollback history.

Conclusion

ORA-29548 is generally caused by a mismatch between the Java system classes stored in the Oracle Database and the Java version available in the Oracle software home.

In Oracle Multitenant environments, resolving this issue requires checking both the CDB root and individual PDBs. Ensuring that OJVM patching and database post-installation procedures are completed correctly is essential to maintaining consistent Java components.

Before executing any corrective procedure, capture the existing database parameter values and preserve the current configuration. After completing the maintenance, restore the original parameter settings and validate Java functionality across all affected containers.

Always verify the installed patch level, review the relevant Oracle patch documentation, and obtain the appropriate Oracle Support guidance before executing Java component recreation or update procedures in production environments.


Disclaimer: Database maintenance procedures described in this article are provided for educational purposes. Always review the official Oracle patch README and obtain the appropriate Oracle Support guidance before executing Java component recreation or update procedures in production environments.

Tags: ORA-29548Oracle CDB and PDBOracle Database TroubleshootingOracle Java VMOracle OJVM
Previous Post

Convert Oracle Non-CDB to PDB Using Refreshable Clone PDB – Step-by-Step Guide

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

POPULAR NEWS

  • Oracle Patch 38632161: Step-by-Step Guide to Upgrade Oracle 19c to Release Update 19.30

    Oracle Patch 38632161: Step-by-Step Guide to Upgrade Oracle 19c to Release Update 19.30

    0 shares
    Share 0 Tweet 0
  • How To Download And Install The Latest OPatch

    0 shares
    Share 0 Tweet 0
  • Oracle Database 19.32 Release Update (RU) Patching Guide – Patch 39472050

    0 shares
    Share 0 Tweet 0
  • How to Install Oracle 19c Database on Red Hat Enterprise Linux 9

    0 shares
    Share 0 Tweet 0
  • Installing Oracle Database 26AI on Red Hat Enterprise Linux 9

    0 shares
    Share 0 Tweet 0
  • About Us
  • Contact

© 2026 DBAInsight - Smarter Databases. Sharper Insights. DBAInsight.

No Result
View All Result
  • Home
  • Cloud & Modern DBs
  • Guides
  • Cloud Technology
  • Case Studies
  • Troubleshooting
  • Training & Certification

© 2026 DBAInsight - Smarter Databases. Sharper Insights. DBAInsight.

Add as a preferred source on Google
Add as preferred source on Google