To jest mój pierwszy post DBA.SE, więc proszę o poinformowanie mnie o wszelkich błędach, dzięki!
Jestem nowym DBA (nie informatykiem, po prostu nikt inny w firmie tego nie robi), więc im bardziej podstawowe wyjaśnienie, tym lepiej. Czytałem o strategiach tworzenia kopii zapasowych baz danych (lub, jak nauczyłem się je nazywać, „strategiach przywracania”). Rozumiem, co robią kopie zapasowe dziennika pełnego, różnicowego i dziennika transakcji, ale chcę wiedzieć, dlaczego różnicowa kopia zapasowa może być oparta tylko na najnowszej pełnej kopii zapasowej.
Jeśli różnicowa kopia zapasowa to wszystko, co zmieniło się od czasu ostatniej pełnej kopii zapasowej, to dlaczego różnicowanie nie może być oparte na żadnej wybranej przeze mnie kopii zapasowej? Aby być bardziej zrozumiałym, pytam o określenie bazy podczas tworzenia kopii zapasowej , a nie podczas przywracania. Zakładam, że podczas przywracania wybrałbyś prawidłową bazę i odpowiedni mechanizm różnicowy, aby wykonać przywracanie (nie używając mechanizmu różnicowego wykonanego z bazy B do przywracania z bazy A).
Jaki jest powód, który uniemożliwia tę funkcjonalność? Myślę, że musi być jakiś powód, po prostu nie wiem co to jest.
Uwaga: Rozumiem, że nie można określić podstawy, ale moje pytanie brzmi: dlaczego nie ? (Nie jestem również zainteresowany dyskusją na temat „dlaczego miałbyś?”)
Analogia
Oto analogia do tego, jak rozumiem różnicową kopię zapasową:
Mam plik Excel z niektórymi danymi w komórkach.
Pierwszego dnia robię kopię tego pliku i przechowuję go w innym miejscu („pełna kopia zapasowa”).
W dniu 2 patrzę na plik i porównuję go z kopią zapasową, którą wykonałem w dniu 1, i odnotowuję wszystkie zmienione komórki oraz ich nowe wartości („różnicowa kopia zapasowa”). Nie odnotowuję każdej zmiany dokonanej w komórce, a jedynie jej ostatecznej wartości. Gdyby komórka A1 zaczynała się jako „Alfred”, zmieniła się na „Betty”, „Charlie”, a następnie „Dave”, chciałbym tylko zauważyć, że „A1 to teraz Dave”.
W dniu 3 ponownie porównuję bieżący plik z plikiem kopii zapasowej i odnotowuję zmiany (kolejna „różnicowa kopia zapasowa” z tą samą bazą co dzień 2). Ponownie, odnotowując tylko końcowe wartości na komórkę w obserwowanym czasie, nie wszystkie wartości, które komórka występowała przez cały dzień.
W dniu 4 ponownie porównuję i ponownie odnotowuję zmiany. Kontynuując z komórką A1, teraz mówi „Sarah”, nawet jeśli w ciągu dnia było 10 innych imion, a wszystko, co zauważam, to „Teraz A1 to Sarah”.
Piątego dnia mój plik się popsuł; więc patrzę na kopię zapasową, którą wykonałem w dniu 1, a następnie w stanach końcowych zanotowałem w dniu 4, i stosuję zmiany zanotowane w kopii zapasowej, a teraz mam plik „przywrócony” do stanu z dnia 4 Tak więc patrzę na kopię zapasową wykonaną pierwszego dnia, widzę, że w czwartym dniu komórka A1 zakończyła się jako „Sarah” i zmieniam komórkę zapasową A1 na „Sarah”.
Dlaczego miałoby to mieć znaczenie, jeśli wykonałem kolejną kopię zapasową („pełną”) pliku w dniu 2? Dlaczego nadal nie byłoby możliwe porównanie (odczytanie, „różnicowa kopia zapasowa”) pliku w dniu 3 lub 4 z kopią wykonaną w dniu 1? Jak rozumiem, SQL Server wymagałby ode mnie porównania (podczas wykonywania innej różnicowej kopii zapasowej) z pełną kopią zapasową wykonaną w dniu 2 (jeśli taka została utworzona) - żadna inna opcja.
źródło
COPY_ONLY
- Jeśli OPCOPY_ONLY
miałby wykonać regularną pełną kopię zapasową w dniu 1 i pełną kopię w dniu 2, to jakie problemy byłyby spowodowane przez zastosowanie późniejszej różnicy z tej samej bazy do kopii zapasowej dnia 2?Funkcja, którą chcesz, może istnieć w zasadzie. Nie byłoby wydajne z obecnymi strukturami bazy danych (patrz odpowiedź Maxa Vernona). SQL Server musiałby albo utrzymywać zestaw map różnic lub porównać bieżącą zawartość bazy danych z pełną kopią zapasową, którą określisz jako bazę.
Istnieją aplikacje, które deduplikują duże pliki. Możesz wykonać dwie pełne kopie zapasowe i tylko zmienione dane zostaną faktycznie zapisane. To jest jak różnica z niestandardową bazą.
exdupe
na przykład może to zrobić.Zaletą jest to, że w ogóle działa z dowolnym zestawem plików kopii zapasowych. W rzeczywistości, począwszy od trzeciego pełnego pliku kopii zapasowej, zapłacisz tylko za przyrostowe (nie różnicowe) wykorzystanie miejsca. Wykorzystanie miejsca jest różnicą w stosunku do poprzedniego pliku kopii zapasowej (nie pierwszego). Pamięć do deduplikacji działa podobnie.
Dlaczego opisywana funkcja nie istnieje? Każda funkcja zużywa budżet, przez co inne funkcje nie są obecne. Ten najwyraźniej nie zrobił wystarczająco daleko na liście priorytetów. Nie jestem pewien, do czego by to było dobre. Wygląda na dość ezoteryczny wymóg korzystania z niestandardowych baz.
źródło
Nie myl kopii zapasowych dziennika transakcji z różnicowymi kopiami zapasowymi, mają one różne cele! To, co nazywacie „różnicową kopią zapasową”, w której „zauważacie wszystkie zmiany w komórkach”, jest w rzeczywistości a dziennikiem transakcji .
Różnicowa kopia zapasowa ma na celu utrzymanie małego rozmiaru wynikowego pliku kopii zapasowej tylko poprzez rejestrowanie informacji, które zmieniły się od czasu ostatniej pełnej kopii zapasowej, oraz utrzymanie czasu przywracania w ramach celu czasu odzyskiwania (RTO).
Kopia zapasowa dziennika transakcji ma na celu umożliwienie odtworzenia transakcji w dowolnym momencie - często, ale niekoniecznie, w celu „najnowszego, co się wydarzy”.
To, o czym mówisz, jest w rzeczywistości możliwe - ale musisz przywrócić pełną kopię zapasową, a następnie przywrócić dzienniki transakcji.
Jeśli masz pełną kopię zapasową z pierwszego dnia i wszystkie kopie zapasowe dziennika transakcji od 1 do 5 dnia, nic nie stoi na przeszkodzie, aby przywrócić kopię zapasową z pierwszego dnia i odtworzyć dziennik transakcji, dopóki nie uzyskasz danych w takim stanie, jak w dniu 4. można również rozpocząć od kopii zapasowej z 2 dnia, którą przywrócenie byłoby nieco szybsze, ponieważ odtwarzano by mniej transakcji. Możesz także przywrócić pełną kopię zapasową pierwszego dnia, różnicową kopię zapasową trzeciego dnia, a następnie przywrócić dzienniki transakcji do 4 dnia.
Edycja: OK, edytowana przez ciebie analogia ma trochę więcej sensu. Odpowiedź brzmi: „ponieważ możesz już osiągnąć to, co chcesz dzięki kopiom zapasowym dziennika transakcji”. Różnicowa kopia zapasowa jest jedynie tanim i wygodnym sposobem rejestrowania całej gamy aktywności dziennika transakcji. Nie oferuje żadnej szczegółowości odzyskiwania danych, której nie oferuje kopia zapasowa dziennika transakcji. Jest tylko tyle funkcji, które oferują „zwykłą wygodę”, które sprawiają, że jest to produkt.
źródło
Analogia do Excela polega na porównywaniu jabłek i pomarańczy. Dlaczego ? Excel nie jest bazą danych, ponieważ nie ma integralności danych. Excel jest ładną aplikacją do arkuszy kalkulacyjnych i może stanowić uzupełnienie bazy danych.
SQL Server to system relacyjnych baz danych, który pozwala przechowywać wszystkie dane i zapewnia mechanizm ich wyszukiwania. Ważną częścią jest „relacyjny”, ponieważ ważna jest relacja danych wraz z integralnością danych (właściwości ACID).
Podstawy:
Dane w bazie danych są zorganizowane w logiczne komponenty (tabele, widoki, procy, wyzwalacze itp.), Które są widoczne dla użytkownika. Baza danych jest co najmniej fizycznie implementowana jako dwa (dane i plik dziennika) lub więcej (wtórny plik danych) na dysku.
W oparciu o twoją analogię do programu Excel, robisz to, co zmieniłeś w stosunku do poprzedniej. Dotyczy to wszystkich zatwierdzonych transakcji z dziennika transakcji
with STOP AT
(uwaga: w dniu 5 plik jest pomieszany, a ty zatrzymujesz się w dniu 4)W każdej sekcji 4 GB (zwanej interwałem GAM) każdego pliku danych znajduje się specjalna strona bazy danych zwana różnicową bitmapą, która śledzi, które części (zwane zakresami) tej sekcji 4 GB zmieniły się od czasu ostatniej pełnej kopii zapasowej, wskazując dane, które uległy zmianie lub został dodany do bazy danych.
Różnicowa kopia zapasowa skanuje te mapy bitowe i tworzy jedynie kopie plików danych, które są oznaczone jako zmienione. Mapy bitowe są resetowane przez następną pełną kopię zapasową (stąd różnicowa kopia zapasowa może być oparta tylko na najnowszej pełnej kopii zapasowej) , dzięki czemu można zauważyć, że wraz ze wzrostem liczby zmian w bazie danych, więcej zostanie zaznaczonych w różnicowych mapach bitowych a kolejne różnicowe kopie zapasowe będą coraz większe.
Możesz nawet użyć tego skryptu, aby dowiedzieć się, ile bazy danych zmieniło się od czasu ostatniej pełnej kopii zapasowej? .
Informacje o bazie różnicowej są przechowywane w
master
bazie danych -sys.database_file
lub (sys.master_files
- przydatne, gdy baza danych jest tylko do odczytu lub offline).Istnieją 3 ważne kolumny, które przechowują informacje związane z bazą różnicową .
differential_base_lsn
to podstawa różnicowych kopii zapasowych. Zakresy danych, które zostaną zmienione po,differential_base_lsn
zostaną uwzględnione w różnicowej kopii zapasowej.differential_base_guid
to unikalny identyfikator podstawowej kopii zapasowej, na której opiera się różnicowa kopia zapasowa.differential_base_time
to czas, który odpowiadadifferential_base_lsn
Różnicowa kopia zapasowa jest przydatna, aby przyspieszyć RTO (czas odzyskiwania celu = czas potrzebny do odzyskania bazy danych), w przeciwieństwie do częstszych pełnych kopii zapasowych, które będą problemem dla dużych baz danych lub przywracania dużej liczby kopii dzienników transakcji, ponieważ mogą one wzrosnąć z biegiem czasu.
Uwaga: Pełna kopia zapasowa COPY_ONLY nie resetuje bazy różnicowej, więc kopia zapasowa COPY_ONLY nie może służyć jako baza różnicowa.
Bibliografia :
źródło