GF.Restore

Restore is a Storage facility that can take a previously created backup of (a specified set of) data, and then restore it to a specified location (either the location from where the backup was created, or an alternative location). This primarily enables users of this function to rescue data after an incident or emergency has occurred: data can be restored when the original data is lost, corrupted or (un)intentionally changed. This function is functionally coupled with (an instance of) Backup, which takes care of the necessary backing up of the data. Furthermore, it's usually paired with an instance of Retention Engine because restore can make convenient use of the intelligence that the Retention Engine offers to retrieve the data from the backup media, and to perform the actual restore of the data.

Restore can restore data at any one of several of the lower levels of data abstraction, but usually handles only a single abstraction level. Examples are
 * at the "unstructured data" level, restoring sets of elementary data elements, such as the bits and bytes in a storage system;
 * at the "loosely structured data" level, restoring coherent chunks of data like files or documents;
 * at the "strictly structured data" level, restoring (parts of) databases.

When creating an Applied Function of this type, the next items are points of consideration:
 * Is the data being restored over another set of data? If so, are there special permissions needed?
 * Should access to the raw bits/files/database be blocked for other users than the Restore facility during the restore action?
 * What actions are necessary should a restore procedure abort?
 * Is there interrelation between (sets of) data that need to be maintained, e.g. by restoring interrelated data in a single restore action?
 * What level is needed for monitoring of the success or failure of any restore action, and of available restore capacity?
 * How often are restore tests needed?
 * How can clients request/execute restore actions on selected sets of data?