Questão de Banco de Dados — Transações (Locks, ACID, etc.) — FGV 2024
- Código
- fg165217
- Banca
- FGV
- Órgão
- TJ AP
- Ano
- 2024
- Cargo
- AJ ( )
- Anovo;
- Bantigo;
- Cantigo e novo;
- Dwrite-ahead;
- Eundo/redo.
GabaritoB — antigo;
Gabarito: letra B. Para executar o rollback em cascata, o mecanismo de recuperação precisa das entradas de log do valor antigo (before-image) dos dados. Isso porque, ao desfazer uma transação que falhou, o sistema deve restaurar o estado anterior à sua execução, e apenas o valor antigo permite essa restauração — o valor novo (after-image) é usado no redo (refazer), não no undo (desfazer).
O log de transações é o registro cronológico das operações realizadas sobre o banco de dados, essencial para a recuperação após falhas. Cada entrada de log pode conter o valor antigo (before-image) e/ou o valor novo (after-image) de um item de dados modificado. A escolha de quais valores registrar depende da estratégia de recuperação adotada pelo SGBD.
No rollback em cascata, uma transação T2 que leu dados de uma transação T1 (que ainda não foi confirmada) precisa ser desfeita quando T1 é abortada. Para desfazer T2, o sistema precisa restaurar os valores que T2 modificou ao estado anterior à sua execução — ou seja, precisa do valor antigo de cada item que T2 alterou. Sem o before-image, não há como reverter as alterações de T2, pois o valor novo já foi gravado e não indica qual era o estado original.
A distinção fundamental é:
Operação | Valor necessário no log | Finalidade |
|---|---|---|
Undo (rollback) | Valor antigo (before-image) | Restaurar o estado anterior à transação |
Redo (replay) | Valor novo (after-image) | Reaplicar as alterações de uma transação confirmada |
A pegadinha da banca está em confundir o valor necessário para o undo (antigo) com o valor necessário para o redo (novo). O candidato que memoriza apenas "log contém before e after" pode marcar a alternativa C, mas a questão pergunta especificamente sobre o rollback em cascata, que é uma operação de undo — e para undo, apenas o valor antigo é suficiente.
A banca explora a confusão entre undo e redo. No rollback (undo), o que importa é o valor antigo; o valor novo é usado no redo, para reaplicar transações confirmadas. Se a questão pedisse "refazer" ou "replay", a resposta seria o valor novo. Aqui, como é "desfazer", o gabarito é o valor antigo.
O valor novo (after-image) é usado no redo (refazer), não no undo. No rollback, precisamos restaurar o estado anterior, e o valor novo não informa qual era esse estado — ele apenas indica o valor que foi gravado após a modificação.
O rollback em cascata exige o valor antigo (before-image) de cada item modificado pela transação a ser desfeita. Com o before-image, o sistema restaura o estado anterior à transação, desfazendo seus efeitos. É exatamente o que a atomicidade exige: se a transação falhou, o banco deve voltar ao estado consistente anterior.
Embora o log possa conter tanto o valor antigo quanto o novo (para suportar undo e redo), o rollback em cascata especificamente só precisa do valor antigo. A alternativa C generaliza o conteúdo do log, mas não responde à pergunta sobre o que é necessário para o undo.
Write-ahead é uma técnica de log (write-ahead logging — WAL) que garante que o log seja gravado em disco antes dos dados serem modificados. Não é um valor de log, mas uma política de gravação. A questão pergunta sobre os valores necessários para o rollback, não sobre a técnica de gravação.
Undo/redo é uma estratégia de recuperação que usa tanto o valor antigo quanto o novo para desfazer e refazer operações. Mas, novamente, para o rollback em cascata (uma operação de undo), apenas o valor antigo é necessário. A alternativa E descreve a estratégia completa, não o requisito específico do undo.
Gabarito: letra B — para o rollback em cascata, o log deve conter o valor antigo (before-image) dos dados modificados.
Link permanente: /questoes/fg165217