Uruchamianie instancji SQL Server w minimalnej konfiguracji

Zdarza się, iż problemy konfiguracyjne naszego serwera SQL uniemożliwiają podłączenie się do niego. Wtedy też z pomocą przychodzi nam uruchomienie usługi w tak zwanym trybie minimalnej konfiguracji (ang. minimal configuration mode). Postanowiłem napisać na ten temat parę słów i pokazać jak coś takiego skonfigurować. Zapraszam do lektury.

Na samym początku przypuśćmy, że coś źle skonfigurowaliśmy i nie możemy się połączyć lub co gorsza nasza usługa “nie wstaje”. Wtedy też należy wejść do Configuration Managera (o którym napisałem parę słów tutaj) i na zakładce Startup Parameters dodać przełącznik -f, który uruchamia instancję w trybie minimalnej konfiguracji. Po tych zabiegach należy zrestartować całą instancję.

Tak więc po restarcie instancja będzie działać w trybie minimalnej konfiguracji co niesie ze sobą następujące konsekwencje:

  • włączony został tzw. Single User Mode czyli tylko pojedynczy użytkownik może się podłączyć do instancji
  • zdalny dostęp do serwera jest niemożliwy – trzeba połączyć się bezpośrednio z poziomu serwera na którym działa serwer
  • mechanizm checkpoint został wyłączony
  • mechanizm Read-Ahead został wyłączony (link)
  • jeżeli zostały zdefiniowane jakieś procedury startowe to nie zostaną uruchomione

Tak więc mając naszą instancję uruchomioną w pożądanym trybie możemy się do niej połączyć. Do tego celu możemy użyć np. linii komend tj. sqlcmd lub standardowego Management Studio. W naszym przykładzie użyjemy ich obu poczynając od tego drugiego gdyż mimo wszystko jesteśmy do niego zdecydowanie bardziej przyzwyczajeni niż do sqlcmd. Tak więc włączmy SSMS jako administrator i spróbujmy zobaczyć okno Object Explorer oraz okno zapytania. Niestety zakończy się to błędem:

Dzieje się tak dlatego, że okno zapytania i Object Explorer nawiązują dwa różne połączenia, a jak już wspomniałem wcześniej, instancja działająca w omawianym trybie umożliwia nawiązania tylko jednego połączenia. Tak więc zrestartujmy SSMS i przy oknie wyboru połączenia kliknijmy Cancel:

Dzięki temu SSMS nie nawiąże połączeń automatycznie dla Object Explorera, który nie interesuje nas tak naprawdę. Zamiast tego otwórzmy nowe okno zapytań do bazy danych:

Naszym oczom ukaże się pojedyncze okno zapytań gdzie możemy wykonywać zapytania, które naprawią naszą instancję używając np. sp_configure lub np. ALTER DATABASE:

Warto pamiętać o tym, że np. jeżeli działają inne usługi które łączą się do SQL Server jak np. Agent to po uruchomieniu instancji mogą one zająć jedyne dostępne połączenie – więc warto upewnić się, że nic takiego się nie stanie. Zaleca się stosowanie SQLCMD do połączenia do bazy w trybie z minimalną konfiguracją dlatego też pokażę, że i linia komend nie jest straszna – wystarczy uruchomić wiersz poleceń i tam wpisać:

sqlcmd -S localhost\sql16

Oczywiście localhost\sql16 to moja instancja i każdy powinien wpisać swoją. Taki zapis pozwala połączyć się do instancji domyślnej używając uwierzytelnienia Windows – w przypadku gdy mamy do czynienia z instancją domyślną lub używamy uwierzytelnienia SQL Server musimy użyć innych przełączników linii komend (aby się z nimi zapoznać wystarczy w oknie linii komend wpisać sqlcmd /?). Znak zachęty pod postacią 1> oznacza, iż możemy wykonywać nasze zapytania:

Pamiętajmy, że w tym oknie każde zapytanie musimy zakończyć separatorem zapytań (czyli domyślnie GO):

Tak więc dzięki temu podejściu możemy rozwiązać wiele problemów jak np. błędnie skonfigurowana ścieżka do plików bazy TempDB opisana tutaj. Po naprawie wystarczy wyłączyć parametr startowy i zrestartować naszą instancję. Myślę, że warto znać ten mechanizm gdyż niejednokrotnie może być przydatny w awaryjnych sytuacjach.

Leave a Reply