Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

O Tomcat usa versões em cache de módulos pl/sql?


Esse problema ocorre com os pools de conexão JDBC e é um problema que você obtém com todos os servidores de aplicativos que usam pools de conexão JDBC, não apenas com o Tomcat. Os pools de conexões manterão várias conexões abertas no pool prontas para a próxima solicitação. Se um pacote PL/SQL tiver sido referenciado pela conexão e for recompilado, a próxima chamada para esse pacote gerará um erro ORA-06508. Isso afetará os pacotes em qualquer lugar na pilha de chamadas - não apenas o pacote que você chamou diretamente.

Para resolver isso, alguns servidores de aplicativos (como o Weblogic) possuem um método de teste que é chamado periodicamente. Se o teste falhar, a conexão será removida do pool ou atualizada de alguma forma. Não tenho certeza de qual mecanismo o Tomcat possui.

Outra maneira de resolver isso é chamar dbms_session.reset_package como a primeira chamada de método em sua chamada JDBC. Isso limpará o estado do pacote da sua sessão. Essa abordagem não é recomendada, pois tem uma sobrecarga de desempenho, além de todas as variáveis ​​no escopo do pacote serem redefinidas, de modo que os blocos de inicialização do pacote precisam ser chamados novamente - outro impacto no desempenho.

Se você tiver o problema e não tiver uma maneira de descartar conexões ruins, precisará redefinir todo o pool de conexões, pois qualquer conexão no pool sofrerá a mesma exceção.