Comment publier une base de données SQL Express?
-
11-07-2019 - |
Question
J'ai une application simple qui utilise une base de données SQL Express 2005. Lorsque l'utilisateur ferme l'application, je souhaite donner la possibilité de sauvegarder la base de données en en faisant une copie dans un autre répertoire. Cependant, lorsque j'essaie de le faire, j'obtiens "Le processus ne peut pas accéder au fichier '... \ Pricing.MDF' car il est utilisé par un autre processus." J'ai fermé la connexion, jeté la connexion, mis à rien, et GC.Collect (), mais cela ne fait aucune différence. Ma chaîne de connexion est "Source de données =. \ SQLEXPRESS2005; AttachDbFilename = | DataDirectory | \ Pricing.mdf; Sécurité intégrée = True; Instance utilisateur = True " et je continue simplement à utiliser la même connexion. Je n'ai pas vu où je pouvais détacher la base de données pour contrer l'attachement dans la chaîne de connexion.
1 - Comment puis-je libérer la chose? 2 - Existe-t-il un meilleur moyen que de simplement copier la base de données? L’application est réservée à mon mari. Je serai donc en mesure de la gérer s’il a réellement besoin de restaurer à partir d’une sauvegarde.
Merci!
La solution
Vous ne voulez pas copier le fichier mdf directement, car SQL conserve la plupart des modifications dans le journal des transactions, regardez l'heure modifiée après l'exécution de certaines requêtes, elle n'écrit pas directement dans le fichier. Je l’ai remarqué lors de la configuration d’un travail rsync.
Faire en sorte que SQL génère la sauvegarde est beaucoup plus sûr et souhaitable, qu’il soit mono-utilisateur ou multi-utilisateur. Vous pouvez fournir un lien vers une fonction appelant le T-SQL que vous pouvez complètement automatiser aussi loin que la base de données source et le dossier de destination:
BACKUP DATABASE [mydatabasename]
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\Scheduled Task Backups\mydatabasename-backup' WITH NOFORMAT, NOINIT, NAME = N'mydatabasename-Full Data
SQL 2005 avait introduit une autre syntaxe T-SQL pour ce faire. Je ne le trouve pas pour la vie. Mais il existe des moyens de le faire par le biais de M $$ SQL sans avoir le serveur de base de données complètement développé.
Autres conseils
Voici un exemple dans qui montre comment sauvegarder une base de données SQL Express dans un programme.
S'il s'agit d'un utilisateur unique , d'une application ou d'une base de données en lecture seule, n'utilisez pas SQL Server Express . C’est ce à quoi sert SQL Server Compact. Cela résoudra votre problème de sauvegarde et simplifiera également le déploiement.