Pular para o conteúdo principal

Questão de Banco de Dados — Concorrência em Banco de Dados — FUNDATEC 2025

Banco de DadosConcorrê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?
  1. ADeadlock Detection.
  2. BLog Sequence Number.
  3. CSnapshot Isolation.
  4. DDynamic Cursor.
  5. 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.

Gabarito: letra E.

Link permanente: /questoes/qg468577