Najmniejsza możliwa kopia zapasowa… z SQL Server

37

Codziennie wysyłamy nasze kopie zapasowe SQL Server w sieci WAN. Musimy zminimalizować rozmiar tych kopii zapasowych, aby nie trwało to wiecznie.

Nie przeszkadza nam, że proces tworzenia kopii zapasowej trwa nieco dłużej; w tej chwili musimy przenieść 30 gigabitowych kopii zapasowych w sieci WAN, co zajmuje ponad 10 godzin.

Istnieją 2 opcje, aby uzyskać mniejsze codzienne kopie zapasowe.

  1. Przesyłanie kłód, co oznaczałoby, że musielibyśmy zrestrukturyzować proces DR.
  2. Usuń informacje z bazy danych i przebuduj po drugiej stronie (upuść indeksy klastrowane, spakuj indeksy po 100% - przebuduj po drugiej stronie)

Oba wymagałyby sporej ilości pracy z naszej strony. Używamy SQL Server 2008 pro, wszystkie kopie zapasowe są skompresowane.

Czy są jakieś komercyjne produkty, które mogą dać nam podobny rozmiar kopii zapasowej do opcji (2)?

Czy istnieje kompleksowy skrypt, który pozwoli nam osiągnąć (2)? (obsługa widoków indeksowanych, indeksów filtrowanych, kluczy obcych itp.)

Sam Saffron
źródło
2
Jaka jest obecnie twoja szczegółowość i częstotliwość tworzenia kopii zapasowych (regularne kopie zapasowe dziennika? Codziennie pełne?) Czy korzystasz z wersji Enterprise lub standardowej? Aktualizacja: czy jesteś małą firmą DR w wynajętej witrynie, czy dużą firmą ze stałą witryną DR? Jeśli pierwszy, to czy masz serwer plików lub SQL Server działający poza witryną
gbn
@ gbn, musimy optymalizować do codziennego pełnego, korzystamy z przedsiębiorstwa, DR jest lokalna, a ludzie zabierają rzeczy poza miejsce pracy. Małe kopie zapasowe są wymagane dla deweloperów i mamy drugie miejsce poza nami. Uwaga ... deweloperzy są poza siedzibą, w innych krajach o ograniczonej przepustowości potrzebujemy minimalnego rozmiaru transferu z serwerów w Nowym Jorku do (na przykład) Australii. Synchronizujemy raz na kilka miesięcy.
Sam Saffron,
1
Dla każdego, kto nie zdaje sobie z tego sprawy, dotyczy to właściwego zespołu SO;)
jcolebrand
1
@Sam Saffron: proszę o informację zwrotną na temat tego, czy przyjęłaś coś w rodzaju mojej sugestii?
gbn
@ gbn ... wciąż decydując o tym, co robić, myślę, że "zwykłe" zadania z powrotem do pracy w Oregonie są wykonalne dzięki zaproponowanemu przez Ciebie rozwiązaniu. Jednak problem „Sam musi pobierać SO db raz na miesiąc, jest nadal bardzo bolesny, ponieważ muszę przenieść 22 koncerty do Australii - kiedy rzeczywistość jest taka, że„ prawdziwa ”informacja mogłaby z łatwością zmieścić się w 10 koncertach.”
Sam Saffron,

Odpowiedzi:

22

Pierwsza myśl na podstawie komentarzy ...

Używaj różnicowych kopii zapasowych co powiedzmy co 6 godzin, aby zmniejszyć rozmiar / czas tworzenia kopii zapasowej + FTP. Następnie zmniejsz pełną kopię zapasową + FTP tylko do weekendów. Pozwala to uniknąć złożoności wysyłania kłód, jest łatwe do zrobienia i dodaje tylko niewielką złożoność DR

Wydaje mi się, że różnicowe kopie zapasowe są pomijane ... Sugerowałem ich użycie wcześniej:

Edycja: po komentarzu jcolebranda postaram się wyjaśnić więcej

Różnicowa kopia zapasowa przyjmuje tylko te strony, które uległy zmianie. Poza utrzymaniem indeksu (co może mieć wpływ na dużą część bazy danych), tylko kilka% stron zmieni się w ciągu dnia. Tak więc różnicowa kopia zapasowa jest znacznie mniejsza niż pełna kopia zapasowa przed jakąkolwiek kompresją.

Jeśli masz pełną kopię zapasową, powiedzmy co tydzień, możesz robić codzienne różnice i wysyłać je poza miejsce. Codzienna pełna kopia zapasowa z różnicami nadal będzie wymagać obu plików poza witryną.

To powinno rozwiązać problem szybkiego pobierania danych z A do B, C i D.

Prawdopodobnie musisz przywrócić zarówno pełny, jak i najnowszy plik różnicowy, aby uzyskać najnowsze dane, ale możesz to obejść za pomocą NORECOVERY i pliku STANDBY (nie próbowałem tego z przywracaniem różnic od lat, odkąd byłem ostatni w czystej DBA praca).

Dodatkową zaletą jest to, że kopie zapasowe różnic nie są powiązane z bieżącymi kopiami zapasowymi dziennika, dzięki czemu można oddzielić wszelkie wymagania dotyczące wysokiej dostępności / DR od wymogu „pobierz dane do małp kodowych”.

Widzę pewne problemy, jeśli masz codzienne pełne kopie zapasowe według zasad lub inspekcji, ale przywracanie różnic można zastosować przed przywróceniem dowolnego dziennika, aby skrócić czas odzyskiwania. W przeciwieństwie do kopii zapasowych, przywracanie różnic i logów współdziała.

Mam nadzieję, że omówiłem większość baz ...

gbn
źródło
Hyperbac to bardzo inteligentne narzędzie do kompresji, które pozwala kompresować kopie zapasowe i pozostawiać wszystkie plany konserwacji i zadania bez zmian, ponieważ obsługuje pliki na poziomie systemu operacyjnego. Jeśli nie chcą niczego zmieniać, ale po prostu dodać nowe narzędzie do pudełka, zdecydowanie powinni spróbować. Wiem, że go używałem i podobało mi się w SQL 2005. Ale dla większej kompresji powinni nadal wykonywać pracę fizyczną ...
Marian
@Marian Jestem ... całkiem pewien, że Brent O jest tylko potrzebującym konsultantem.
jcolebrand
@Marian: istnieje limit kompresji, a więcej kompresji = więcej procesora / czasu. Najmniejszą kopią zapasową będzie ta z najmniejszą wartością wejściową = różnicą, niezależnie od narzędzia / formatu kompresji. Link do czasu / stosunku Jeden : możesz dać ekstremalną kompresję, ale trwa to dłużej, a dla skompresowanego pliku 30 GB może to potrwać dłużej niż FTP ...
gbn
Zgadzam się z tobą, chodzi o to, że narzędzia komercyjne mają lepsze współczynniki kompresji niż MS i można je konfigurować (według liczby procesorów przydzielonych do operacji), oferują szyfrowanie ... i inne funkcje. Niekoniecznie ich chwalę (nie są bardzo tanie), po prostu powiedziałem, że niektóre z nich mogą być używane w połączeniu z bieżącymi kopiami zapasowymi SQL Server (pełne, różnicowe, log) bez zmiany środowiska, które wydają się chłopaki potrzebuję / chcę. @jcolebrand: rozumiem, dziękuję!
Marian
13

Istnieją komercyjne produkty, które mogą pomóc lepiej skompresować kopie zapasowe niż natywna kompresja z 2008 roku. Przykładami są RedGate Backup , Hyperbac , Idera SQL Backup , Litespeed Backup .

Pochodzą one z dodatkowym kosztem wysokich procesorów i typów plików, które trzeba będzie obsługiwać za pomocą narzędzi spoza MS dostarczanych. Z wyjątkiem kompresji Hyperbac (obecnie przejętej przez Redgate), która obsługuje pliki w sposób przezroczysty i umożliwia tworzenie plików zgodnych z formatem zip (a także nie wymaga narzędzi innych firm).

Ale nie ma narzędzia, które zaoferuje ci plik o rozmiarze, który uzyskasz wykonując ręczne czyszczenie. Zapoznaj się z artykułem Brenta Ozara: Jak naprawdę kompresować kopie zapasowe SQL Server , doradzi on wykonanie tych samych kroków, które masz w punkcie nie. 2)

Marian
źródło
RedGate FTW !!!!
Hogan
@Hogan: jeśli nie możesz ich pokonać, kup je. To bardzo dobry przykład :-). W każdym razie oba produkty, które są teraz częścią Redgate i obsługują kompresję bazy danych, mogą z powodzeniem współistnieć.
Marian
12

Pytanie 1: Czy istnieje komercyjny produkt do tworzenia kopii zapasowych, który da podobny rozmiar kopii zapasowej do usuwania zbędnych danych, takich jak indeksy z bazy danych?

Nie. Istnieje wiele produktów do kompresji kopii zapasowych (Quest LiteSpeed, Red Gate SQL Backup, Idera SQLSafe, Hyperbac itp.), Ale wszystkie z nich działają po prostu kompresując dane wyjściowe z regularnego procesu tworzenia kopii zapasowej programu SQL Server. Niektóre z nich robią to w trudny sposób - HyperBac i opcja silnika LiteSpeed ​​to sterowniki filtrów systemu plików, co oznacza, że ​​przechwytują dane wyjściowe w drodze na dysk - ale końcowym rezultatem wszystkich tych produktów jest po prostu skompresowana kopia zapasowa.

Pytanie 2. Czy istnieje kompleksowy skrypt do zrzucenia wszystkich tych dodatkowych danych?

Z biegiem czasu, ponieważ przechowujesz więcej historii w bazie danych (4, 5, 8, 10 lat), nie będziesz chciał wyrywać wszystkich danych indeksu i odbudowywać go po drugiej stronie sieci WAN. Zamiast tego chcesz po prostu przesłać zmodyfikowane dane i tam właśnie przychodzi wysyłka dziennika.

Nie powinieneś tego robić.

Ale jeśli naprawdę chcesz to zrobić (i nie, nie pomogę ci), możesz to zrobić za pomocą kopii zapasowych grup plików. Skonfiguruj grupy plików bazy danych w następujący sposób:

  • Podstawowa grupa plików (wymagana, ale pozostaw pustą)
  • Grupa plików ClusteredIndex (umieść tutaj swoje indeksy klastrowe)
  • Grupa plików ExtraneousCrap (umieść tutaj wszystko inne)

Zacznij tworzyć skompresowane kopie zapasowe tylko dwóch pierwszych grup plików i skopiuj te mniejsze na serwer DR. Można użyć funkcji tworzenia kopii zapasowych i przywracania grup plików w programie SQL Server 2008, aby przywrócić grupy plików Podstawowe i ClusteredIndex, a następnie będą one natychmiast dostępne do tworzenia zapytań. Tak naprawdę nie będą działały, dopóki nie dostaniesz grupy plików ExtraneousCrap online, ale jest też przykra sztuczka - w książce MVP Deep Dives znajduje się rozdział na temat edycji tabel systemowych, aby utworzyć grupę plików ExtraneousCrap i wszystkie inne. powiązanych indeksów znikają. Ta sztuczka jest niebezpieczna, całkowicie nieobsługiwana i to naprawdę zły pomysł - ale hej, prosiłeś o nią.

Brent Ozar
źródło
10

Polecam przejście na coś takiego jak wysyłanie kłód. Zasadniczo, jeśli masz możliwość wysłania 30 koncertów w ciągu 24 godzin w porównaniu z wysyłką na koniec dnia w krótszym okresie czasu, szybkość sieci nie będzie dla ciebie problemem.

Twoi twórcy w wolnej sieci będą mogli również pobierać pliki o dogodniejszych rozmiarach, za pośrednictwem FTP lub dowolnego innego procesu, który masz. Mogą także skonfigurować zadania, które będą pobierane przez cały dzień.

Oprócz kompresji serwera sql można zaimplementować narzędzie innej firmy, które ma wyższą kompresję, np. Litespeed lub redgate sqlbackup.

Ponadto po stronie sieci można zainstalować urządzenia sieciowe, które mogą zoptymalizować przepustowość w witrynie DR. W przeszłości z powodzeniem korzystałem z Riverbed Appliance, aby uzyskać 90 GB kopii zapasowej z FL do VA w mniej niż 3 godziny.

Inną opcją byłoby tworzenie kopii zapasowych określonych grup plików, z wyłączeniem indeksów itp., Ale nadal utkniesz w indeksach klastrowych iw zależności od struktury db możesz uzyskać więcej kosztów / problemów niż czerpać korzyści z tego podejścia.

Dzięki

johndacostaa
źródło
7

Jeśli masz na to pieniądze, a architektura na to pozwala, sprawdź coś w rodzaju technologii Riverbed (http://www.riverbed.com/us/). Takie urządzenie w połączeniu ze scenariuszem replikacji lub wysyłki dziennika może być najlepszym rozwiązaniem.

Jeśli nie, to kilka pytań. Jeśli musisz odświeżać co kilka miesięcy, dlaczego masz obawy związane z przepustowością? Jedyny raz, kiedy musisz się martwić o przeniesienie, jest uzyskanie pełnej kopii zapasowej, aby wykonać przywracanie lokalnie, czy też się mylę, że to twoja konfiguracja?

Inną możliwością jest zamiast martwić się o dostarczenie im wszystkich tych danych, skonfigurowanie środowiska Citrix i przekazanie ich zdalnie. Dzięki Citrix masz minimalne wymagania w zakresie przepustowości między klientem / hostem i możesz robić to, czego potrzebujesz lokalnie, i nie martw się o to, że musisz replikować te zmiany gdzie indziej. Tylko moje 0,02 $

SQLChicken
źródło
Czy potrafisz już to wyjaśnić? Wiem, że jest to właściwe dla zespołu StackExchange, więc jestem pewien, że pokochaliby bardziej niezależną instrukcję;)
jcolebrand
Haha, jest tu wiele do rozważenia. Który punkt chciałbyś dokładnie wyjaśnić?
SQLChicken
Miałem na myśli replikację / wysyłanie dziennika, ale było to dwa tygodnie temu, więc wątpię, aby teraz było tak samo ważne. Po prostu ponownie przeczytałem i zobaczyłem część dotyczącą Citrix, i mogłem wam wtedy (jak teraz) powiedzieć, że tego nie robią. Po prostu robią rozwój lokalny przy użyciu infrastruktury DVCS i chcą tylko danych do testowania / zabawy z / potwierdzenia. Być może także dla zrzutów danych.
jcolebrand
Gotcha Następnie, jak już powiedzieli inni, zewnętrzni dostawcy, tacy jak Redgate i Quest, mają bardzo dobre narzędzia do kompresji kopii zapasowych, które pomogą Ci zaspokoić ich potrzeby. Innym potencjalnym rozwiązaniem jest SQL Azure. Obecnie limit wielkości bazy danych wynosi 50 GB, ale zniesiono opłaty za ładowanie danych, więc może to być opłacalne rozwiązanie.
SQLChicken
4

Użyłbym replikacji transakcyjnej SQL. Twoje początkowe ładowanie zajęłoby trochę czasu, ale kiedy już zaczniesz działać, możesz przesłać tylko wybrane informacje. Na przykład, jeśli masz tylko 3 lub 4 tabele, które są aktualizowane, możesz wysłać tylko te 3 lub 4 tabele.

Możesz także wybrać, co chcesz wysłać. FK, indeksy klastrowe / nieklastrowane, schematy partycji tabel, przechowywane procy i TONS więcej.

http://www.sql-server-performance.com/2010/transactional-replication-2008-r2/

Jeśli nie jest to możliwe, możesz skorzystać z REDGATE SQL BACKUP - http://www.red-gate.com/products/dba/sql-backup/ . Użyłem tego wcześniej i uzyskałem poziomy kompresji do 90%. Dużo mniejszy niż SQL.

SqlSandwiches
źródło