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 shutdown
proces 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.
źródło
Odpowiedzi:
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:
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:
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:
źródło
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
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
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
PRESHUTDOWN
lubSHUTDOWN
faz. Z dokumentówPRESHUTDOWN
, które, jak zakładam, używają,W razie potrzeby zakładam, że tak działa SQL Server.
źródło
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”.
źródło
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.
źródło