Jak przenieść folder wystąpień LocalDB programu SQL Server z domyślnej lokalizacji?

13

Otrzymuję wiele błędów z LocalDB( błąd uruchamiania , nie mogę utworzyć bazy danych z SQL Server Management Studio, a także wiele problemów podczas próby przywrócenia kopii zapasowej) i żadna z poprawek, które znalazłem, nic nie pomaga. Wydaje mi się, że wszystkie błędy mają swoje źródło w uprawnieniach niepoprawnie skonfigurowane.

Teraz prosty skrypt do tworzenia tabeli DDL działa dobrze z SQL Server Management Studio i tworzy bazę danych w katalogu głównym mojego konta użytkownika ( jak wyjaśniono tutaj ). Jednak folder Instances (zlokalizowany D:\Users\[My name]\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instancesmimo, że podczas instalowania SQL Server Express z Advanced Services określiłem folder DATA w innym miejscu - gdzie .mdfprzechowywane są tylko standardowe pliki SQL Server Express , ale nie LocalDBinstancje) wydaje się problematyczny w odniesieniu do uprawnień (w przeciwieństwie do konta root), a także za umieszczenie moich plików DB w lokalizacji wśród moich projektów, chciałbym przenieść folder Instancje w inne miejsce. czy to możliwe? Nie znalazłem nawet odpowiedniego wpisu rejestru.

Korzystam z programu SQL Server Express 2012, a także SSMS tej samej wersji (zainstalowane najnowsze aktualizacje).

Każda pomoc będzie mile widziana.

Edycja: Wspomniana wcześniej strona Ustawienia bazy danych KookieMonster zgłosiła błąd, nie mogąc tam edytować ani zobaczyć żadnej konfiguracji. Pozwoliłem Windows Update ponownie sprawdzić dostępność aktualizacji, a niektóre aktualizacje dla SQL Server Express nie zostały zainstalowane (chociaż jestem pewien, że wcześniej wybrałem wszystko do zainstalowania), więc je zainstalowałem. Umożliwiło mi to przejście do strony ustawień.

Próbowałem skonfigurować folder główny instancji LocalDB w innym miejscu, ale dostaję błąd odmowy dostępu dla każdego folderu, który próbowałem, a mianowicie

Zmiana nie powiodła się dla ustawień „Microsoft.SqlServer.Management.Smo.ObjectKeyBase”. (Microsoft.SqlServer.Smo)

------------------------------ DODATKOWE INFORMACJE:

Wystąpił wyjątek podczas wykonywania Transact-SQL instrukcji lub partii. (Microsoft.SqlServer.ConnectionInfo)


RegCreateKeyEx () zwrócił błąd 5, „Odmowa dostępu”. (Microsoft SQL Server, błąd: 22002)

Rozumiem, nawet jeśli folder ma opcję Pełna kontrola dla wszystkich! Jeszcze bardziej zabawne jest to, że jedyny działający folder, ustawiony jako domyślny (katalog główny konta użytkownika) nie ma żadnych specjalnych uprawnień - tylko te, które ma mój użytkownik (tak jak każdy inny folder, który próbowałem ustawić). W efekcie oznacza to, że wszystkie pliki baz danych LocalDB są zapisywane w folderze głównym mojego konta.

Piedone
źródło
1
Co dzieje się, gdy tworzysz bazę danych i jawnie ustawiasz pliki w określonej lokalizacji zamiast przyjmować wartości domyślne?
Aaron Bertrand
1
Dzięki za odpowiedź! To działa (jeśli wybiorę odpowiedni folder, taki jak folder projektu), ale bardzo niewygodne jest podawanie ścieżki za każdym razem. Po prostu nie mogę uwierzyć, że nie ma sposobu na zmianę ustawień domyślnych.
Piedone
Co się stanie, gdy przejdziesz do węzła serwera, klikniesz prawym przyciskiem myszy, właściwości, parametry bazy danych i zmienisz domyślną lokalizację? Czy wartości są takie, jakie ustawiłeś podczas instalacji czy coś innego?
KookieMonster
Mam dokładnie ten sam problem. Myślę, że przyczyną zmiany uprawnień do folderów nie jest to, że w rzeczywistości oznacza to problem z uprawnieniami w rejestrze, w szczególności tworzenie klucza rejestru (patrz ostatnia część: RegCreateKeyEx). Niestety nie wiem, jaki klucz chce stworzyć.
daveaglick

Odpowiedzi:

13

Zobacz mój komentarz powyżej. Użyłem Monitora procesów do śledzenia dostępu do rejestru i stwierdziłem, że otrzymywał odmowę dostępu podczas próby zapisu:

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

Obejrzałem to, otwierając Edytor rejestru i dając każdemu pełny dostęp do HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11E.LOCALDB\MSSQLServer. Następnie zmieniłem domyślną lokalizację i po zakończeniu usunąłem dostęp dla wszystkich. W ten sposób powstały następujące dodatkowe klucze, których wcześniej nie było:

DefaultData

DefaultLog

BackupDirectory

daveaglick
źródło
Dziękuję Ci. W końcu wybrałem inną trasę, więc nie mogę przetestować, jak by to zadziałało.
Piedone
3
Właśnie wypróbowałem dokładnie rozwiązanie, które tutaj zaproponowałeś i tak, mam dodatki wymienione w rejestrze. Nadal nie zastępuje to ani nie zmienia bieżących wartości właściwości mojej lokalnej bazy danych. Rejestr pokazuje pożądane wartości dla wszystkich 3 lokalizacji, ale w SMSS nadal istnieją lokalizacje domyślne po instalacji. Korzystanie z MS SQL Server Compact 3.5 SP 1 może być przyczyną takiego zachowania?
user3840527,
2
Jest to jedyne miejsce, które udało mi się znaleźć żadnych informacji na temat tego błędu. somedave, tak, zmiana uprawnień dla tego klucza reg powoduje, że błąd znika, ale jak mówi użytkownik3840527, SSMS nadal ma oryginalne domyślne lokalizacje później, nawet po wyjściu z niego i ponownym otwarciu.
Yann Duran,
@Piedone, czy mógłbyś wyjaśnić, co zrobiłeś, zamiast korzystać z metody klucza reg? Lub wskaż miejsce, które wyjaśnia tę metodę? Dzięki
Yann Duran,
1
Błąd znika, ale lokalizacja się nie zmienia
Adil Mammadov