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

Bloqueio de tabela (leitura) exclusiva no Oracle 10g?


Se você quiser apenas impedir que qualquer outra sessão modifique os dados, você pode emitir
LOCK TABLE whatever
/

Isso impede que outras sessões atualizem os dados, mas não podemos impedir que outras pessoas os leiam.

Observe que no Oracle esse bloqueio de tabela raramente é necessário, pois o Oracle opera uma política de consistência de leitura. O que significa que se executarmos uma consulta que leva quinze minutos para executar, a última linha retornada será consistente com a primeira linha; em outras palavras, se o conjunto de resultados tivesse sido classificado na ordem inversa, ainda veríamos exatamente as mesmas linhas.

editar

Se você deseja implementar uma fila (sem realmente usar o funcionalidade integrada de enfileiramento avançado ) então SELECT ... FOR UPDATE é o caminho a seguir. Essa construção permite que uma sessão selecione e bloqueie uma ou mais linhas. Outras sessões podem atualizar as linhas desbloqueadas. No entanto, implementar uma fila genuína é bastante complicado, a menos que você esteja usando 11g. É apenas na versão mais recente que a Oracle tem suportado o SKIP LOCKED cláusula. Saiba mais .