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> / 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 :
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 :
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 :
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> / 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!!!