Restore
Being able to restore data is, naturally, an inseparable part of backing it up.
You can restore backed up databases using the Studio, or client API methods.
Restoring a Database
Configuration and Execution
-
To restore your database, configure a
RestoreBackupConfiguration
instance and pass it toRestoreBackupOperation
for execution. -
RestoreBackupOperation
public RestoreBackupOperation(RestoreBackupConfiguration restoreConfiguration)
-
RestoreBackupConfiguration
public class RestoreBackupConfiguration { public string DatabaseName { get; set; } public string BackupLocation { get; set; } public string LastFileNameToRestore { get; set; } public string DataDirectory { get; set; } public string EncryptionKey { get; set; } public bool DisableOngoingTasks { get; set; } }
- Parameters:
Parameter Value Functionality DatabaseName string Name for the new database. BackupLocation string Backup file local path.
Backup source path has to be local for the restoration to continue.LastFileNameToRestore
(Optional -
omit for default)string Last backup file to restore.
Default behavior: Restore all backup files in the folder.DataDirectory
(Optional -
omit for default)string Database data directory.
Default folder: Under the "Databases" folder, in a folder that carries the restored database's name.EncryptionKey
(Optional -
omit for default)string A key for an encrypted database.
Default behavior: Try to restore as if DB is unencrypted.DisableOngoingTasks
(Optional -
omit for default)boolean true
to disable ongoing tasks after restoring,
false
to enable tasks after restoring.
Default:false
(tasks DO run when backup is restored)
Make sure your server has permissions to read from BackupLocation
and write to DataDirectory
.
Verify that RavenDB has full access to the backup-files and database folders.
Restore Database to a Single Node
-
Configuration
- Set
DatabaseName
with the new database name. - Set
BackupLocation
with a local path for the backup files.
- Set
-
Execution
- Pass
RestoreBackupOperation
the configuredRestoreBackupConfiguration
. - Restore tha database by sending the task to the server.
- Pass
-
Code Sample:
var restoreConfiguration = new RestoreBackupConfiguration(); //New database name restoreConfiguration.DatabaseName = "newProductsDatabase"; //Local path with a backup file var backupPath = @"C:\Users\RavenDB\backups\2018-12-26-16-17.ravendb-Products-A-backup"; restoreConfiguration.BackupLocation = backupPath; var restoreBackupTask = new RestoreBackupOperation(restoreConfiguration); docStore.Maintenance.Server.Send(restoreBackupTask);
Optional Settings:
-
LastFileNameToRestore
-
Use LastFileNameToRestore if you want to restore backup-files until a certain file is reached and stop there.
For example -- These are the files in your backup folder:
2018-12-26-09-00.ravendb-full-backup
2018-12-26-12-00.ravendb-incremental-backup
2018-12-26-15-00.ravendb-incremental-backup
2018-12-26-18-00.ravendb-incremental-backup - Feed LastFileNameToRestore with the 2018-12-26-12-00 incremental-backup file name:
//Last incremental backup file to restore from restoreConfiguration.LastFileNameToRestore = @"2018-12-26-12-00.ravendb-incremental-backup";
- The full-backup and 12:00 incremental-backup files will be restored.
The 15:00 and 18:00 files will be omitted.
- These are the files in your backup folder:
-
Use LastFileNameToRestore if you want to restore backup-files until a certain file is reached and stop there.
-
DataDirectory
Choose the location and name of the directory the database will be restored to.
//Restore to a pre-chosen folder var dataPath = @"C:\Users\RavenDB\backups\2018-12-26-16-17.ravendb-Products-A-backup\restoredDatabaseLocation"; restoreConfiguration.DataDirectory = dataPath;
-
EncryptionKey
This is where you need to provide your encryption key if your backup is encrypted. -
DisableOngoingTasks
set DisableOngoingTasks to true to disable ongoing tasks after restoration.
//Do or do not run ongoing tasks after restoration. //Default setting is FALSE, to allow tasks' execution when backup is restored. restoreConfiguration.DisableOngoingTasks = true;
Restore Database to Multiple Nodes
Restore Database to a Single Node & Replicate it to Other Nodes
The common approach to restoring a cluster is to restore the backed-up database to a single server, and then expand the database group to additional nodes, allowing normal replication.
- Restore the backup to a single node.
- Modify the database group topology using the Studio or code to spread the database to the other nodes.
Restore Database to Multiple Nodes Simultaneously
You can create the cluster in advance, and restore the database to multiple nodes simultaneously.
This procedure is advisable only when restoring a Snapshot.
- Simultaneously restoring a logical-backup by multiple nodes, triggers each node to send change-vector updates to all other nodes.
- Simultaneously restoring a snapshot does not initiate this behavior, because the databases kept by all nodes are considered identical.
- On the first node, restore the database using its original name.
- On other nodes, restore the database using different names.
- Wait for the restoration to complete on all nodes.
-
Soft-delete the additional databases (those with altered names).
- Delete the databases from the cluster with
HardDelete
set tofalse
, to retain the data files on disk.
- Delete the databases from the cluster with
- Rename the database folder on all nodes to the original database name.
- Expand the database group to all relevant nodes.
Recommended Cautions
When you create a backup of a database on one machine and restore it to another, you may be interested more in the database itself than in behaviors accompanying it like its ongoing tasks.
- E.g., an ETL ongoing task from a production cluster may have unwanted results in a testing environment.
In such cases, disable ongoing tasks using the DisableOngoingTasks flag.
- Code Sample:
//Do or do not run ongoing tasks after restoration. //Default setting is FALSE, to allow tasks' execution when backup is restored. restoreConfiguration.DisableOngoingTasks = true;