Je tente de restaurer une base de données en restaurant d'abord une sauvegarde complète, puis en restaurant une sauvegarde différentielle à l'aide de la classe Microsoft.SqlServer.Management.Smo.Restore. La sauvegarde complète est restaurée avec le code suivant:Restauration d'une sauvegarde différentielle avec un objet SMO Restore
Restore myFullRestore = new Restore();
myFullRestore.Database = "DatabaseName";
myFullRestore.Action = RestoreActionType.Database;
myFullRestore.AddDevice(@"C:\BackupFile.bak", DeviceType.File);
myFullRestore.FileNumber = 1;
myFullRestore.SqlRestore(myServer); // myServer is an already-existing instance of Microsoft.SqlServer.Management.Smo.Server
Après la restauration de la sauvegarde complète (qui complète avec succès), mon code pour restaurer la sauvegarde différentielle est la suivante:
Restore myDiffRestore = new Restore();
myDiffRestore.Database = "DatabaseName";
myDiffRestore.Action = RestoreActionType.Database;
myDiffRestore.AddDevice(@"C:\BackupFile.bak", DeviceType.File);
myDiffRestore.FileNumber = 4; // file contains multiple backup sets, this is the index of the set I want to use
myDiffRestore.SqlRestore(myServer);
Cependant, ce code lancera une exception Microsoft.SqlServer.Management.Smo.FailedOperationException avec le message "La restauration a échoué pour le nom de serveur ''. Dois-je indiquer explicitement que je suis en train de restaurer une sauvegarde différentielle, et si oui, comment procéder? Ou le problème est-il moins évident que cela? Toute suggestion sur ce que je fais de mal (ou négliger de faire) serait grandement appréciée.
Mise à jour: Je ne sais pas si cela était à l'origine une faute de frappe ou si les versions antérieures avaient cette forme de l'API, mais pour les versions ultérieures de cette ligne
fullRestore.AddDevice(...);
doivent être
fullRestore.Devices.AddDevice(...)
La restauration avec NoRecovery = true laissera la base de données dans un état de "restauration". Pour le rendre utilisable à nouveau, utilisez cette commande: RESTORE DATABASE WITH RECOVERY –
James
Bonjour, Donut de la même manière pouvez-vous s'il vous plaît me dire comment restaurer le différentiel de base de données en fonction d'une date donnée. –
@kalyan Je ne sais pas exactement ce que vous demandez; avez-vous un ensemble de sauvegardes différentielles et vous souhaitez les restaurer ** jusqu'à une certaine date? Ou voulez-vous commencer ** à une date donnée et appliquer toutes les sauvegardes différentielles suivantes? Ou peut-être quelque chose d'autre entièrement - pourriez-vous clarifier? – Donut