Tworzenie kopii zapasowych i przywracanie 10-20 baz danych SQL Server do ~ stanu synchronicznego?

15

Muszę wykonać kopię zapasową 10-20 baz danych SQL Server 2008 R2 o rozmiarach między 10-50 GB, podczas gdy są one online i są używane jednocześnie przez jedną aplikację dla przedsiębiorstw. Muszę też przywrócić je do stanu, który jest w dużej mierze zsynchronizowany we wszystkich bazach danych (mogę sobie pozwolić na kilka sekund desynchronizacji między bazami danych). Celem jest przechwycenie danych produkcyjnych dla środowisk QA / DEV.

Chciałbym nie wymagać, aby bazy danych działały w trybie pełnego odzyskiwania, i zaproponować metodę tworzenia kopii zapasowych, która jest dedykowana do przechwytywania danych w środowiskach kontroli jakości i pozostaje niezależna od głównego procesu tworzenia kopii zapasowych, który nie jest pod moją kontrolą.

Dla moich klientów zrobienie 20 pełnych kopii zapasowych po około 30 GB zajmie 1-2 godziny. To sprawia, że ​​wykonywanie pełnych kopii zapasowych sekwencyjnie jest niedopuszczalne, ponieważ bazy danych byłyby zbyt zsynchronizowane podczas uruchamiania w prostym odzyskiwaniu.

Szukam pomysłu lepszego niż te:

IDEA 1: Migawka na poziomie SAN dysków VM. xcopy MDF / LDF z migawki.

Gdy skopiowane pliki zostaną dołączone do innej instancji serwera, proces jej odzyskiwania powinien wygenerować spójne bazy danych, które są migawkami prawie jednocześnie.
Googling przekonał mnie, że to zły pomysł, przynajmniej dlatego, że mogę uzyskać desync vs. master / msdb / etc.

IDEA 2: Zorganizuj złożone tworzenie kopii zapasowych i przywracanie synchronizacji we wszystkich bazach danych

Wymaga to ode mnie, aby bazy danych działały w trybie pełnego odzyskiwania, czego nie chcę. Rozpocznij równoległe tworzenie kopii zapasowych dla wszystkich baz danych na długo przed terminem (T0). Po osiągnięciu T0 wykonaj kopię zapasową wszystkich dzienników (powinno to zająć najwyżej kilka minut). Weź wynikową liczbę kopii zapasowych i spróbuj je przywrócić i przewiń dzienniki do przodu / do tyłu, aby uzyskać nieco spójny stan w bazach danych względem T0.
Wymaga to dużo planowania i skryptów, aby można było z niego korzystać niezawodnie, więc dołożyłem wszelkich starań, aby tego uniknąć.

Czy brakuje mi jakiegoś innego rozwiązania?

PS1: Chciałbym móc korzystać z migawek db . Chodziło o to, aby zainicjować migawkę na każdym db (co powinno potrwać kilka sekund), a następnie w pełni wykonać kopię zapasową każdego z nich w ciągu kolejnych minut / godzin. Następnie przywróć je wszystkie na innym serwerze i przywróć każdy z nich do migawki. AFAIK ten scenariusz nie jest możliwy, ponieważ nie można wykonać kopii zapasowej migawek wraz z bazą danych. Można je tylko przywrócić na miejscu, na serwerze, na którym zostały utworzone. Ponadto wymagają wersji Enterprise, której nie mam dla wszystkich klientów.

PS2: Jeśli znasz rozwiązanie innej firmy, które może tworzyć synchronizowane kopie zapasowe między bazami danych, proszę o tym wspomnieć.

bogdan
źródło
Jaka jest wersja serwera SQL dla tego scenariusza z jego edycją? i w przybliżeniu jaki jest rozmiar baz danych, o których tutaj mówimy?
KASQLDBA

Odpowiedzi:

12

Muszę wykonać kopię zapasową 10-20 SQL Server dbs używanych jednocześnie przez jedną aplikację korporacyjną, gdy są one online, w taki sposób, aby przywrócić je do stanu, który jest w dużej mierze zsynchronizowany na wszystkich dbs

To, czego szukasz, to spójne tworzenie kopii zapasowych we wszystkich bazach danych klientów, powinieneś używać PEŁNYCH kopii zapasowych wraz z Marked Transactions(wyróżnienie pogrubioną czcionką):

Po dokonaniu powiązanych aktualizacji dwóch lub więcej baz danych, powiązanych baz danych , można użyć znaków transakcji, aby odzyskać je do logicznie spójnego punktu . Odzyskiwanie to powoduje jednak utratę wszelkich transakcji, które zostały popełnione po znaku użytym jako punkt odzyskiwania. Oznaczanie transakcji jest odpowiednie tylko wtedy, gdy testujesz powiązane bazy danych lub gdy chcesz stracić ostatnio zatwierdzone transakcje.

wprowadź opis zdjęcia tutaj

Upewnij się, że wykonujesz kopię zapasową dziennika transakcji adhoc COPY_ONLY, w przeciwnym razie odzyskiwanie będzie uciążliwe, ponieważ tworzenie kopii zapasowej dziennika transakcji adhoc bez COPY_ONLYzerwania łańcucha dziennika. Ze względów bezpieczeństwa można ograniczyć użytkownikom używanie tylko COPY_ONLY kopii zapasowych .

Potrzebuję rozwiązania dla SQL Server w wersji 2008 R2 i nowszych. Rozmiar Db wynosi do 50 GB na db, a czas wykonania kopii zapasowej wszystkich z nich to prawdopodobnie 1-2 godziny.

Oznaczone transakcje będą działać w Twojej sytuacji. Jedyne, co należy robić równoległe kopie zapasowe, to dla STRIPEnich, ale w końcu upewniasz się, że nie stracisz pasków kopii zapasowej. Aby je przyspieszyć, możesz grać z BUFFERCOUNTi MAXTRANSFERSIZE.

Należy użyć kompresji kopii zapasowej, a także włączyć natychmiastową inicjalizację pliku .

Odnosić się do

Kin Shah
źródło
1
Tylko mała uwaga, not usingkompresja kopii zapasowych może jeszcze bardziej przyspieszyć tworzenie kopii zapasowych ... jeśli masz na to miejsce.
4
W przypadku wolniejszego przechowywania, podejrzewam, że narzut kompresji będzie więcej niż uzasadniony, ponieważ czas zaoszczędzony na I / O przeważy nad dodatkowym czasem spędzonym na procesorze. W przypadku szybszego przechowywania korzyści kompresji są znacznie ważniejsze dla przestrzeni dyskowej.
Aaron Bertrand
@ShawnMelton Zgodziłbym się z tobą, ale podczas przesyłania kopii zapasowych skompresowane kopie zapasowe byłyby znacznie szybsze do przesłania. Kopie zapasowe byłyby szybkie bez kompresji (w zależności od podsystemu pamięci), ale myśląc o korzyściach z kompresji, zwykle włączam ją w moim środowisku.
Kin Shah,
@Kin, nie sądzę, że m-transakcje są tutaj rozwiązaniem, ponieważ: A) Nie wydają się zaprojektowane do pracy na innym serwerze niż ten, na którym wykonano kopie zapasowe. Niektórzy obejdą ten problem, przywracając wiersze do historii znaków, ale nie mogę użyć nieudokumentowanego zachowania. B) Nie mogę zmienić kodu mojej aplikacji, aby dodać obsługę m-transakcji. Musiałbym zacząć specjalne m-transakcje z moich skryptów kopii zapasowych i jeśli dobrze zrozumiałem , wstrzymują wszystkie nowsze transakcje, dopóki nie zostaną zatwierdzone te starsze niż znak. Wpływa to na dostępność aplikacji, co stanowi poważny problem.
bogdan
3
Robi się trochę niejasne, o co tu właściwie pytasz. Najpierw masz środowisko do pełnego odzyskiwania, a następnie masz kilku klientów z własną strategią tworzenia kopii zapasowych. Nie chcesz zmieniać warstwy aplikacji, nie chcesz wykonywać żadnych kopii zapasowych SQL i nie chcesz replikacji na poziomie bloku, ale oczekujesz rozwiązania. Wymagania ciągle zmieniają wszystko, co wiąże się z faktyczną „pracą”. Niestety nie mamy strony magic.stackexchange.com.
Tom V - spróbuj topanswers.xyz
7

Jeśli wykonujesz pełne kopie zapasowe, a także kopie zapasowe dziennika transakcji (i powinieneś, jeśli uważasz, że te dane są ważne), możesz po prostu skopiować kopie zapasowe i kopie zapasowe dziennika transakcji do systemu testowego i wykonać przywracanie w określonym momencie, aby przywrócić bazy danych + - w tym samym czasie.

W zależności od tego, czy wszystkie bazy danych znajdują się na tym samym komputerze z programem SQL Server lub od tego, jak dobrze synchronizowane są zegary serwerów, powinieneś być w stanie dopasować cel „desynchronizacji przez kilka sekund”.

Może to być trochę rozwiązanie wspomagające zespół, ale spełniałoby wymagania i było dość proste i niedrogie.

Jeśli nie masz pełnych kopii zapasowych i kopii zapasowych dziennika transakcji z ważnych baz danych (które są w trakcie pełnego odzyskiwania), naprawdę musisz zmienić strategię tworzenia kopii zapasowych. Migawki na poziomie SAN naprawdę mają sens, aby baza danych znajdowała się w trybie pełnego odzyskiwania, ponieważ i tak nie będzie można przywrócić punktu w czasie.

Przeczytaj, co ma do powiedzenia MrDenny

Tom V - spróbuj topanswers.xyz
źródło
1

Czy w okolicznościach, które wskazałeś, czy przeglądałeś kopie zapasowe VSS za pośrednictwem dostawcy VSS, który jest firmą zewnętrzną lub Microsoft? Możesz wykonać kopię zapasową TYLKO KOPIOWANĄ, która nie zepsuje łańcucha odzyskiwania produkcji, i powinieneś stworzyć kopię zapasową wszystkich baz danych, które możesz odzyskać gdzie indziej z rozsądnymi marginesami. Należy pamiętać, że kopia zapasowa VSS ma takie same mechanizmy i awarie jak migawki bazy danych, ponieważ bardzo aktywna baza danych może powodować problem z miejscem na dysku z powodu rzadkich plików. Spójrz na zasoby TechNet w usłudze SQL Writer tutaj i kopie zapasowe VSS programu SQL Server tutaj .

Aby to zrobić za pomocą narzędzia Kopia zapasowa systemu Windows Server, należy wykonać kroki kreatora dotyczące ręcznej kopii zapasowej, upewniając się, że wybrano kopię zapasową VSS w niestandardowych ustawieniach konfiguracji w Ustawieniach VSS. Dzięki temu kopia zapasowa systemu Windows Server nie będzie kolidować z innymi kopiami zapasowymi wykonanymi na serwerze. Aby uzyskać szczegółowe informacje, zobacz Dokumentacja kopii zapasowej systemu Windows Server .

Travis Page
źródło
Rozważałem VSS jako alternatywę dla robienia migawek dysków na poziomie hiperwizora / SAN. Te przypadki umieściłem w swoim rozwiązaniu (opublikowanym teraz jako dodatkowa odpowiedź) dla klientów korzystających z prostego odzyskiwania.
bogdan
1

Głosuję na @ Kin jako odpowiedź, ponieważ była to pierwsza odpowiedź na zadane pytanie. W końcu znalazłem dodatkową odpowiedź i opiszę ją poniżej.

W przypadku klientów korzystających z prostego modelu odzyskiwania potrzebuję kopii plików MDF i LDF wyodrębnionych z tymczasowej migawki dysku wykonanej w T0 na poziomie hiperwizora lub SAN. Mogę ich użyć do odzyskania dbs w stanie z T0.

W przypadku klientów korzystających z pełnego modelu odzyskiwania wymagam:

  • Kopie z GŁÓWNEGO procesu tworzenia kopii zapasowej najnowszej pełnej kopii zapasowej wykonanej przed T0 + minimalny łańcuch kolejnych kopii dziennika transakcji obejmujący T0. Następnie mogę wykonać powrót do punktu czasowego do T0.

  • Dostęp do wykonywania własnych COPY_ONLYkopii zapasowych. Zacznę je wszystkie równolegle w T0, co nie powinno zająć więcej niż kilka sekund i było moim głównym problemem nr 1. Następnie, podczas przywracania, wykonam przywracanie do FirstLSN z każdej kopii zapasowej. Piękno tego polega na tym, że wcale nie wymagam ode mnie interakcji z GŁÓWNYM procesem tworzenia kopii zapasowych, co było moim drugim problemem, mogą nawet obciąć dzienniki podczas pracy moich COPY_ONLYkopii zapasowych bez wpływu na ich spójność.

bogdan
źródło
0

Robię to kilka razy w roku dla kontroli jakości i innych środowisk, które są kopiami produkcji. W przypadku przywracania tryb pełnego odzyskiwania jest naprawdę konieczny, a przywracanie do punktu w czasie działa dobrze. Istnieje również wiele replikacji i rzadko zdarza się, że po przywróceniu do określonego momentu występują błędy „nie znaleziono wiersza”. Używamy również metody klonowania / tworzenia migawek SAN dla odległej geograficznie kopii produkcji, co również dobrze sprawdza się w przypadku synchronizacji baz danych.

Głaskanie pod brodę
źródło