SQL para definir statement_timeout no Oracle

5 respostas
bsl.lacerda

Olá pessoal!

Alguém poderia me dizer o SQL para setar um timeout no Statement?

Estou tentando SET LOCAL statement_timeout TO 1000 mas não está funcionando.
Erro: ORA-00922: missing or invalid option

Obrigado.

5 Respostas

Hebert_Coelho

Caso você utilize preparedstatement aqui tem uma solução: http://stackoverflow.com/questions/5913569/how-to-set-query-timeout-on-preparedstatement .

bsl.lacerda

Opa, obrigado pela resposta.

Desta forma não funcionaria pra mim pois quero definir o timeout de uma forma generalizada para todas as queries.
Explicando melhor, estou tentando executar este SQL na configuração do datasource no JBoss, pois de acordo com a arquitetura do projeto em questão, me parece a única solução mais viável já que o mesmo não usa JPA2 onde eu poderia definir a propriedade javax.persistence.query.timeout e “resolver meu problema”.

Ex da configuração no DS no JBoss:

<local-tx-datasource>
...
<new-connection-sql>ALTER ROLE abcd SET statement_timeout = 1000</new-connection-sql>
...
<local-tx-datasource>

e

<local-tx-datasource>
...
<new-connection-sql>ALTER ROLE abcd SET statement_timeout TO 1000</new-connection-sql>
...
<local-tx-datasource>
Hebert_Coelho

Nunca vi usar desse modo como você colocou não.

Já como aqui: 300
https://community.jboss.org/wiki/ConfigDataSources

bsl.lacerda

Esse não funcionou não. Nem com o definido como true.
A única solução que me veio em mente foi a de usar a passando a configuração desejada.

Acabei de postar no fórum da Oracle e descobri que o Oracle não tem este parâmetro statement_timeout. (O que vi era usado no PostgreSQL)
https://forums.oracle.com/forums/thread.jspa?messageID=10385566#10385566

O pessoal do fórum sugeriu criar um profile mas acho que não vai rolar…

Hebert_Coelho

Po, esse cara matou a pau:


It seems odd that you’d have an Java application where you can’t set a statement-level timeout. The JDBC API has such a timeout and, realistically, any Java application is using JDBC eventually to communicate with the database. That being said, if your application has the potential to issue particularly long-running queries, setting a JDBC timeout may do more harm than good if it means that you are potentially allowing users to issue lots of long-running queries that aren’t actually killed in the database. The timeout may allow users to crush the database much more quickly by repeatedly submitting queries that will never return.

Setting a profile or using Resource Manager would need the involvement of the DBA. As I said earlier, they would also apply to all statements executed by a user or set of users.

Justin

Criado 8 de junho de 2012
Ultima resposta 8 de jun. de 2012
Respostas 5
Participantes 2