Leitura disponível, escrita bloqueada
Uma aplicação consulta normalmente uma operação, mas o worker que a quer atualizar fica retido. Essa combinação é compatível com um bloqueio de linha por outra transação. No laboratório, A alterou a linha 1 sem confirmar. B conseguiu ler o valor antigo; SELECT FOR UPDATE NOWAIT sobre a mesma linha devolveu ORA-00054, acompanhado de ORA-40097 nesta versão. O diagnóstico secundário foi conservado nos logs, sem inventar semântica a partir de documentação não consultada. Regista a instrução que falhou, a sessão detentora identificada pelas ferramentas autorizadas e o âmbito funcional. A leitura que responde não prova que o caminho de escrita esteja disponível; a escrita que espera também não prova indisponibilidade total da base.
Escolher uma política de espera adequada ao trabalho
NOWAIT permite ao chamador receber o conflito sem esperar pela libertação do bloqueio pedido. WAIT pode dar ao detentor tempo para terminar; a aplicação continua a precisar de gerir a falha quando esse limite não resolve o conflito. SKIP LOCKED é útil quando consumidores podem tratar outros trabalhos elegíveis, mas muda o conjunto devolvido. No exercício com três linhas, B obteve apenas os identificadores 2 e 3 enquanto A mantinha 1 bloqueado. Uma consulta normal contou as três. Para um fecho que exige todas as operações, não substituas uma seleção completa por SKIP LOCKED apenas para eliminar um alerta. Define como serão revisitados trabalhos omitidos, que métricas mostram o backlog e quem decide o atraso aceitável.
O que permanece depois de ROLLBACK TO
Na segunda parte, A alterou a linha 1 para 160, criou um savepoint e alterou a linha 2 para 245. O rollback ao savepoint conservou 160 e repôs 225 na linha 2. B iniciou então um novo pedido de bloqueio sobre 2 e conseguiu obtê-lo; o novo pedido sobre 1 continuou a falhar. Só depois do commit de A o total confirmado chegou a 685. Não se tratou de uma reversão completa. A documentação distingue novos pedidos de transações que já estavam à espera quando ocorreu o rollback parcial: estas podem continuar à espera da conclusão da transação. O laboratório confirmou novos pedidos, não mediu o comportamento de waiters previamente suspensos.
Coordenar a resposta APS sem perder o contexto
Num incidente fictício de processamento noturno, a equipa de aplicações conhece o lote e a equipa de base de dados identifica o bloqueio. Liga as duas informações antes de decidir terminar uma sessão. Determina se a transação está a progredir, qual o prazo do fecho, que operações seriam revertidas e como a aplicação retomaria o trabalho. Uma ação administrativa pode exigir rollback e reconciliação; não assumes libertação instantânea ou ausência de impacto. Comunica o impacto em linguagem funcional: operações pendentes, janela restante, risco de repetição e próximo ponto de decisão. Se houver política autorizada de repetição, usa limites e monitoriza o resultado, evitando tentativas concorrentes que apenas aumentam a pressão sobre a mesma linha.
Aceitação e limites de uma demonstração concorrente
As duas execuções passaram 28 verificações cada, com duas sessões SQLPlus e um utilizador sintético por execução. Os esquemas, o contentor e a rede temporária foram removidos; o código e os logs saneados ficaram disponíveis para revisão. Esta evidência apoia as distinções ensinadas, mas não mede capacidade, fairness dos consumidores ou o tempo de recuperação de um incidente. A semântica de SKIP LOCKED também não permite prometer ausência de qualquer espera: um bloqueio exclusivo de tabela é uma limitação documentada. Para aceitar um worker real, acrescenta ensaios de concorrência, repetição, ordenação, recuperação e reconciliação que correspondam ao contrato funcional. Regista separadamente o que foi observado, o que vem da documentação e o que ainda é uma hipótese operacional.
-- Synthetic session B while A holds row 1.
SELECT id FROM jobs WHERE id=1 FOR UPDATE NOWAIT;
SELECT id FROM jobs ORDER BY id FOR UPDATE SKIP LOCKED;
ROLLBACK;
-- Compare with an ordinary read, not a locking read.
SELECT COUNT(*) FROM jobs;Após rollback ao savepoint, B adquire a linha 2 num novo pedido, mas continua sem conseguir adquirir a linha 1.
Armadilhas comuns
Resultado vazio como fila vazia; rollback parcial como fim da transação; retries sem limite; teste sintético como prova de capacidade.
Tópicos relacionados: Diagnóstico de desempenho · Recuperação e reconciliação · Deployments e aceitação operacional
Relaciona cada bloqueio com a transação e cada mitigação com o trabalho que pode ser omitido ou repetido.
Referência: SELECT · 1Z0-183 public objectives inspected 2026-09-30; revision date not published