A computer-implemented method for providing a database view comprising transaction-consistent data reflecting the contents of a database at a specific point in time, wherein the database view contains information about contents of the database at a previous time, wherein said database comprises data files and a log file, wherein data files are divided in to blocks of storage called pages, said log file comprising active transactions and inactive transactions, wherein log records are identified with a log sequence number, said database view comprising difference storage for storing a prior version of data from said database and said database view comprising a page table, wherein said difference storage is stored in side files, wherein there is a side file corresponding to each data file in said database, wherein the corresponding side file contains a copy of all data from the corresponding data file which has been changed since the database view was created, wherein said side files are stored in sparse files, said method comprising: determining a split point on said log file corresponding to said point in time, wherein the split point is a log sequence number at which the database view and the database start diverging; finding each transaction on said log file prior to said split point which performs modifications on said database; storing each of said modifications in said difference storage; wherein said step of storing each of said modifications in said difference storage comprises allocating a region of memory in one of said sparse files, finding each active transaction on said log file prior to said split point; and undoing any corresponding modifications in said difference storage, wherein the granularity of the side file region is larger than the granularity of the pages stored from the database and where said page table comprises, for each page: first stored data indicating whether said page has been stored in said difference storage; and second stored data indicating whether said region has been allocated in said difference storage; wherein said page table comprises two in-memory bitmaps which hold two bits of information for each page in a side file, wherein the first bit indicates whether a page is definitely in the side file and the second bit indicates whether the region in which said page would be stored in the side file has been allocated, the method further comprising: accepting a request for data from said database view; consulting the page table, and reading the page from a side file if the first bit indicates that the page is definitely in the side file and the second bit indicates that the region in which said page would be stored in the side file has been allocated; and reading the page from the database if the first bit does not indicate that the page is definitely in the side file and the second bit indicates that the page is definitely not in the side file. determining a split point on said log file corresponding to said point in time, wherein the split point is a log sequence number at which the database view and the database start diverging; finding each transaction on said log file prior to said split point which performs modifications on said database; storing each of said modifications in said difference storage; wherein said step of storing each of said modifications in said difference storage comprises allocating a region of memory in one of said sparse files, finding each active transaction on said log file prior to said split point; and undoing any corresponding modifications in said difference storage, wherein the granularity of the side file region is larger than the granularity of the pages stored from the database and where said page table comprises, for each page: first stored data indicating whether said page has been stored in said difference storage; and second stored data indicating whether said region has been allocated in said difference storage; wherein said page table comprises two in-memory bitmaps which hold two bits of information for each page in a side file, wherein the first bit indicates whether a page is definitely in the side file and the second bit indicates whether the region in which said page would be stored in the side file has been allocated, the method further comprising: accepting a request for data from said database view; consulting the page table, and reading the page from a side file if the first bit indicates that the page is definitely in the side file and the second bit indicates that the region in which said page would be stored in the side file has been allocated; and reading the page from the database if the first bit does not indicate that the page is definitely in the side file and the second bit indicates that the page is definitely not in the side file. accepting a request for data from said database view; consulting the page table, and reading the page from a side file if the first bit indicates that the page is definitely in the side file and the second bit indicates that the region in which said page would be stored in the side file has been allocated; and reading the page from the database if the first bit does not indicate that the page is definitely in the side file and the second bit indicates that the page is definitely not in the side file.