J'insère une section Sauvegarde et récupération de base de données SQL dans mon programme. J'ai utilisé des exemples de MSDN (a essayé un autre et cela ne fonctionnerait pas). MSDN Page - http://msdn.microsoft.com/en-us/library/ms162133.aspxC# Récupération de la base de données bloquée dans 'Restauration ...'
Le fichier de sauvegarde fonctionne et j'ai testé le fichier dans Management Studio.
Mais j'ai des problèmes avec la récupération du fichier.
Le code semble fonctionner, mais la base de données dans SQL Server est coincé dans "Restauration ..."
if (openFile.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
Server sqlServer = new Server();
Restore sqlRestore = new Restore();
sqlRestore.NoRecovery = true;
sqlRestore.Action = RestoreActionType.Database;
BackupDeviceItem deviceItem = new BackupDeviceItem(openFile.FileName, DeviceType.File);
sqlRestore.Devices.Add(deviceItem);
sqlRestore.Database = "firstRecoverTest";
sqlRestore.SqlRestore(sqlServer);
//Add the recovered database into the Entity Table
SqlCommand intoEntity = new SqlCommand("IF NOT EXISTS(SELECT entityName FROM Entitys WHERE entityName = 'firstRecoveryTest') INSERT INTO Entitys VALUES ('firstRecoveryTest');", sqlConnection);
sqlConnection.Open();
intoEntity.ExecuteNonQuery();
Database db = default(Database);
db = sqlServer.Databases["firstRecoverTest"];
db.RecoveryModel = (RecoveryModel)1;
db.AutoClose = true;
//db.Alter();
}
Dans l'exemple il y a une db.Alter(); fonction, mais cela génère une erreur indiquant que "Alter a échoué pour la base de données 'firstRecoverTest'".
S'il vous plaît laissez-moi savoir vos pensées
Merci à l'avance
MISE À JOUR
Après avoir inséré le "ReplaceDatabase = true;" il n'y avait pas de changement dans le résultat final. En passant aussi le code ligne par ligne, montre qu'il est à travers.
Le "db.Alter();" est juste celui placé à la fin du code (affiché comme commentaire). Il est utilisé dans la création de la sauvegarde et fonctionne sans erreur. InnerError affiche ces informations lors de l'utilisation de db.Alter();
« ALTER DATABASE n'est pas autorisée alors qu'une base de données est dans l'état de restauration »
La partie intéressante est les fichiers SQL journal. Je reçois 3 journaux:
"Démarrage de la base de données" firstRecoverTest "."
"La base de données 'firstRecoverTest' est marquée RESTORING et est dans un état qui ne permet pas l'exécution de la récupération."
"La base de données a été restaurée: Base de données: firstRecoverTest, date de création (heure): 2011/09/20 (15:44:48), première LSN: 37: 159: 37, dernière LSN: 37: 175: 1, nombre de périphériques de vidage: 1, informations sur le périphérique: (FILE = 1, TYPE = DISK: {'C: \ Users \ Administrator \ Desktop \ installer_backup'}). Message d'information Aucune action de l'utilisateur n'est requise. "
Cependant, quand je fais une normale récupérer à l'aide SQL Management Studio il y a 2 plus entrys journaux disant
"Démarrage de la base de données [databaseName] '."
« restauration est terminée sur la base de données [databaseName]. La base de données est maintenant disponible »
Je n'ai pas assez réputation pour poster une petite image de la façon dont il est dans SQL Management Studio unfortunatly.
J'ai mis à jour mon poste avec des informations qui peuvent aider à expliquer ce qui se passe – Seige
@Seige S'il vous plaît voir la mise à jour. –
Merci. Je pensais que j'avais essayé de changer cela, mais je devais avoir quelque chose d'autre qui a échoué. Cela a résolu le problème. Merci encore – Seige