Wie verschiebe ich einen Ordner mit SQL Server LocalDB-Instanzen vom Standardspeicherort?

12

Ich erhalte mehrere Fehler mit LocalDB( Startfehler , kann keine Datenbank mit SQL Server Management Studio erstellen und auch mehrere Probleme beim Versuch, eine Sicherung wiederherzustellen), und keine der gefundenen Korrekturen helfen irgendetwas. Es scheint mir, dass alle Fehler ihre Wurzel in Berechtigungen nicht richtig eingerichtet haben.

Jetzt funktioniert ein einfaches DDL-Tabellenerstellungsskript in SQL Server Management Studio einwandfrei und erstellt die Datenbank im Stammverzeichnis des Ordners meines Benutzerkontos ( wie hier erläutert ). Der Ordner Instances (der sich D:\Users\[My name]\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instancestrotz der Installation von SQL Server Express mit Advanced Services unter befindet), in dem der Ordner DATA an einem anderen Speicherort angegeben wurde, in dem nur Standarddateien von SQL Server Express .mdfgespeichert werden, jedoch keine LocalDBInstanzen), scheint (im Gegensatz zum Konto) problematisch in Bezug auf Berechtigungen zu sein root) und damit sich meine DB-Dateien an einem Ort innerhalb meiner Projekte befinden, möchte ich den Ordner Instances an einen anderen Ort verschieben. Ist das möglich? Ich habe noch nicht einmal einen entsprechenden Registrierungseintrag gefunden.

Ich verwende SQL Server Express 2012 und SSMS der gleichen Version (neueste Updates installiert).

Jede Hilfe wäre dankbar.

Bearbeiten: Die zuvor erwähnte Seite "Datenbankeinstellungen" von KookieMonster hat einen Fehler für mich ausgelöst, da dort keine Konfiguration bearbeitet oder angezeigt werden konnte. Ich habe Windows Update erneut nach Updates suchen lassen, und es gab einige Updates für SQL Server Express, die nicht installiert wurden (obwohl ich sicher bin, dass ich zuvor alles für die Installation ausgewählt habe), also habe ich sie installiert. Dadurch konnte ich auf die Einstellungsseite gehen.

Ich habe versucht, den Stammordner der LocalDB-Instanz an einer anderen Stelle einzurichten, erhalte jedoch für jeden Ordner, den ich ausprobiert habe, einen Zugriffsverweigerungsfehler

Änderung fehlgeschlagen für Einstellungen 'Microsoft.SqlServer.Management.Smo.ObjectKeyBase'. (Microsoft.SqlServer.Smo)

------------------------------ ZUSÄTZLICHE INFORMATION:

Beim Ausführen einer Transact-SQL-Anweisung oder eines Stapels ist eine Ausnahme aufgetreten. (Microsoft.SqlServer.ConnectionInfo)


RegCreateKeyEx () hat den Fehler 5 "Zugriff verweigert" zurückgegeben. (Microsoft SQL Server, Fehler: 22002)

Ich bekomme das auch wenn der Ordner Vollzugriff für Jedermann eingestellt hat! Noch amüsanter ist, dass der einzige Ordner, der funktioniert, für einen als Standard festgelegten Ordner (Stammordner des Benutzerkontos) keine besonderen Berechtigungen gelten - nur die, die mein Benutzer hat (genau wie für jeden anderen Ordner, den ich festgelegt habe). Tatsächlich bedeutet dies, dass alle Dateien meiner LocalDB-Datenbanken im Stammordner meines Kontos gespeichert werden.

Piedone
quelle
1
Was passiert, wenn Sie eine Datenbank erstellen und die Dateien explizit auf einen bestimmten Speicherort festlegen, anstatt die Standardeinstellungen zu übernehmen?
Aaron Bertrand
1
Danke für deine Antwort! Das funktioniert (wenn ich einen geeigneten Ordner wie meinen Projektordner auswähle), aber es ist sehr unpraktisch, den Pfad jedes Mal angeben zu müssen. Ich kann einfach nicht glauben, dass es keine Möglichkeit gibt, die Standardeinstellungen zu ändern.
Piedone
Was passiert, wenn Sie zum Serverknoten gehen, mit der rechten Maustaste auf Eigenschaften und Datenbankparameter klicken und den Standardspeicherort wechseln? Sind die Werte die Sie während der Installation festgelegt haben oder etwas anderes?
KookieMonster
Ich habe genau das gleiche Problem gehabt. Ich denke, der Grund, warum sich die Ordnerberechtigungen nicht ändern, liegt darin, dass Sie tatsächlich auf ein Berechtigungsproblem mit der Registrierung hingewiesen werden. Dies gilt insbesondere für das Erstellen eines Registrierungsschlüssels (siehe letzter Teil: RegCreateKeyEx). Leider kann ich nicht herausfinden, welchen Schlüssel er erstellen möchte.
Daveaglick

Antworten:

13

Siehe meinen Kommentar oben. Ich habe Process Monitor zum Verfolgen des Registrierungszugriffs verwendet und festgestellt, dass der Zugriff verweigert wurde, während ich versuchte zu schreiben:

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

Ich habe mich darum gekümmert, indem ich den Registrierungseditor geöffnet und allen den vollständigen Zugriff darauf gewährt habe HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11E.LOCALDB\MSSQLServer. Dann habe ich den Standardspeicherort geändert und den Zugriff für alle Benutzer entfernt, sobald dies geschehen ist. Dies machte die folgenden zusätzlichen Schlüssel, die vorher nicht da waren:

DefaultData

DefaultLog

BackupDirectory

Daveaglick
quelle
Vielen Dank. Ich bin am Ende einen anderen Weg gegangen, kann also nicht testen, wie das für mich funktionieren würde.
Piedone
3
Ich habe gerade genau die Lösung ausprobiert, die Sie hier vorgeschlagen haben, und ja, ich habe die Extras, die Sie in der Registrierung erwähnt haben. Dies überschreibt oder ändert jedoch nicht die aktuellen Eigenschaftswerte meiner lokalen Datenbank. Die Registrierung zeigt die gewünschten Werte für alle 3 Speicherorte an, in SMSS gibt es jedoch nach wie vor die Standardspeicherorte für die Installation. Die Verwendung von MS SQL Server Compact 3.5 SP 1 könnte der Grund für ein solches Verhalten sein?
user3840527
2
Dies ist der einzige Ort , dass ich in der Lage gewesen zu finden alle Informationen zu diesem Fehler. somedave, ja, das Ändern der Berechtigungen für diesen Registrierungsschlüssel lässt den Fehler verschwinden, aber wie der Benutzer 3840527 sagt, hat SSMS auch nach dem Beenden und erneuten Öffnen noch die ursprünglichen Standardspeicherorte.
Yann Duran
@Piedone, könntest du bitte erklären, was du getan hast, anstatt die reg key-Methode zu verwenden? Oder auf etwas zeigen, das die Methode erklärt? Danke
Yann Duran
1
Fehler geht weg, aber der Speicherort ändert sich nicht
Adil Mammadov