Puts constraints on the replacement policy of the buffer cache. Most commonly used approach. Assume that during recovery, you must do both backward and forward passes. At commit, force out log record only. Recovery Perform both passes.
Recovery is more complex.
Requires two real passes over the log. Need not force any data at commit. Need not constrain buffer manager to retain all dirty buffers in memory until commit time. Checkpoints Recovery requires reading the log one or more times. If we did nothing to prevent it, the log would become arbitrarily large and recovery time would increase the longer the application ran.