Потому что грязная страница незафиксированной транзакции могла уже быть сброшена на диск до сбоя. Повторное выполнение всего сначала гарантирует, что страницы достигнут известного согласованного состояния, а затем отмена выборочно откатывает незафиксированные части — пропуск повторного выполнения может привести к тому, что страницы останутся в противоречивом сочетании данных до и после изменения.
Пример
BEGIN;
INSERT INTO orders (id, customer_id) VALUES (1, 42);
SAVEPOINT before_risky_step;
UPDATE inventory SET stock = stock -1WHERE product_id =999; -- fails: constraint violationROLLBACKTOSAVEPOINT before_risky_step; -- undoes only the failed stepCOMMIT; -- the order insert is still committed
Итог
Потому что грязная страница незафиксированной транзакции могла уже быть сброшена на диск до сбоя.
Почему восстановление сначала повторяет все, включая незафиксирован… · Sobeso