Questão de Banco de Dados — Recuperação de Dados em SGBDs — FGV 2024
- Código
- fg165246
- Banca
- FGV
- Órgão
- TJ MS
- Ano
- 2024
- Cargo
- Tec NS ( )
- AUNDO/REDO;
- BUNDO/NO-REDO;
- CNO-UNDO/REDO;
- DROLLBACK/COMMIT;
- ECOMMIT/ROLLBACK.
GabaritoA — UNDO/REDO;
Gabarito: letra A. No contexto de atualização imediata, o banco de dados pode ser atualizado por algumas operações de uma transação antes que ela alcance seu ponto de confirmação. Dessa forma, durante a recuperação, é necessário desfazer as operações não confirmadas (UNDO) e refazer as operações confirmadas (REDO) para manter a integridade dos dados. O algoritmo que atende a esse cenário é o UNDO/REDO, conforme a teoria clássica de recuperação de banco de dados (Elmasri & Navathe).
A recuperação de um banco de dados após uma falha é um dos pilares da durabilidade (propriedade ACID). Quando uma transação é executada, suas operações de escrita podem ser aplicadas ao banco de dados de duas formas principais: atualização adiada (deferred update) ou atualização imediata (immediate update). Na atualização adiada, as alterações só são gravadas no disco após a transação atingir o ponto de confirmação (COMMIT). Já na atualização imediata, as alterações podem ser gravadas no disco antes do COMMIT, o que exige um mecanismo de recuperação mais robusto.
O algoritmo de recuperação é classificado com base em duas operações fundamentais: UNDO (desfazer) e REDO (refazer). O UNDO reverte as operações de transações que não foram confirmadas, restaurando o estado anterior. O REDO reaplica as operações de transações confirmadas, garantindo que seus efeitos persistam. A combinação dessas operações define quatro algoritmos clássicos:
Algoritmo | Atualização | UNDO | REDO | Uso |
|---|---|---|---|---|
UNDO/REDO | Imediata | Necessário | Necessário | Mais comum na prática |
UNDO/NO-REDO | Imediata (com gravação antes do COMMIT) | Necessário | Não necessário | Variação do anterior |
NO-UNDO/REDO | Adiada | Não necessário | Necessário | Atualização adiada |
NO-UNDO/NO-REDO | Adiada (com gravação antes do COMMIT) | Não necessário | Não necessário | Caso ideal, mas raro |
No contexto da questão, a atualização imediata permite que o banco seja atualizado antes do COMMIT. Se uma transação falhar após gravar algumas mudanças, mas antes de confirmar, o efeito dessas operações precisa ser desfeito (UNDO). Por outro lado, se uma transação confirmou, mas suas alterações ainda não foram persistidas no disco, é necessário refazê-las (REDO). Portanto, o algoritmo UNDO/REDO é o que se aplica.
A pegadinha da banca está em confundir os algoritmos de recuperação com os comandos de transação (COMMIT/ROLLBACK) ou com variações que não se aplicam ao cenário descrito. O candidato deve identificar que a atualização imediata exige tanto UNDO quanto REDO, pois transações não confirmadas precisam ser desfeitas e transações confirmadas precisam ser refeitas.
O algoritmo UNDO/REDO é o correto. Na atualização imediata, o banco pode ser atualizado antes do COMMIT. Se uma transação falhar antes de confirmar, suas operações precisam ser desfeitas (UNDO). Se uma transação confirmou, mas suas alterações não foram persistidas no disco, elas precisam ser refeitas (REDO). Portanto, ambos os procedimentos são necessários durante a recuperação.
O algoritmo UNDO/NO-REDO é uma variação da atualização imediata em que todas as atualizações precisam ser registradas no banco de dados em disco antes que a transação confirme. Nesse caso, apenas o UNDO é necessário, pois, se a transação confirmou, suas alterações já estão no disco. No cenário da questão, não há essa garantia, então o REDO também é necessário.
O algoritmo NO-UNDO/REDO é característico da atualização adiada, em que as alterações só são gravadas no disco após o COMMIT. Nesse caso, o UNDO não é necessário, pois transações não confirmadas não alteraram o banco. No cenário da questão, a atualização é imediata, então o UNDO é necessário.
ROLLBACK/COMMIT não é um algoritmo de recuperação, mas sim os comandos que finalizam uma transação. O ROLLBACK desfaz a transação e o COMMIT a confirma. Eles são usados no contexto de controle de transações, não na definição de algoritmos de recuperação.
COMMIT/ROLLBACK é a ordem inversa dos comandos de finalização de transação. Assim como a alternativa D, não se trata de um algoritmo de recuperação, mas de comandos de controle de transação. A ordem correta dos comandos é ROLLBACK (desfazer) e COMMIT (confirmar), não o contrário.
A banca explora a confusão entre algoritmos de recuperação e comandos de transação. O candidato pode marcar ROLLBACK/COMMIT por associar à ideia de desfazer e confirmar, mas esses são comandos, não algoritmos. O algoritmo UNDO/REDO é o que define o procedimento de recuperação, enquanto ROLLBACK/COMMIT são as operações que o SGBD executa.
Para identificar o algoritmo de recuperação, verifique o tipo de atualização (adiada ou imediata) e se as alterações são gravadas no disco antes ou depois do COMMIT. Se a atualização é imediata e não há garantia de gravação antes do COMMIT, o algoritmo é UNDO/REDO. Se a atualização é adiada, o algoritmo é NO-UNDO/REDO.
Gabarito: letra A
Link permanente: /questoes/fg165246