Estou tentando entender o Oracle 11g um pouco mais de perto. Minha pergunta é simples: como o Oracle lida com duas sessões que estão tentando inserir registros em uma única tabela ao mesmo tempo.
Por exemplo, INSERT A é executado às 13:00 contra a Tabela 1. Demorará 5 minutos para ser concluído. INSERT B é executado às 13h02 contra a Tabela 1. Demorará 1 minuto para concluir.
O que vai acontecer? O Oracle enfileirará o INSERT B para ser executado após a conclusão do INSERT A? O INSERT B será executado simultaneamente com o INSERT A?
Obrigado!
insert into foo(id) select level from dual connect by level<1000000
(aumentando o número de zeros um de cada vez até que seja suficiente lenta)Respostas:
As inserções não se afetam, a menos que entrem em conflito com restrições de chave primárias ou únicas. Eles devem ser independentes. Acredito que esse problema de simultaneidade seja um dos motivos pelos quais a sequência do Oracle é um objeto separado (geração PK em cache e substituta separada da inserção).
A esse respeito, eles operam na tabela não confirmada, como é visto em sua sessão. Esse comportamento é descrito na postagem do stackoverflow abaixo.
/programming/3194999/dml-by-multiple-users-commit-scenarios-in-oracle
fonte
Talvez seja útil dar uma olhada no Oracle Transaction Management (Concepts) ou no SQL Processing for Application Developers (Guia avançado do desenvolvedor de aplicativos)
Você pode investigar o comportamento do oracle abrindo uma sessão com sqlplus, configurando a confirmação automática executando
desativar o comprometimento automático
e executando uma inserção
inserir na tabelaA (...) valores (...);
Deixe essa sessão aberta e inicie uma sessão do sqlplus a partir de outra janela, defina a confirmação automática como desativada e emita outra inserção. Ambas as transações estarão ativas até você fechá-las com confirmação (ou reversão).
Na maioria das situações, não é realmente necessário desativar a confirmação automática, porque esse é o padrão para o sqlplkus se você não tiver alterado isso.
fonte