Zakki49
Messages postés71Date d'inscriptionvendredi 30 mai 2008StatutMembreDernière intervention18 mai 2011
-
18 août 2009 à 11:05
April_Seb4
Messages postés19Date d'inscriptionmardi 17 février 2004StatutMembreDernière intervention 2 octobre 2013
-
11 oct. 2010 à 14:30
Bonjour à tous,
Alors voila je vous fourni mon code :
o_sc = new SqlConnection(Properties.Settings.Default.MaBaseConnectionString);
o_scn = new ServerConnection(o_sc);
o_sv = new Server(o_scn);
o_rst = new Restore();
o_rst.Action = RestoreActionType.Database;
o_rst.Database = "MaBase";
o_rst.Devices.AddDevice("C:\\Program Files\\Microsoft SQL Server\\MSSQL.1\\MSSQL\\Backup\\backup_" + o_Backup[0].D_DATE_BACKUP.ToShortDateString().Replace('/', '_') + ".bak", DeviceType.File);
o_rst.ReplaceDatabase = true;
o_rst.SqlRestore(o_sv);
Il se trouve qu'au moment de faire la restore j'ai l'erreur : Echec de restaurer pour "PC-DEV/SQLEXPRESS"
XRMiMil
Messages postés6Date d'inscriptionjeudi 20 octobre 2005StatutMembreDernière intervention 8 octobre 2010 20 août 2009 à 09:39
Bonjour,
Alors je ne suis absolument pas sûr de ce que je vais dire (je n'ai jamais utilisé SMO), mais je pense tout simplement que tu n'as pas les droits sur ton server SQL pour effectuer cette opération.
Commence par voir si tu es propriétaire de la base (sur ta base de données : click droit -> propriété -> Fichiers) peut-être que ça pourrait résoudre ton problème, ou regarde dans les propriétés de ta connexion, si tu as le droit d'effectuer des sauvegardes/restaurations (je ne sais pas si un tel droit existe mais bon).
J'espère t'avoir un petit peu aidé malgré mon manque de connaissance dans ce domaine.
Tom0251
Messages postés1Date d'inscriptionmardi 4 décembre 2007StatutMembreDernière intervention30 octobre 2009 30 oct. 2009 à 16:00
Salut,
Il se peut que ton problème vienne de cette ligne :
o_rst.Devices.AddDevice
J'ai eu ce soucil car j'exécutait mon application de sauvegarde sur un autre pc que mon serveur SQL.
Si c'est ton cas alors tu dois utiliser un chemin réseau ("\\nom_du_pc\C\...")
Cordialement
April_Seb4
Messages postés19Date d'inscriptionmardi 17 février 2004StatutMembreDernière intervention 2 octobre 2013 8 oct. 2010 à 15:05
ReSalut
Alors pour ceux que ça intéresse, voici ce qu'il est possible de faire
Dans SQL Server, on peut effectuer la requête suivante
SELECT * FROM sys.sysprocesses
WHERE dbid = DB_ID('YourDatabaseName')
Si une ligne est retournée, cela signifie que quelqu'un utilise la base de donnée. (ça peut servir à confirmer ce que je pense de cette erreur)
Ensuite, il suffit de rajouter cette ligne de code dans SMO
SqlServer.KillAllProcesses("YourDatabaseName");
Cela permet de fermer toutes les connexions des processus à la base de donnée.
Ensuite si la restauration plante toujours, on peut faire ceci mais ATTENTION car ce code supprime complètement la base de donnée... A utiliser avec précaution.
SqlServer.KillDatabase("YourDatabaseName");
XRMiMil
Messages postés6Date d'inscriptionjeudi 20 octobre 2005StatutMembreDernière intervention 8 octobre 2010 8 oct. 2010 à 16:23
Bonjour April_Seb4,
Je n'avais pas pensé à ça, mais tu as surement raison. Le problème est surement du à l'impossibilité d'obtenir un accès exclusif à la base de données. La commande KillAllProcess() devrait suffir je pense.
En revanche, je ne vois pas trop l'utilité de faire un KillDatabase().
Sauf si tu veux supprimer la base de données puis la reconstruire juste après, c'est ça ?
April_Seb4
Messages postés19Date d'inscriptionmardi 17 février 2004StatutMembreDernière intervention 2 octobre 2013 11 oct. 2010 à 14:30
Bonjour
En fait, en faisant des essais, je me suis aperçu que le KillAllProcess n'était pas suffisant dans certains cas et que l'accès n'était toujours pas accessible (Et là, je ne sais pas pourquoi).
En faisant un KillDatabase, cela fonctionne (On peut aussi se demander pourquoi le KillDatabase fonctionne alors que la restauration de la base non car en accès exclusif pour quelqu'un d'autre mais bon...)
Sinon pour ta question : Oui, cela permet de supprimer la base avant d'effectuer une restauration qui la reconstruit complètement.