Bonjour à tous,

cette question aurait aussi bien ça place dans la section Sql Server mais je poste ici quand meme parce que la nécessité de pouvoir le faire depuis l'applicatif VB.NET est primordiale.

Donc je développe un petit module qui devrait permettre de faire des sauvegardes et restaurations à chaud de la base SqlServer utilisé par mon appli. Je sauvegarde ma base de cette manière :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
Dim Sql, nomfichier As String
nomfichier = "SAV" & Now.ToString("s").Replace(":", "-")
 
ConnectBD(Conn)
Sql = "BACKUP DATABASE GPAO TO DISK=N'" & depot & nomfichier & ".bak '"
Conn.Execute(Sql)
DeconnectBD(Conn)
Ce code me génère donc un fichier .bak dans un dépot qui rassemble toutes les sauvegardes.

Pour charger (et donc remplacer ma base courante), je procède comme ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
Dim Sql, nomfichier As String
nomfichier = backups.GetItemText(backups.SelectedItem)
 
ConnectBD(Conn)
' KILL DE TOUTES LES CONNEXIONS ACTIVES A LA BASE
'Sql = " SELECT 'kill', spid FROM sysprocesses WHERE dbid=db_id('GPAO');"
'Conn.Execute(Sql)
 
' EXECUTE LA RESTAURATION
Sql = "RESTORE DATABASE GPAO FROM DISK=N'\\serveurfm\d\bob\backup\" & nomfichier & "';"
Conn.Execute(Sql)
DeconnectBD(Conn)
Quand je tente un chargement d'une sauvegarde, j'ai le message suivant :

Impossible de remplacer le fichier 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\GPAO.mdf' car il est utilisé par la base de données 'GPAO'.
Effectivement, pour pouvoir exécuter ma requete RESTORE, j'utilise une connexion à cette meme base GPAO (je vous mettrai ma procédure ConnectBD si nécessaire)... Donc j'imagine qu'il n'est pas capable de remplacer la base de données GPAO puisque je suis actuellement connecté dessus !

Mais comment faire dans ce cas ?

Merci pour votre aide.

Bob