Abstract
A database transaction is usually required to have an "all-or-none" property, that
is, either all of its changes to the database are installed in the database or
none of them are. This property can be violated by a hardware or software failure
occurring in the middle of the execution of a transaction or even by a decision
to abort a transaction to avoid an inconsistent (non-serializable) schedule. In
such a situation, we must recover from the failure by restoring the database to
a state in which the failed transaction never executed. The idea of "recoverable
schedules" was defined in [H83]. In a recoverable schedule, a transaction does not
commit until there is no possibility that it will be rolled back. If the underlying
hardware or software is unreliable, this much not occure until all transactions
which have written values read by the transaction have themselves committed.