É bem mais comum do que gostaríamos. Já me deparei algumas vezes com o erro ORA-29548: Java system class reported: release of Java system classes in the database (VERSÃO_ANTIGA) does not match that of the oracle executable (VERSÃO_NOVA). Esse erro é causado principalmente pela aplicação incompleta do patch da JVM. Quando as atividades pós patch não são executadas corretamente a versão dos binários pode ficar diferente da versão registrada no banco de dados.
Esse erro deixa o java component
do banco de dados inválido. Podemos verificar isso com a consulta abaixo.
SQL >SET LINE 200 pages 100
SQL >COL COMP_NAME FOR A50
SQL > select comp_name,comp_id, status, version from dba_registry;
COMP_NAME COMP_ID STATUS VERSION
---------------------------------------- ------------------------------ ---------- ------------------------------
Oracle Multimedia ORDIM VALID 12.1.0.2.0
Oracle Text CONTEXT VALID 12.1.0.2.0
Oracle Workspace Manager OWM VALID 12.1.0.2.0
Oracle XML Database XDB VALID 12.1.0.2.0
Oracle Database Catalog Views CATALOG VALID 12.1.0.2.0
Oracle Database Packages and Types CATPROC VALID 12.1.0.2.0
JServer JAVA Virtual Machine JAVAVM INVALID 12.1.0.2.0
Oracle XDK XML VALID 12.1.0.2.0
Oracle Database Java Packages CATJAVA VALID 12.1.0.2.0
9 rows selected.
A solução para o problema é recriar o componente java system para que a versão dele fique de acordo com a versão dos binários. Para recriar o java system usamos o script abaixo update_javavm_db.sql
@?/javavm/install/update_javavm_db.sql
O resultado do script vai ser algo semelhante à saída abaixo.
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.
SQL>
Se após a execução do scrip o erro persistir, ou seja, se o java component continuar com status inválido. Os seguintes passos podem ser executados para fazer o reload do java component.
SQL > execute sys.dbms_registry.loaded('JAVAVM');
PL/SQL procedure successfully completed.
Elapsed: 00:02:37.11
SQL > execute sys.dbms_registry.valid('JAVAVM');
PL/SQL procedure successfully completed.
Elapsed: 00:00:02.73
SQL >
SQL > select comp_name,comp_id, status, version from dba_registry;
COMP_NAME COMP_ID STATUS VERSION
---------------------------------------- ------------------------------ ---------- ------------------------------
Oracle Multimedia ORDIM VALID 12.1.0.2.0
Oracle Text CONTEXT VALID 12.1.0.2.0
Oracle Workspace Manager OWM VALID 12.1.0.2.0
Oracle XML Database XDB VALID 12.1.0.2.0
Oracle Database Catalog Views CATALOG VALID 12.1.0.2.0
Oracle Database Packages and Types CATPROC VALID 12.1.0.2.0
JServer JAVA Virtual Machine JAVAVM LOADED 12.1.0.2.0
Oracle XDK XML VALID 12.1.0.2.0
Oracle Database Java Packages CATJAVA VALID 12.1.0.2.0
9 rows selected.
Para verificar podemos executar as seguintes consultas. A saída deve ser algo similar ao resultado abaixo.
SQL> set line 200
SQL> col long_name for a40
SQL> SELECT dbms_java.longname('TEST') long_name from dual;
LONG_NAME
----------------------------------------
TEST
SQL>
Também podemos verificar se o status do java está VALID
SQL> SET LINE 200 pages 100
SQL> COL COMP_NAME FOR A50
SQL> SELECT COMP_ID,COMP_NAME, VERSION,STATUS,MODIFIED FROM DBA_REGISTRY;
COMP_NAME COMP_ID STATUS VERSION
---------------------------------------- ------------------------------ ---------- ------------------------------
Oracle Multimedia ORDIM VALID 12.1.0.2.0
Oracle Text CONTEXT VALID 12.1.0.2.0
Oracle Workspace Manager OWM VALID 12.1.0.2.0
Oracle XML Database XDB VALID 12.1.0.2.0
Oracle Database Catalog Views CATALOG VALID 12.1.0.2.0
Oracle Database Packages and Types CATPROC VALID 12.1.0.2.0
JServer JAVA Virtual Machine JAVAVM VALID 12.1.0.2.0
Oracle XDK XML VALID 12.1.0.2.0
Oracle Database Java Packages CATJAVA VALID 12.1.0.2.0
9 rows selected.
Elapsed: 00:00:00.07
0 Comentários