  Database backups have traditionally been used as the primary mechanism to
recover from hardware and user errors. High availability solutions maintain
redundant copies of data that can be used to recover from most failures except
user or application errors. Database backups are neither space nor time
efficient for recovering from user errors which typically occur in the recent
past and affect a small portion of the database. Moreover periodic full backups
impact user workload and increase storage costs. In this paper we present a
scheme that can be used for both user and application error recovery starting
from the current state and rewinding the database back in time using the
transaction log. While we provide a consistent view of the entire database as
of a point in time in the past, the actual prior versions are produced only for
data that is accessed. We make the as of data accessible to arbitrary point in
time queries by integrating with the database snapshot feature in Microsoft SQL
Server.
