Na operação normal de um banco de dados relacional, as transações que alteram dados podem incluir os comandos commit e rollback. O mecanismo usualmente utilizado nos gerenciadores de bancos de dados para evitar o dirty read, enquanto a transação não for encerrada, é conhecido como:
- A)Trigger;
Trigger não evita dirty read; ela serve para reagir a eventos no banco, não para controlar leitura concorrente.
- B)Shared lock;
Shared lock permite leitura compartilhada e, em regra, não é o mecanismo típico para impedir leitura de dado ainda não confirmado.
- C)Exclusive lock;
Correta: o exclusive lock bloqueia o acesso concorrente ao dado alterado até o encerramento da transação.
- D)Two-phase commit;
Two-phase commit coordena commit entre múltiplos participantes, não é o mecanismo de bloqueio para evitar dirty read.
- E)Three-phase commit.
Three-phase commit também trata de coordenação de commit distribuído, e não de controle de leitura concorrente.
Gabarito: C
Em banco de dados, a ideia de isolamento das transações existe para que uma não enxergue alterações ainda não confirmadas por outra. É exatamente isso que evita o chamado dirty read: ler dado “sujo”, ou seja, modificado por uma transação que ainda pode dar rollback. Enquanto a transação não termina, o SGBD costuma proteger os dados com bloqueios adequados. No caso da questão, o mecanismo usado para impedir que outra transação leia algo ainda não confirmado é o exclusive lock, também chamado de bloqueio exclusivo. Ele faz com que o recurso fique reservado para quem está alterando os dados, impedindo leituras indevidas e concorrência perigosa até o commit ou rollback. A lógica é simples: se você está mexendo no dado, ninguém lê esse dado no meio do caminho como se já fosse definitivo. Se outra transação pudesse ler antes do encerramento, ela correria o risco de trabalhar com um valor que depois desaparece com o rollback. Aí nasce o dirty read, e o banco tenta evitar essa confusão com bloqueios de exclusão. Por isso o gabarito é a letra C. Em teoria de SGBD, esse é o comportamento clássico de controle de concorrência por locks: o exclusive lock protege a escrita e impede leitura prematura do dado não confirmado.