TECNOLOGIA – Banco de Dados – Error - ORA-01000: maximum open cursors exceeded
Incidente
Ao realizar um processo em banco de dados Oracle utilizando sistemas com tecnologia G5/G6, independentemente do sistema utilizado, é apresentada a mensagem: Error - ORA-01000: maximum open cursors exceeded.
Causa
Essa situação ocorre porque o número de cursores em aberto no banco de dados superou o limite pré-definido nas configurações do banco.
Não há uma documentação oficial sobre a quantidade de cursores necessários, pois isso depende de regras e demais particularidades do sistema no ambiente do cliente.
Solução
1. Avalie se a situação está sendo causada na utilização de regras personalizadas. Você pode fazer a verificação do envolvimento de regras no processo com o apoio do Monitoramento de Customizações. Para maiores informações sobre Monitoramento de Customizações, avalie o artigo: TECNOLOGIA – Ferramentas Customizadas – Como realizar o Monitoramento de Customizações;
1.1. Caso haja intervenção de regras personalizadas, verifique se dentro das regras não estão sendo abertos cursores SQL que não estão sendo fechados/destruídos;
2. Se não houver intervenção de regras no processo, verifique qual rotina está causando a situação, pois a situação pode estar relacionada especificamente com essa rotina.
2.1. Com o apoio do DBA da sua empresa, você pode acompanhar a execução das rotinas do sistema e ir monitorando a quantidade de cursores que ficam em aberto a cada execução, validando se ao final do processamento da rotina, a quantidade de cursores em aberto é diminuída. Abaixo segue exemplo de comando para verificar os cursores em aberto no banco de dados:
SELECT SUM(A.VALUE) TOTAL_CUR
, AVG(A.VALUE) AVG_CUR, MAX(A.VALUE) MAX_CUR,S.USERNAME, S.MACHINE
FROM V$SESSTAT A, V$STATNAME B, V$SESSION S
WHERE A.STATISTIC# = B.STATISTIC# AND S.SID=A.SID
AND B.NAME = 'OPENED CURSORS CURRENT'
GROUP BY S.USERNAME, S.MACHINE
ORDER BY 1 DESC
3. Verifique a configuração referente o número máximo de cursores abertos no Banco de Dados. Comando para verificar o valor definido para o parâmetro OPEN-CURSORS:
SELECT NAME,VALUE,ISDEFAULT FROM V$PARAMETER
WHERE NAME IN ('OPEN_CURSORS', 'OPEN_CURSORS')
ORDER BY NAME
Importante
Verifique acompanhamento do DBA da sua empresa para atuação nos procedimentos abaixo mencionados, que são relacionados ao banco de dados Oracle.
3.1. Avalie aumentar a configuração referente ao número máximo de cursores abertos do Banco de Dados. O ideal é que o parâmetro esteja configurado com no mínimo 3500;
3.1.1. O aumento do número máximo de cursores em aberto é realizada:
- Através do parâmetro OPEN_CURSORS no arquivo de configuração INITORCL.ORA, ou;
- Via comando direto na base: ALTER SYSTEM SET OPEN_CURSORS = 3500;
Importante
- Em versões mais recentes do Banco o nome do arquivo é Init.ora;
- Lembre-se de realizar backup deste arquivo antes de qualquer alteração;
- Se já tiver este valor 3500 e a situação persistir, aumente o valor indicado.
Atenção! Antes de realizar qualquer alteração, analise o impacto que poderá ter em outros lançamentos/processos do sistema.