Comment déplacer le dossier des instances SQL Server LocalDB de l'emplacement par défaut?

12

Je reçois plusieurs erreurs avec LocalDB( erreur de démarrage , impossible de créer une base de données à partir de SQL Server Management Studio et également plusieurs problèmes lors de la tentative de restauration d'une sauvegarde) et aucun des correctifs que j'ai trouvés n'aide quoi que ce soit. Il me semble que toutes les erreurs ont leur racine dans les autorisations qui ne sont pas configurées correctement.

Désormais, un simple script de création de table DDL fonctionne correctement à partir de SQL Server Management Studio et crée la base de données à la racine du dossier de mon compte d'utilisateur ( comme expliqué ici ). Le dossier Instances cependant (situé D:\Users\[My name]\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instancesmalgré malgré l'installation de SQL Server Express avec Advanced Services j'ai spécifié le dossier DATA dans un autre emplacement - où seuls les .mdffichiers SQL Server Express standard sont stockés, mais pas les LocalDBinstances) semble problématique concernant les autorisations (contrairement au compte root) donc et aussi pour avoir mes fichiers DB dans un emplacement parmi mes projets, je voudrais déplacer le dossier Instances vers un autre endroit. Est-ce possible? Je n'ai même pas trouvé d'entrée de registre correspondante.

J'utilise SQL Server Express 2012 et également SSMS de la même version (dernières mises à jour installées).

Toute aide serait appréciée.

Modifier: La page Paramètres de la base de données mentionnée précédemment par KookieMonster a généré une erreur pour moi, ne pouvant pas modifier ni voir aucune configuration là-bas. J'ai laissé Windows Update vérifier à nouveau les mises à jour et il y avait des mises à jour pour SQL Server Express qui n'étaient pas installées (bien que je sois sûr d'avoir tout sélectionné avant), donc je les ai installées. Cela m'a permis d'accéder à la page des paramètres.

J'ai essayé de configurer le dossier racine de l'instance LocalDB ailleurs mais j'obtiens une erreur d'accès refusé pour chaque dossier que j'ai essayé, à savoir

La modification a échoué pour les paramètres «Microsoft.SqlServer.Management.Smo.ObjectKeyBase». (Microsoft.SqlServer.Smo)

------------------------------ INFORMATION ADDITIONNELLE:

Une exception s'est produite lors de l'exécution d'une instruction ou d'un lot Transact-SQL. (Microsoft.SqlServer.ConnectionInfo)


RegCreateKeyEx () a renvoyé l'erreur 5, «l'accès est refusé». (Microsoft SQL Server, erreur: 22002)

J'obtiens ceci même si le dossier a un contrôle total défini pour tout le monde! Encore plus amusant, le seul dossier qui fonctionne, celui qui est défini par défaut (la racine du compte d'utilisateur) n'a pas d'autorisations spéciales appliquées - uniquement celles de mon utilisateur (comme tout autre dossier que j'ai essayé de définir). En effet, cela signifie que tous les fichiers de mes bases de données LocalDB sont enregistrés dans le dossier racine de mon compte.

Piedone
la source
1
Que se passe-t-il lorsque vous créez une base de données et définissez explicitement les fichiers à un emplacement spécifique au lieu de prendre les valeurs par défaut?
Aaron Bertrand
1
Merci pour votre réponse! Cela fonctionne (si je sélectionne un dossier approprié comme mon dossier de projet) mais il est très gênant d'avoir à spécifier le chemin à chaque fois. Je ne peux pas croire qu'il n'y ait aucun moyen de changer les valeurs par défaut.
Piedone
Que se passe-t-il lorsque vous accédez au nœud du serveur, faites un clic droit, sur les propriétés, les paramètres de la base de données et changez l'emplacement par défaut? Les valeurs sont-elles celles que vous avez définies lors de l'installation ou autre chose?
KookieMonster
J'ai eu exactement le même problème. Je pense que la raison pour laquelle les autorisations de dossier ne changent pas est parce que cela vous indique en fait qu'il y a un problème d'autorisations avec le registre, en particulier la création d'une clé de registre (voir la dernière partie: RegCreateKeyEx). Malheureusement, je ne peux pas comprendre quelle clé il veut créer.
daveaglick

Réponses:

13

Voir mon commentaire ci-dessus. J'ai utilisé Process Monitor pour tracer l'accès au registre et j'ai découvert qu'il obtenait un accès refusé en essayant d'écrire:

3:16:40.8405491 PM sqlservr.exe 8756 RegCreateKey HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11E.LOCALDB\MSSQLServer ACCESS DENIED Desired Access: Write

J'ai contourné cela en ouvrant l'Éditeur du Registre et en donnant à Tout le monde un accès complet à HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11E.LOCALDB\MSSQLServer. Ensuite, j'ai changé l'emplacement par défaut et supprimé l'accès Tout le monde une fois cela fait. Cela a rendu les clés supplémentaires suivantes qui n'existaient pas auparavant:

DefaultData

DefaultLog

BackupDirectory

daveaglick
la source
Je vous remercie. J'ai finalement choisi une voie différente, donc je ne peux pas tester comment cela fonctionnerait pour moi.
Piedone
3
Je viens d'essayer exactement la solution que vous avez proposée ici et oui, j'ai les extras que vous avez mentionnés dans le registre. Pourtant, cela ne remplace pas ou ne modifie pas les valeurs des propriétés actuelles de ma base de données locale. Le registre affiche les valeurs souhaitées pour les 3 emplacements, mais dans SMSS, il existe toujours les emplacements par défaut par installation. L'utilisation de MS sql server compact 3.5 SP 1 pourrait être la raison d'un tel comportement?
user3840527
2
C'est le seul endroit où j'ai pu trouver des informations sur cette erreur. un jour, oui, la modification des autorisations pour cette clé de registre fait disparaître l'erreur, mais comme le dit user3840527, SSMS a toujours les emplacements par défaut d'origine par la suite, même après l'avoir quitté et rouvert.
Yann Duran
@Piedone, pourriez-vous s'il vous plaît expliquer ce que vous avez fait au lieu d'utiliser la méthode de la clé de Registre? Ou pointez-vous vers un endroit qui explique la méthode? Merci
Yann Duran
1
L'erreur disparaît mais l'emplacement ne change pas
Adil Mammadov