Jakie kroki są konieczne, aby bezpiecznie ponownie uruchomić maszynę, na której znajduje się Microsoft SQL Server?

24

Czy są jakieś specjalne kroki, aby zapobiec uszkodzeniu danych podczas ponownego uruchamiania serwera obsługującego instancję MS SQL Server?

Na przykład ostatnio spotkałem się z zaleceniem ręcznego zatrzymania usługi SQL. Rozumiem, że jest to obsługiwane przez shutdownproces systemu Windows .

Jestem pewien, że istnieją miliony kroków, które mogą polecić poszczególni ludzie, tak jak właśnie wspomniałem, ale chciałbym uniknąć powtarzania przestarzałych lub przesądnych praktyk . Czy są jakieś zalecenia od Microsoft lub rozpowszechnione standardy branżowe?


To pytanie dotyczy krótkoterminowej procedury ponownego uruchamiania komputera. Jest jeszcze jedno pytanie dotyczące długoterminowej procedury zapewnienia, że ​​maszyna nie będzie używana, zanim zostanie trwale zdjęta.

Jon of All Trades
źródło
Nie mam sensu prosić o „szeroko rozpowszechnione standardy branżowe” i nie chcieć „zillion kroków, które mogą polecić poszczególni ludzie”. To prawdopodobnie ich opis standardów branżowych. Oba wydają się być ważnymi pytaniami, ale wiarygodnym źródłem będzie link do artykułu Microsoft.
Evan Carroll

Odpowiedzi:

14

Nie musisz być fantazyjny / zmartwiony ani przestraszony podczas restartowania serwera SQL.

Tylko upewnij się, że nie masz żadnych długoterminowych transakcji. Najlepiej jest zrestartować serwer sql za pomocą konsoli lub polecenia zamknięcia w okresie niskiej / minimalnej aktywności zwanej także oknem konserwacji, aby zminimalizować wpływ na firmę.

Jeśli masz konfigurację DR i nie chcesz być wyłączony, najlepszym rozwiązaniem jest przełączenie awaryjne, a następnie zrestartowanie węzła pasywnego lub dodatkowego.

Wyczyść zamknięcie SQL Server występuje w następujących scenariuszach:

  • Zatrzymaj serwer SQL za pomocą konsoli usług.
  • Zamykanie serwera
  • uruchamianie polecenia SHUTDOWN w SSMS

We wszystkich powyższych sytuacjach serwer SQL czysto zamyka wszystkie swoje bazy danych, a następnie kończy usługę polegającą na zatwierdzeniu lub wycofaniu wszystkich transakcji, zapisaniu wszystkich brudnych stron na dysku, a następnie zapisaniu wpisu w dzienniku transakcji.

Nieprawidłowe zamknięcie serwera SQL:

  • zamknij z nowąit
  • wyciągając kabel zasilający z serwera (jeśli masz dostęp).
  • zabicie sqlserver.exe z menedżera zadań
  • Awaria Dirve, na której znajdują się pliki binarne serwera SQL, exe, systemowe bazy danych lub awaria dysku systemowego Windows. Zwykle dysk C: \.
  • przegrzanie serwera powodujące jego zamknięcie (rzadko się zdarza !!)

SQL Server zawsze będzie próbował wykonać czyste zamknięcie ... chyba że zrobisz coś niewłaściwego, jak podano powyżej.

Kilka naprawdę dobrych linków do czytania na temat tego, co dzieje się za kulisami w fazie odzyskiwania:

Kin Shah
źródło
Świetny szczegół, dziękuję. Co rozumiesz przez „konfigurację DR”?
Jon of All Trades
@JonofAllTrades Disaster Recovery .. np Log shipping, dublowanie bazy danych lub można nawet myśleć o najwyższej dostępności jak klastrowania
Kin Shah
1
Chociaż całkowicie zgadzam się z tą listą „niewłaściwych” scenariuszy zamykania, uszkodzenie danych nie powinno nastąpić nawet wtedy, dzięki zapisywaniu z wyprzedzeniem.
John Alan
5

Wszystko to jest szczegółowo wyczerpujące na tej stronie.

Biorąc pod uwagę, że twoje pytanie konkretnie brzmi „czy są jakieś zalecane przez Microsoft ”, skłonny jestem sądzić, że prowadzenie dyskusji tutaj przynosi efekt przeciwny do zamierzonego. W artykule szczegółowo opisano proces

  • Używając albo
    • wiersz poleceń
    • PowerShell,
    • SQL Server Management Studio (GUI)
  • Dla 2008, 2012, 2014, 2016.
  • Dla obu
    • Silnik bazy danych
    • lub Agent

To, czy kroki te są zadowalające, byłoby moim zdaniem, czego nie chcesz. Dlatego właściwa odpowiedź zawsze będzie tam najbardziej aktualna.

Zatrzymywanie usługi przed wyłączeniem zasilania

jest to konieczne lub zalecane przed zamknięciem serwera, na którym działają usługi SQL.

Nie, to nie jest konieczne. Gdy jądro systemu Windows wyśle ​​sygnał do zamknięcia programu SQL Server, zrobi to w bezpieczny sposób, a system będzie czekać na jego zakończenie. Mówiąc ogólnie, wszystko zbudowane ze zdolnością do bezpiecznego wyłączania nie musi być wyłączenie ręcznie, a to ma się rozumieć wszystkie aplikacje Microsoft śledzić własne API i procedur sznurowania do PRESHUTDOWNlub SHUTDOWNfaz. Z dokumentów PRESHUTDOWN, które, jak zakładam, używają,

Powiadamia usługę, że system zostanie zamknięty. Usługi, które potrzebują dodatkowego czasu na wykonanie zadań czyszczenia poza ścisłym ograniczeniem czasu przy zamykaniu systemu, mogą korzystać z tego powiadomienia. Menedżer kontroli usług wysyła to powiadomienie do aplikacji, które się dla niego zarejestrowały, przed wysłaniem SERVICE_CONTROL_SHUTDOWNpowiadomienia do aplikacji, które zarejestrowały się dla tego powiadomienia.

Usługa, która obsługuje to powiadomienie, blokuje zamknięcie systemu, dopóki usługa się nie zatrzyma lub upłynie limit czasu oczekiwania na ponowne uruchomienie SERVICE_PRESHUTDOWN_INFO. Ponieważ wpływa to na wygodę użytkownika, usługi powinny korzystać z tej funkcji tylko wtedy, gdy jest to absolutnie konieczne, aby uniknąć utraty danych lub znacznego czasu przywracania przy następnym uruchomieniu systemu.

W razie potrzeby zakładam, że tak działa SQL Server.

Evan Carroll
źródło
To prawie co prosiłem. Ten dokument opisuje, jak zamknąć silnik SQL Server, ale nie odpowiada, czy jest to konieczne, czy zalecane przed zamknięciem serwera, na którym działają usługi SQL.
Jon of All Trades
@JonofAllTrades zaktualizowane ponownie.
Evan Carroll
3

Nie do końca, jeśli chodzi o zamykanie i zapobieganie uszkodzeniu bazy danych. MS SQL Server jest bardzo dojrzałym produktem, a prawdopodobieństwo spowodowania problemu korupcji przez proste „zamknięcie” byłoby skrajnym scenariuszem. Prawdopodobieństwo uszkodzenia jest znacznie większe, jeśli nie uruchomiono bazy danych CHECK lub nie sprawdzono poprawności sum kontrolnych na DB.

Być może posiadanie zewnętrznych narzędzi bezpośrednio dotykających plików MDF / NDF / LDF może powodować problemy, takie jak próba „przeniesienia” plików pomiędzy zamknięciami lub próby zablokowania plików przez niektóre programy podczas zamykania. Zauważyłem, że Windows Clustering psuje się, gdy dysk, na którym są przechowywane pliki DB, jest pełny, ale nie powoduje to „uszkodzenia bazy danych”.

Jeśli chcesz pomóc w zapewnieniu płynnego zamknięcia lub przełączenia awaryjnego, możesz uruchomić punkt kontrolny, upewnij się, że często korzystasz z DBCC CHECKDB (przynajmniej tyle razy, aby móc odzyskać uszkodzone dane z kopii zapasowej) i sprawdź, czy istnieją zależności zewnętrzne zadbał o takie jak dublowanie.

Jeśli jednak eksperci mają inne „najlepsze praktyki”, chciałbym je usłyszeć, ale przeszukując blogi i zasoby internetowe w ciągu ostatnich kilku lat, nie widziałem wiele w korupcji danych i zwykłym „wyłączeniu / ponownym uruchomieniu”.

Ali Razeghi
źródło
-1

Sposób, w jaki to robię: 1) Wyłącz wszystkie zadania. 2) Upewnij się, że żadne zadania nie są aktualnie wykonywane. 3) Często uruchamiaj SP_Who3, aby sprawdzić aktywność, uruchom także sp_whoisactive, aby uzyskać więcej informacji. 4) Jeśli nie ma żadnej aktywności, a jedyne, co widzisz, to bieżące zapytanie sp_who3 5) Przełącz bazy danych w tryb offline 6) Kliknij prawym przyciskiem myszy u góry bazy danych i kliknij Zatrzymaj 7) Sprawdź, czy usługi są w stanie zatrzymania w services.msc 8 ) Gotowy

PS. Jeśli masz PAGEIOLATCH / IOCOMPLETION lub jakąkolwiek inną aktywność w SP_Who3, nie rób powyższego, ponieważ może to spowodować przejście twoich baz danych w tryb odzyskiwania.

Gozzy
źródło
Bardzo rzadko jest to wykonalne lub warte zatrzymania całego ruchu do bazy danych dla większości ludzi. Jestem również pewien, jakie są korzyści z przełączenia wszystkich baz danych w tryb offline - to po prostu wydłuży proces.
LowlyDBA
To wcale nie jest dobra rada. dlaczego sugerowałbyś, aby przenieść dbs offline - jeśli dbs są w HADR np. dublowanie lub AG, nie będziesz w stanie tego zrobić.
Kin Shah