Oracle 10g XE: ORA-01000: Maximo de Cursores Abertos Excedidos

10 respostas
F

Ola guj,

o log do servidor ta me mostrando esse erro… ja vasculhei todas as classes de acesso a banco e em todas elas estao sendo fechados os resultSets e o Statements… o Oracle esta configurado com OPEN_CURSORS=300…

Alguem ai que usa oracle tem uma pista do q pode estar acontecendo?

10 Respostas

J

Você está utilizando rs.getStatement().close() ???

F

nao, estou usando ResultSet.close() e PreparedStatement.close()

Vou testar aqui o metodo que me sugeriste e depois posto o resultado, se deu certo ou nao…

duvida: se o meu rs e criado a partir do pstmt, fechando o pstmt eu nao estaria fechando o rs tb nao?

A

Olá fabiocsi,

Dá uma olhada no material que o Mister M postou no blog dele sobre esse assunto

http://blog.michaelnascimento.com.br/2006/07/04/resolvendo-ora-01000-maximum-open-cursors-exceeded/

[]'s

F

vlw andrik.

vou testar pra ver o q acontece… eu li outro topico sobre isso aqui no guj, onde o cara nao conseguia fechar esses cursors de jeito nenhum, so fechando a conn…

obrigado pelo link :wink:

N

cara, tivemos este problema aqui recentimente, e seguinte…
se tu fechar todos os statements resultset abertos … isso da conta… aconteceram alguns casos também em triggers que não fechavam alguns cursores… mas dai eu acho que é outra historia…
obs::: o oracle xe por defualt vem com um numero baixo de cursores no limite… dependente da sua aplicação, talvez não seja sobre fechamento mas sim sobre uso mesmo.

Até…

M

fabiocsi,

Não adianta tentar adivinhar onde está o problema. As técnicas mencionadas no meu blog, citado pelo andrik, vão te levar exatamente a raiz da questão.

L

Não resolve.

R

Bem, vi sobre esse blog que mister__m cita, e realmente ele tem razao, voce tem que fechar tudo que abre, no meu caso que gerou esse erro foi uma bobagem de fechar os STATEMENTS. não estava fechando os statments que abria quando executava o comando sql(select), ai o erro reflete no PreparedStatement ou Statement que voce esteja usando. eu uso uma classe para abrir conexoes e executar comandos sql, (BeanConexao). só que tinha um erro ai nessa historia do sistema. vou escrever o método ExecuteQuery que eu uso para executar os selects que faço.

public synchronized ResultSet executeQuery(String query) throws SQLException {				

statement = conn.createStatement();

return statement.executeQuery(query);

}

não sei se você consegue ver, mas o statement é criado mas não fechado, porque ele precisa retornar para a classe que chamou né verdade. ai estava o erro que estava sendo gerado Ora 01000… Então criei na classe BeanConexao que tem esse método executequery o método FecharStatement ex:

public void fecharStatment() throws SQLException {		

statement.close();		

}

que após eu utilizar do statement eu chamo o método para fechar lá na classe de origem. ex:

String sql = "select...";		 		   
	   
	ResultSet rs = beanConexao.executeQuery(sql);
	   
	while (rs.next()) {
		...
	}		
	
	
	beanConexao.fecharStatment();

Valeu galera pela ajuda na busca da identificação do meu erro. espero que também tenha ajudado.

J

Desculpe ressucitar o tópico, mas estou com o mesmo problema e não consigo acessar o blog do mister__m!

B

UP!!
Também estou com o mesmo problema!!

Criado 1 de março de 2007
Ultima resposta 6 de out. de 2011
Respostas 10
Participantes 9