Co dzieje się podczas tworzenia kopii zapasowej na żywo programu SQL Server?

18

Niektórzy z moich współpracowników byli zaskoczeni, gdy powiedziałem im, że mogę wykonać kopię zapasową bazy danych SQL Server, gdy jest ona uruchomiona, i zastanawiałem się, jak to możliwe. Wiem, że SQL Server jest w stanie wykonać kopię zapasową bazy danych, gdy jest ona nadal online, ale nie jestem pewien, jak wyjaśnić, dlaczego jest to możliwe. Moje pytanie brzmi: jaki to ma wpływ na bazę danych?

Jeśli dane zostaną zmodyfikowane (przez wstawienie, aktualizację lub usunięcie) podczas wykonywania kopii zapasowej, czy kopia zapasowa będzie zawierać te zmiany, czy też zostanie później dodana do bazy danych?

Zakładam, że plik dziennika odgrywa tutaj ważną rolę, ale nie jestem pewien, jak to zrobić.

edycja: Dla przypomnienia, moja sprawa dotyczy tworzenia kopii zapasowych baz danych przy użyciu SQL Server Agent i skutków modyfikacji baz danych podczas tego procesu.

Sean Howat
źródło

Odpowiedzi:

24

Pełna kopia zapasowa zawiera zarówno dane, jak i dziennik. W przypadku danych po prostu kopiuje każdą stronę bazy danych do kopii zapasowej, tak jak w chwili jej odczytu. Następnie dołącza do nośnika zapasowego cały „odpowiedni” dziennik. Obejmuje to co najmniej cały dziennik między LSN na początku operacji tworzenia kopii zapasowej a LSN na końcu operacji tworzenia kopii zapasowej. W rzeczywistości zwykle jest więcej dzienników, ponieważ muszą one zawierać wszystkie aktywne transakcje na początku tworzenia kopii zapasowej i dzienniki potrzebne do replikacji. Zobacz Obalanie kilku mitów dotyczących pełnych kopii zapasowych baz danych .

Po przywróceniu bazy danych wszystkie strony danych są kopiowane do plików bazy danych, a następnie wszystkie strony dziennika są kopiowane do plików dziennika. Baza danych jest obecnie niespójna, ponieważ zawiera obrazy stron danych, które mogą nie być ze sobą zsynchronizowane. Ale teraz uruchamiane jest normalne odzyskiwanie . Ponieważ dziennik zawiera cały dziennik podczas tworzenia kopii zapasowej, pod koniec odzyskiwania baza danych jest spójna.

Remus Rusanu
źródło
1
Świetny post i link pomogły dać dobry przykład. Dzięki.
Sean Howat,
Bardzo zwięzłe. Dobra robota!
allen1
2

Podczas tworzenia kopii zapasowej zostanie utworzona migawka dla bazy danych, a dane zostaną odczytane w celu wykonania kopii zapasowej z tej migawki. Rzeczywiste operacje bazy danych na żywo nie wpłyną na operację tworzenia kopii zapasowej.

Aravind
źródło
1

Nie można go po prostu skopiować, ponieważ mogą istnieć zmiany w połowie kopii bazy danych, jak wspomniano w pytaniu.

Należy to zrobić z agentami, którzy znają funkcjonalność bazy danych, a następnie wykonują „migawkę” za pomocą funkcji systemu operacyjnego lub mogą użyć narzędzia do zrzucenia bazy danych w bezpieczny stan (np. Mysqldump, jeśli używa mysql).

W przeciwnym razie otrzymasz kopię zapasową, która może zostać uszkodzona i nie poznasz jej, dopóki jej nie przywrócisz. Myślę, że Joel i Jeff ostatnio rozmawiali o tym trochę w ostatnim podcastu StackOverflow.

I masz rację, że plik dziennika jest ważny. Jeśli plik dziennika / dziennika nie jest zsynchronizowany z rzeczywistymi danymi, przywrócenie plików spowoduje uszkodzenie.

Sprowadza się do kopii zapasowej wykonanej przy użyciu bezpiecznego stanu bazy danych, albo za pośrednictwem agenta obsługującego bazę danych, albo aplikacji migawkowej, albo aplikacji, która wie, jak prawidłowo podłączyć bazę danych do upuszczania danych bez ingerowania w aktualizacje podczas zrzutu danych, a następnie tworzenia kopii zapasowej plik wynikowy.

Bart Silverstrim
źródło
To jest bardziej ogólna odpowiedź, ale zapomniałem podać, że na początku pracowałem za pośrednictwem SQL Server Agent. Mimo tej metody podał kilka dobrych szczegółów na temat tego, co może się dziać podczas tego procesu, więc i tak pomógł! Dzięki.
Sean Howat,
0

Jest tak wiele sposobów, aby to zrobić (ogólnie mówiąc, nie mam pojęcia, jak normalnie robi to MSSQL), np. Po prostu zrzucając bazę danych do pliku, jednocześnie dodając wszelkie zmiany do pliku dziennika, który jest zatwierdzany po zakończeniu zrzutu - w celu użycia migawki specyficznej dla systemu plików funkcje takie jak VSS w systemie Windows.

Oskar Duveborn
źródło
Również bazy danych oparte na MVCC od podstaw (takie jak PostGres) mogą korzystać z tego zestawu zachowań, aby zachować migawkę, z której kopiują kopie zapasowe, jednocześnie umożliwiając aktualizacje plików danych przez transakcje rozpoczynające się podczas wykonywania kopii zapasowej. Jak mówisz, istnieje kilka metod, jedna z nich zależy od podstawowej konstrukcji silnika przechowywania danych i funkcji przetwarzania transakcji.
David Spillett
-1

Możesz wykonać kopię zapasową znaną tylko jako kopia. Nie wpływa na bazę danych w trybie online

darotweiler
źródło
Co to jest kopia zapasowa tylko do kopiowania? Jak się to wykonuje? Czy są jakieś zastrzeżenia do rozważenia? Jakieś linki do przykładów takiej bestii? Jeśli masz zamiar przesłać odpowiedź, wyobraź sobie, co może być pomocne, jeśli ktoś ma to pytanie w ciągu 2-3 lat.
rnxrx