Mon problème est vraiment simple. J'ai un fichier .bak qui contient un ou plusieurs jeux de sauvegarde. Lorsque j'utilise SMO pour restaurer la base de données avec ce fichier .bak, seul le premier jeu de sauvegarde fonctionne. Il semble ignorer les ensembles restants.Utiliser tous les jeux de sauvegarde pour restaurer la base de données avec SMO
Pourquoi est-ce?
Voir mon code:
//Sets the restore configuration
Restore restore = new Restore()
{
Action = RestoreActionType.Database,
Database = _databaseToRestore.DatabaseName,
ReplaceDatabase = true
};
restore.Devices.Add(new BackupDeviceItem(_backupFilePath, DeviceType.File));
Server server = new Server(_databaseToRestore.ServerName);
DataTable fileList = restore.ReadFileList(server);
string serverDataFolder = server.Settings.DefaultFile;
if (string.IsNullOrEmpty(serverDataFolder))
serverDataFolder = server.Information.MasterDBPath;
foreach (DataRow file in fileList.Rows)
{
restore.RelocateFiles.Add(
new RelocateFile((string)file["LogicalName"],
Path.Combine(serverDataFolder, _databaseToRestore.DatabaseName + Path.GetExtension((string)file["PhysicalName"]))));
}
//Gets the exclusive access to database
server.KillAllProcesses(_databaseToRestore.DatabaseName);
restore.Wait();
restore.SqlRestore(server);
Je pensais que le BackupDeviceItem pouvait me donne une rétroaction sur le nombre de jeux de sauvegarde, il y a à l'intérieur, de cette façon, je pouvais avertir l'utilisateur, mais ce n'est pas.
Quelqu'un a une idée à ce sujet?
Merci pour votre temps.
Ceci est très utile, merci de poster vos résultats. Je voudrais ajouter que pour lui dire quel fichier de sauvegarde vous souhaitez lire l'en-tête de vous l'ajouter en tant que périphérique à l'objet de restauration via Restore.Devices.Add(). Exemple complet sur MSDN, http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.restore.readbackupheader.aspx – Despertar