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

ORA-01000:cursores abertos máximos excedidos ao usar Spring SimpleJDBCCall


Depois de muitos testes resolvemos esse problema. É uma combinação de como estávamos usando o framework spring e o cliente oracle e o banco de dados oracle. Estávamos criando novos SimpleJDBCCalls que estavam usando as chamadas de metadados do cliente Oracle JDBC que eram retornadas como cursores que não estavam sendo fechados e limpos. Eu considero isso um bug na estrutura Spring JDBC em como ele chama metadados, mas não fecha o cursor. O Spring deve copiar os metadados do cursor e fechá-lo corretamente. Eu não me incomodei em abrir um problema de jira com o spring porque se você usar as melhores práticas, o bug não será exibido.

Ajustar OPEN_CURSORS ou qualquer um dos outros parâmetros é a maneira errada de corrigir esse problema e apenas atrasa sua exibição.

Nós trabalhamos em torno dele/consertamos movendo o SimpleJDBCCall para um DAO singleton para que haja apenas um cursor aberto para cada proc oracle que chamamos. Esses cursores ficam abertos durante a vida útil do aplicativo - o que considero um bug. Contanto que OPEN_CURSORS seja maior que o número de objetos SimpleJDBCCall, não haverá problemas.