A computer-implemented method: receiving, at a secondary storage server of a database server (100, 102), an eviction notification indicating that a first set of data blocks has been evicted from a particular cache, wherein each data block of the first set of data blocks is clean, the secondary storage server persistently storing a copy of data, which is persistently stored on a primary storage server and includes a first copy of the first set of data blocks; wherein the secondary storage server comprises a memory hierarchy including a secondary cache and a secondary persistent storage that stores a second copy of the first set of data blocks; wherein, before an interruption event, read storage requests from the database server (100, 102) are directed to the primary storage server while write storage requests from the database server (100, 102) are directed to both the primary storage server and the secondary storage server so that data stored on the secondary storage server is kept up-to-date, wherein the interruption event affects the ability of the primary storage server to service storage requests of the database server (100, 102), and wherein, after the interruption event, servicing of those storage requests that cannot be any longer serviced by the primary storage server is taken over by the secondary storage server; upon receiving the eviction notification: retrieving the second copy of the first set of data blocks from the secondary persistent storage of the secondary storage server, and loading, into the secondary cache, the second copy of the first set of data blocks; after the interruption event, receiving, at the secondary storage server, a first request for at least a subset of the first set of data blocks based on a request for data, at the database server (100, 102), that includes at least the subset of the first set of data blocks; upon receiving the first request for at least the subset of the first set of data blocks: retrieving at least the subset of the first set of data blocks from the second copy of the first set of data blocks stored on the secondary cache of the secondary storage server without retrieving any data block of at least the subset of the first set of data blocks from the second copy of the first set of data blocks stored on the secondary persistent storage of the secondary storage server, and sending at least the subset of the first set of data blocks to the database server (100, 102). receiving, at a secondary storage server of a database server (100, 102), an eviction notification indicating that a first set of data blocks has been evicted from a particular cache, wherein each data block of the first set of data blocks is clean, the secondary storage server persistently storing a copy of data, which is persistently stored on a primary storage server and includes a first copy of the first set of data blocks; wherein the secondary storage server comprises a memory hierarchy including a secondary cache and a secondary persistent storage that stores a second copy of the first set of data blocks; wherein, before an interruption event, read storage requests from the database server (100, 102) are directed to the primary storage server while write storage requests from the database server (100, 102) are directed to both the primary storage server and the secondary storage server so that data stored on the secondary storage server is kept up-to-date, wherein the interruption event affects the ability of the primary storage server to service storage requests of the database server (100, 102), and wherein, after the interruption event, servicing of those storage requests that cannot be any longer serviced by the primary storage server is taken over by the secondary storage server; upon receiving the eviction notification: retrieving the second copy of the first set of data blocks from the secondary persistent storage of the secondary storage server, and loading, into the secondary cache, the second copy of the first set of data blocks; retrieving the second copy of the first set of data blocks from the secondary persistent storage of the secondary storage server, and loading, into the secondary cache, the second copy of the first set of data blocks; after the interruption event, receiving, at the secondary storage server, a first request for at least a subset of the first set of data blocks based on a request for data, at the database server (100, 102), that includes at least the subset of the first set of data blocks; upon receiving the first request for at least the subset of the first set of data blocks: retrieving at least the subset of the first set of data blocks from the second copy of the first set of data blocks stored on the secondary cache of the secondary storage server without retrieving any data block of at least the subset of the first set of data blocks from the second copy of the first set of data blocks stored on the secondary persistent storage of the secondary storage server, and sending at least the subset of the first set of data blocks to the database server (100, 102). retrieving at least the subset of the first set of data blocks from the second copy of the first set of data blocks stored on the secondary cache of the secondary storage server without retrieving any data block of at least the subset of the first set of data blocks from the second copy of the first set of data blocks stored on the secondary persistent storage of the secondary storage server, and sending at least the subset of the first set of data blocks to the database server (100, 102).