Restore database SMO probleme

Zakki49 Messages postés 71 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 18 mai 2011 - 18 août 2009 à 11:05
April_Seb4 Messages postés 19 Date d'inscription mardi 17 février 2004 Statut Membre Derniè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"

une petite idée?

merci d'avance

9 réponses

Zakki49 Messages postés 71 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 18 mai 2011
19 août 2009 à 16:53
Personne pour me filer un coup de main?
0
XRMiMil Messages postés 6 Date d'inscription jeudi 20 octobre 2005 Statut Membre Derniè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.

XR
0
Zakki49 Messages postés 71 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 18 mai 2011
20 août 2009 à 10:18
Bah en faite pour faire un backup ca marche niquel, il y a juste sur la restore :(

de plus je suis proprietaire, il y a pas de problème de ce côter
0
XRMiMil Messages postés 6 Date d'inscription jeudi 20 octobre 2005 Statut Membre Dernière intervention 8 octobre 2010
20 août 2009 à 10:23
Malheureusement je ne peux pas plus t'aider. Si le message d'erreur avait été plus explicite j'aurais peut-être eu d'autres idées, mais là non.

Bonne continuation, et n'hésite pas à poster ta solution si tu en trouves une.

XR
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Tom0251 Messages postés 1 Date d'inscription mardi 4 décembre 2007 Statut Membre Dernière intervention 30 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
0
April_Seb4 Messages postés 19 Date d'inscription mardi 17 février 2004 Statut Membre Dernière intervention 2 octobre 2013
8 oct. 2010 à 14:42
Salut

Je ne sais pas si ce post est toujours d'actualité vue la date mais bon...

Je pense quand même que le problème est lié au fait qu'SMO n'arrive pas à prendre la base de donnée en accès exclusif.

Pour vérifier, il suffit de regarder les messages de InnerException dans l'exception initiale et de remonter tant que InnerException n'est pas null.

J'ai le même problème et je ne sais pas encore comment le régler.

TheVengor
0
April_Seb4 Messages postés 19 Date d'inscription mardi 17 février 2004 Statut Membre Derniè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");

Pour moi, cela a résolu mon problème...

TheVengor
0
XRMiMil Messages postés 6 Date d'inscription jeudi 20 octobre 2005 Statut Membre Derniè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 ?

@+

XR
0
April_Seb4 Messages postés 19 Date d'inscription mardi 17 février 2004 Statut Membre Derniè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.

@+

TheVengor
0
Rejoignez-nous