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ć.
Odpowiedzi:
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ą):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 bezCOPY_ONLY
zerwania łańcucha dziennika. Ze względów bezpieczeństwa można ograniczyć użytkownikom używanie tylkoCOPY_ONLY
kopii zapasowych .Oznaczone transakcje będą działać w Twojej sytuacji. Jedyne, co należy robić równoległe kopie zapasowe, to dla
STRIPE
nich, ale w końcu upewniasz się, że nie stracisz pasków kopii zapasowej. Aby je przyspieszyć, możesz grać zBUFFERCOUNT
iMAXTRANSFERSIZE
.Należy użyć kompresji kopii zapasowej, a także włączyć natychmiastową inicjalizację pliku .
Odnosić się do
źródło
not using
kompresja kopii zapasowych może jeszcze bardziej przyspieszyć tworzenie kopii zapasowych ... jeśli masz na to miejsce.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
źródło
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 .
źródło
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_ONLY
kopii 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 moichCOPY_ONLY
kopii zapasowych bez wpływu na ich spójność.źródło
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.
źródło