O comando falha, ou o usuário pede rollback. Resolvido no M6.
A máquina cai. A memória some, o disco fica. É o M7.
kill -9
O disco morre. Só backup e replicação resolvem.
fora do escopo
Escreva no log, e force o log para o disco, antes de escrever a página de dados. Em inglês, write-ahead logging.
COMMITRefazer precisa ser idempotente: aplicar duas vezes tem que dar o mesmo resultado que aplicar uma.
Não seria mais rápido refazer só o necessário?
Um SELECT com WHERE, dentro de uma transação, e o banco volta consistente depois do kill -9 no meio do commit.
kill vier antes do fsync do commit: a transação não aconteceuPróxima: laboratório do M7, e o kill -9. Antes disso, o exercício de hoje
<T1, INICIO> <T1, conta, pagina 3, slot 7, antes=100, depois=250> <T2, INICIO> <T2, conta, pagina 3, slot 2, antes=500, depois=350> <T1, COMMIT> <T2, conta, pagina 9, slot 1, antes=0, depois=80>
O item 4 é a idempotência do refazer. É a propriedade que permite ler o log inteiro na partida sem precisar de checkpoint.