Questão de Banco de Dados — Concorrência em Banco de Dados — FUNDATEC 2025
Banco de Dados›Concorrência em Banco de Dados
Código
qg468577
Banca
FUNDATEC
Órgão
BRDE
Ano
2025
Nível
Superior
Cargo
Analista de Sistemas - Subárea Administração de Banco de Dados
Em um sistema de reservas de passagens aéreas, dois agentes tentam simultaneamente reservar o último assento disponível no mesmo voo para clientes diferentes. Sem o controle adequado, isso resultaria em uma “venda dupla”. Qual mecanismo de controle de concorrência, gerenciado pelo SGBD, previne esse cenário ao garantir que apenas a primeira transação confirmada possa efetivar a reserva?
ADeadlock Detection.
BLog Sequence Number.
CSnapshot Isolation.
DDynamic Cursor.
ETwo-Phase Locking.
Revelar gabarito e comentário▾
GabaritoE — Two-Phase Locking.
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Concorrência em Banco de Dados – Two-Phase Locking
Gabarito: letra E. O Two-Phase Locking (2PL) é um protocolo de controle de concorrência que utiliza bloqueios (locks) para garantir a serialização de transações concorrentes. No cenário de dupla reserva, o 2PL impede que duas transações adquiram simultaneamente o bloqueio sobre o mesmo registro (o último assento), assegurando que apenas a primeira transação que confirmar (commit) efetive a alteração e a segunda seja bloqueada ou abortada. Esse é um mecanismo clássico e gerenciado pelo SGBD para evitar problemas como lost update e venda dupla.
A banca testa o conhecimento sobre os diferentes mecanismos de controle de concorrência e sua finalidade específica. Vejamos cada alternativa:
Mecanismo de Controle de Concorrência
Função Principal
Relação com o Cenário de Venda Dupla
Correto?
Two-Phase Locking (2PL)
Usa bloqueios (locks) para garantir serialização de transações concorrentes.
Impede que duas transações adquiram simultaneamente o bloqueio sobre o mesmo registro, assegurando que apenas a primeira confirmada efetive a alteração.
✅ Sim
Deadlock Detection
Identifica situações em que transações ficam bloqueadas esperando umas pelas outras (deadlock).
Atua após a ocorrência de deadlock, não previne diretamente conflitos de atualização concorrente como a venda dupla.
❌ Não
Log Sequence Number (LSN)
Número sequencial para registros de log, usado em recuperação de falhas (redo/undo) e replicação.
Não tem relação com controle de concorrência para evitar dupla reserva.
❌ Não
Snapshot Isolation
Fornece uma “fotografia” do banco no início da transação; evita alguns conflitos, mas não usa bloqueios exclusivos primariamente.
Duas transações podem ler o mesmo dado e, ao tentar atualizar, uma é abortada, mas não é o mecanismo mais direto e clássico para o cenário.
❌ Não
Dynamic Cursor
Recurso para navegação em resultados de consultas, permitindo percorrer e atualizar linhas.
Não é um mecanismo de controle de concorrência para evitar venda dupla.
❌ Não
Alternativa A – ❌ Incorreta
Deadlock Detection é um mecanismo para identificar situações em que duas ou mais transações ficam bloqueadas esperando uma pela outra (deadlock). Ele não previne a venda dupla; na verdade, ele atua após a ocorrência de um deadlock, que pode ser consequência de bloqueios mal gerenciados, mas não é a causa nem a solução direta para conflitos de atualização concorrente.
Alternativa B – ❌ Incorreta
Log Sequence Number (LSN) é um número sequencial associado a registros de log, utilizado para recuperação de falhas (redo/undo) e replicação. Não tem relação com o controle de concorrência para evitar a dupla reserva.
Alternativa C – ❌ Incorreta
Snapshot Isolation é um nível de isolamento que fornece a cada transação uma “fotografia” (snapshot) do banco no momento do início. Embora evite alguns tipos de conflitos, ele não impede a dupla reserva da mesma forma que o bloqueio exclusivo do 2PL. Em snapshot isolation, duas transações podem ler o mesmo dado e, ao tentar atualizar, uma delas é abortada (se houver conflito), mas o mecanismo não é primariamente baseado em locks e o SGBD precisa de técnicas adicionais (como a detecção de conflitos de atualização). O 2PL com bloqueios exclusivos é a abordagem mais direta e clássica.
Alternativa D – ❌ Incorreta
Dynamic Cursor é um recurso para navegação em resultados de consultas, permitindo percorrer linhas e até mesmo atualizá-las de forma dinâmica. Não é um mecanismo de controle de concorrência e não previne vendas duplas.
Alternativa E – ✅ Correta ⟵ GABARITO
O Two-Phase Locking (2PL) é o protocolo padrão de controle de concorrência utilizado pelos SGBDs. Ele opera em duas fases: na fase de expansão, a transação adquire bloqueios sobre os dados que precisa; na fase de contração, ela libera os bloqueios. A versão mais comum é o strict 2PL, em que os bloqueios de escrita (exclusivos) são mantidos até o commit, impedindo que outra transação leia ou escreva o mesmo recurso até que a primeira confirme. Isso evita exatamente o cenário de venda dupla: a primeira transação que obtém o lock sobre o último assento prossegue; a segunda fica bloqueada até que a primeira termine, e ao tentar ler novamente, verá que o assento já não está mais disponível.
PEGA ESSA DICA!
Para identificar o mecanismo certo em questões de concorrência, foque no termo "bloqueio" (lock). O Two-Phase Locking é o único entre as opções que se baseia exclusivamente em locks para garantir a serialização. Snapshot Isolation usa versões, Deadlock Detection é reativo, LSN é para log, e Cursor é para navegação.