Pular para o conteúdo

Como corrigir o erro ORA-29532 removendo e reinstalando pacotes Java no banco de dados Oracle

ORA-29532

Olá pessoal, me deparei com um problema semana passada, um problema bem curioso porém muito chato de se resolver, ao tentar executar qualquer Package de Banco (ex.: DBMS_REPAIR) eu recebia a mensagem de erro ORA-29532, pois bem , resolvi pesquisar e me deparei com um problemão , observem.
Assim que comecei a pesquisar fui da tabela DBA_REGISTRY e para minha surpresa encontrei a seguinte informação :

SQL
SQL> /

COMP_NAME STATUS
---------------------------------------- -----------
Oracle Database Java Packages INVALID

Passei então a pesquisar, e consultar alguns colegas sobre o erro que me parecia estranho, até que um deles me disse que em uma pós migração de versão do Oracle 10g, alguns pacotes ficaram invalidos , e esse em especial JAVA também estava, para corrigir tal problema é necessário que sejam REMOVIDO todos os pacotes JAVA do Database e REINSTALA-los conforme manda uma documentação do metalink, o erro que aparece sempre que tentamos utilizar alguma feature ou recurso do Banco, como Export etc e tal é esse :

SQL
ORA-29532: Java call terminated by uncaught Java exception: java.lang.ExceptionInInitializerError

Sendo assim, resolvi postar aqui a solução para esse problema. Então vamos lá, caso você note o erro acima em seu DATABASE verifique antes se este erro é ocasionado pelo fato dos pacotes Java estarem INVALIDOS como demonstrado acima, após feito isso e constatado o problema siga os passos a seguir :

SQL
spool full_rmjvm.log
set echo on
connect / as sysdba
startup mount
alter system set "_system_trig_enabled" = false scope=memory;
alter system enable restricted session;
alter database open;
@?/rdbms/admin/catnoexf.sql
@?/rdbms/admin/catnojav.sql
@?/xdk/admin/rmxml.sql
@?/javavm/install/rmjvm.sql
truncate table java$jvm$status;
select * from obj$ where obj#=0 and type#=0;
delete from obj$ where obj#=0 and type#=0;
commit;
select owner, count(*) from all_objects
where object_type like '%JAVA%' group by owner;
select obj#, name from obj$
where type#=28 or type#=29 or type#=30 or namespace=32;
select o1.name from obj$ o1,obj$ o2
where o1.type#=5 and o1.owner#=1 and o1.name=o2.name and o2.type#=29;
shutdown immediate
set echo off
spool off
exit

Junte todos esses passos em um único script e o execute logado como SYS, ele fará todos os passos de remoção do JAVA da base de dados, feito isso verifique os logs, e em seguida execute a reinstalação dos pacotes JAVAS como segue abaixo :

SQL
spool full_jvminst.log;
set echo on
connect / as sysdba
startup mount
alter system set "_system_trig_enabled" = false scope=memory;
alter database open;
select obj#, name from obj$
where type#=28 or type#=29 or type#=30 or namespace=32;
@?/javavm/install/initjvm.sql
select count(*), object_type from all_objects
where object_type like '%JAVA%' group by object_type;
@?/xdk/admin/initxml.sql
select count(*), object_type from all_objects
where object_type like '%JAVA%' group by object_type;
@?/xdk/admin/xmlja.sql
select count(*), object_type from all_objects
where object_type like '%JAVA%' group by object_type;
@?/rdbms/admin/catjava.sql
select count(*), object_type from all_objects
where object_type like '%JAVA%' group by object_type;
@?/rdbms/admin/catexf.sql
select count(*), object_type from all_objects
where object_type like '%JAVA%' group by object_type;
shutdown immediate
set echo off
spool off
exit

Pronto seus pacotes java estão reinstalados, utilizando o script UTLRP.sql que faz a recompilação dos objetos invalidos, certifique-se de que não tenha sobra nada invalido, este script se encontra no diretório “$ORACLE_HOME/rdbms/admin”, em seguida faça uma query na DBA_REGISTRY para verificar se os pacotes que anteriormente estavam como invalidos retornaram ao status de válidos :

SQL
SQL> /

COMP_NAME STATUS
---------------------------------------- -----------
Oracle Database Java Packages VALID

SQL>

Eis que agora todos os recursos que anteriormente não funcionavam pelo fato de classes e procedures que tem chamadas em Java no oracle estavam inválidas, agora você poderá tranquilamente executar export, dbms’s etc.

Abraço á todos!!!

David Siqueira

David Siqueira

Atuando como DBA Oracle desde 2000, trabalhei em quase todos os grandes grupos de Empresas que utilizam tecnologia Oracle em São Paulo. Iniciei minhas atividades como escritor para comunidade Oracle em 2008, sou certificado nas versões 10g e 11g ( OCP) OCE RAC 10g, OCS Impementation Exadata e eleito Oracle ACE Brazil em Dezembro de 2011. Atualmente sou conselheiro técnico do G.U.O.B Brasil e atuo na área de coordenação de equipes de Infra-Estrutura e também como DBA Oracle Sênior.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress