Na operação normal de um banco de dados relacional, as tran...
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:
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: C - Exclusive lock.
A questão aborda o conceito de controle de concorrência em bancos de dados relacionais, que é um aspecto fundamental para manter a integridade e a consistência dos dados. Quando ocorre uma transação, que é uma sequência de operações que devem ser tratadas como uma única unidade lógica de trabalho, medidas de controle são necessárias para garantir que as operações não interfiram umas nas outras de maneira prejudicial.
O termo "dirty read" refere-se a uma situação onde uma transação pode ler dados que foram modificados por outra transação ainda não confirmada (ou seja, que ainda não realizou um commit). Para prevenir isso, sistemas de gerenciamento de banco de dados (SGBDs) como o Oracle usam mecanismos de travamento (locks).
O exclusive lock é um tipo de travamento que previne o dirty read ao bloquear o acesso a um item de dados para qualquer outra transação enquanto a transação que detém o bloqueio não for concluída. Em outras palavras, quando uma transação obtém um exclusive lock em um item, nenhuma outra transação pode ler ou modificar esse item até que o bloqueio seja liberado, o que acontece quando a transação é efetivada (commit) ou desfeita (rollback).
Portanto, a alternativa C é a correta porque o exclusive lock é o mecanismo utilizado para assegurar que dados em transação não sejam lidos ou alterados por outras transações, evitando assim o problema de dirty read.
As outras opções apresentadas não são mecanismos diretamente relacionados à prevenção de dirty read:
- Trigger é um procedimento armazenado que é automaticamente executado em resposta a determinados eventos em uma tabela ou visão.
- Shared lock permite a leitura de um dado por múltiplas transações, mas não sua alteração enquanto o bloqueio persistir.
- Two-phase commit é um protocolo que garante a completação de transações distribuídas de maneira atômica em sistemas distribuídos.
- Three-phase commit é uma melhoria do protocolo de two-phase commit que busca reduzir os cenários de bloqueio quando há falhas.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
GABARITO: C
Leitura suja ( DIRTY READE)
- ocorre quando uma transação lê dados que foram modificados por outra transação, mas ainda não foram confirmados. Em outras palavras, uma transação lê dados não confirmados de outra transação, o que pode levar a resultados incorretos ou inconsistentes.
Shared Lock
- também é chamado de bloqueio de leitura, usado apenas para leitura de itens de dados.
- garante que um registro não esteja em processo de atualização durante uma solicitação somente leitura.
exemplo: considere um caso em que inicialmente A = 100 e há duas transações que estão lendo A. Se uma das transações quiser atualizar A, nesse caso a outra transação estaria lendo o valor errado. No entanto, o bloqueio compartilhado impede que ele seja atualizado até terminar a leitura.
Exclusive Lock
- Quando uma instrução modifica dados, sua transação mantém um bloqueio exclusivo nos dados que impede que outras transações acessem os dados.
- Esse bloqueio permanece em vigor até que a transação que contém o bloqueio emita um commit ou rollback.
exemplo: considere um caso em que inicialmente A=100 quando uma transação precisa deduzir 50 de A. Podemos permitir esta transação colocando X lock nela. Portanto, quando qualquer outra transação deseja ler ou escrever, o bloqueio exclusivo impede isso.
Adendo:
No contexto de gerenciadores de bancos de dados, o comando begin transaction inicia uma transação. O objetivo principal de uma transação é garantir a atomicidade e a integridade das operações.
O comando commit é usado para confirmar todas as operações dentro de uma transação, ou seja, para tornar as alterações permanentes no banco de dados.
O comando rollback é usado para desfazer todas as operações dentro de uma transação, retornando o banco de dados ao estado anterior à transação.
A resposta correta para evitar o dirty read em um banco de dados relacional é a alternativa C) Exclusive lock.
Explicação detalhada:
- Dirty read: Ocorre quando uma transação lê dados que foram modificados por outra transação ainda não finalizada (sem commit). Isso pode levar a inconsistências nos dados, pois a transação leitora pode acessar informações incorretas.
- Exclusive lock: Um mecanismo de bloqueio que impede outras transações de acessar e modificar os mesmos dados enquanto uma transação está em andamento. Isso garante que a transação em execução tenha acesso exclusivo aos dados e evita a ocorrência de dirty read.
Funcionamento do exclusive lock:
- Início da transação: Ao iniciar uma transação que modifica dados, um exclusive lock é adquirido nos registros envolvidos.
- Proteção contra dirty read: Enquanto o lock estiver ativo, outras transações não podem ler os dados bloqueados, impedindo a leitura de dados não confirmados (dirty read).
- Commit ou rollback: Ao finalizar a transação, o exclusive lock é liberado. Se o commit for bem-sucedido, as alterações nos dados se tornam permanentes. Se o rollback for necessário, as alterações são descartadas e os dados retornam ao estado anterior.
Vantagens do exclusive lock:
- Elimina dirty read: Garante a consistência dos dados ao impedir que transações leiam dados modificados por outras transações não finalizadas.
- Evita inconsistências: Previne que diferentes transações leiam versões conflitantes dos mesmos dados.
- Simplifica o gerenciamento de transações: Reduz a complexidade do controle de concorrência, pois cada transação tem acesso exclusivo aos dados que está modificando.
Considerações importantes:
- Impacto no desempenho: O uso extensivo de exclusive locks pode afetar o desempenho do banco de dados, pois bloqueia recursos e impede outras transações de acessar os dados.
- Análise de necessidades: A utilização de exclusive locks deve ser ponderada de acordo com o padrão de acesso aos dados e as características das transações no sistema.
- Alternativas: Em alguns casos, outros mecanismos de bloqueio, como shared locks, podem ser mais adequados para otimizar o desempenho e a concorrência no banco de dados.
Resumo:
O exclusive lock se destaca como um mecanismo eficaz para prevenir o dirty read em bancos de dados relacionais, garantindo a consistência e integridade dos dados durante as transações. A escolha adequada do tipo de bloqueio e sua utilização consciente contribuem para a performance e escalabilidade dos sistemas de gerenciamento de dados.
2-phase cmmit ajuda mas nao é definitivvo para dirty reads. Exclusive lock bloqueia a transação ate o commit.
Upon using SELECT ... FOR UPDATE, This allows the query to lock the rows it selects, preventing other transactions from reading or modifying them until the transaction commits or rolls back. This avoids dirty reads but can introduce performance bottlenecks.
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo