Migawki baz danych (SQL Server)
Dotyczy:programu SQL Server
Migawka bazy danych to statyczny, tylko do odczytu widok bazy danych SQL Server (źródłowej bazy danych). Jest ona transakcyjnie zgodna z źródłową bazą danych podczas tworzenia migawki i zawsze znajduje się w tym samym wystąpieniu serwera co źródłowa baza danych. Chociaż migawki bazy danych zapewniają widok danych tylko do odczytu w tym samym stanie co podczas tworzenia migawki, rozmiar pliku migawki rośnie wraz ze zmianami w źródłowej bazie danych.
Chociaż migawki bazy danych mogą być korzystne podczas większych aktualizacji schematu i pozwalają na przywrócenie poprzedniego stanu, ważne jest zrozumienie, że nie zastępują one potrzeby regularnych kopii zapasowych. Nie można tworzyć kopii zapasowych ani przywracać migawek bazy danych, co oznacza, że powinny być używane z niezawodną strategią tworzenia kopii zapasowych w celu zapewnienia ochrony i odzyskiwania danych w przypadku utraty lub uszkodzenia danych.
Migawki bazy danych są tworzone przy użyciu składni T-SQL CREATE DATABASE oraz przy użyciu składni AS SNAPSHOT OF
.
W danej źródłowej bazie danych może istnieć wiele migawek. Każda migawka bazy danych utrzymuje się, dopóki właściciel bazy danych jej jawnie nie usunie.
Notatka
Migawki bazy danych nie są powiązane z kopiami zapasowymi typu migawka, Transact-SQL, izolacją migawkową transakcji lub replikacją migawkową.
Omówienie funkcji
Migawki bazy danych działają na poziomie strony danych. Zanim strona źródłowej bazy danych zostanie zmodyfikowana po raz pierwszy, oryginalna strona zostanie skopiowana z źródłowej bazy danych do migawki. Migawka przechowuje oryginalną stronę, zachowując rekordy danych tak jak istniały podczas tworzenia migawki. Ten sam proces jest powtarzany dla każdej strony, która jest modyfikowana po raz pierwszy. Dla użytkownika migawka bazy danych nigdy się nie zmienia, ponieważ operacje odczytu migawki bazy danych zawsze uzyskują dostęp do oryginalnych stron danych, niezależnie od tego, gdzie się znajdują.
Migawka przechowuje skopiowane oryginalne strony przy użyciu co najmniej jednego pliku rozrzedlonego. Początkowo plik rozrzedny jest pustym plikiem, który nie zawiera żadnych danych użytkownika i nie został jeszcze przydzielony miejsce na dysku dla danych użytkownika. Rozmiar pliku rośnie w miarę aktualizowania większej liczby stron w źródłowej bazie danych. Na poniższej ilustracji przedstawiono wpływ dwóch kontrastujących wzorców aktualizacji na rozmiar migawki. Wzorzec aktualizacji A odzwierciedla środowisko, w którym tylko 30 procent oryginalnych stron jest aktualizowanych w czasie wykonywania migawki. Wzorzec aktualizacji B odzwierciedla środowisko, w którym 80 procent oryginalnych stron jest aktualizowanych w trakcie życia migawki.
Korzyści
Migawki można wykorzystywać do celów raportowania.
- Klienci mogą wykonywać zapytania dotyczące migawki bazy danych, co ułatwia pisanie raportów na podstawie danych podczas tworzenia migawki.
Utrzymywanie danych historycznych na potrzeby generowania raportów.
- Migawka może umożliwić użytkownikowi dostęp do danych z określonego punktu w czasie. Można na przykład utworzyć migawkę bazy danych na potrzeby późniejszego raportowania na koniec danego okresu (na przykład kwartał finansowy). Następnie można uruchamiać raporty końca okresu na migawce. Jeśli pozwala na to miejsce na dysku, można również przechowywać migawki końca okresu na czas nieokreślony, umożliwiając wykonywanie zapytań na podstawie wyników z tych okresów, na przykład w celu zbadania osiągnięć organizacji.
Używanie bazy danych lustrzanych do celów zapewnienia dostępności w celu odciążenia procesów raportowania.
- Używanie migawek bazy danych razem z mirroringiem bazy danych pozwala na udostępnianie danych na serwerze lustrzanym w celu raportowania. Ponadto uruchamianie zapytań w lustrzanej bazie danych może zwolnić zasoby dla głównej. Aby uzyskać więcej informacji, zobacz Database Mirroring and Database Snapshots (SQL Server).
Ochrona danych przed błędem administracyjnym.
Jeśli w źródłowej bazie danych wystąpi błąd użytkownika, możesz przywrócić go do stanu po utworzeniu migawki bazy danych. Utrata danych jest ograniczona do aktualizacji bazy danych od momentu utworzenia migawki.
Na przykład przed wykonaniem głównych aktualizacji, takich jak aktualizacja zbiorcza lub zmiana schematu, utwórz migawkę bazy danych w bazie danych w celu ochrony danych. Jeśli popełnisz błąd, możesz użyć migawki, aby odzyskać bazę danych, przywracając ją z migawki. Cofanie jest szybsze niż przywracanie z kopii zapasowej; jednak nie można później przywrócić zmian.
Ważny
Przywracanie nie działa w trybie offline lub uszkodzonej bazie danych. W związku z tym regularne kopie zapasowe i testowanie planu przywracania są niezbędne do ochrony bazy danych.
Notatka
Migawki bazy danych są zależne od źródłowej bazy danych. W związku z tym przywracanie bazy danych przy użyciu migawek nie jest zastępowane strategią tworzenia kopii zapasowych i przywracania. Wykonywanie wszystkich zaplanowanych kopii zapasowych pozostaje niezbędne. Jeśli musisz przywrócić źródłową bazę danych do punktu, w którym utworzono migawkę bazy danych, zaimplementuj zasady tworzenia kopii zapasowej, które umożliwiają wykonanie tej czynności.
Ochrona danych przed błędem użytkownika.
Tworząc regularnie migawki bazy danych, można ograniczyć wpływ poważnego błędu użytkownika, takiego jak porzucona tabela. W przypadku wysokiego poziomu ochrony można utworzyć serię migawek bazy danych obejmujących wystarczająco dużo czasu, aby rozpoznać większość błędów użytkownika i reagować na nie. Na przykład, w zależności od zasobów dyskowych, można utrzymywać od 6 do 12 kroczących migawek obejmujących 24-godzinny przedział czasowy. Następnie przy każdym utworzeniu nowej migawki można usunąć najwcześniejszą migawkę.
Aby naprawić błąd użytkownika, możesz przywrócić bazę danych do migawki utworzonej bezpośrednio przed błędem. Cofnięcie zmian jest potencjalnie znacznie szybsze niż przywracanie z kopii zapasowej; jednak nie można później kontynuować wprowadzania zmian.
Alternatywnie można ręcznie odtworzyć usuniętą tabelę lub inne utracone dane z informacji w migawce. Na przykład można zbiorczo skopiować dane z migawki do bazy danych i ręcznie ponownie scalić dane z bazą danych.
Notatka
Przyczyny używania migawek baz danych określają, ile współbieżnych migawek jest potrzebnych w bazie danych, jak często należy utworzyć nową migawkę i jak długo ją przechowywać.
Zarządzanie testową bazą danych.
- W środowisku testowym baza danych może być przydatna do przechowywania identycznych danych na początku każdej rundy testowania podczas wielokrotnego uruchamiania protokołu testowego. Przed uruchomieniem pierwszej rundy deweloper aplikacji lub tester może utworzyć migawkę testowej bazy danych. Po każdym uruchomieniu testowym baza danych może zostać szybko zwrócona do poprzedniego stanu, przywracając migawkę bazy danych.
Terminy i definicje
Migawki baz danych w programie SQL Server obejmują kilka kluczowych pojęć i definicji. Migawka bazy danych to statyczny, tylko do odczytu widok bazy danych (zwany jako baza danych źródłowa) w określonym momencie w czasie. Źródłowa baza danych jest oryginalną bazą danych, na której bazuje migawka, i musi pozostać w trybie online i być dostępna, aby migawka mogła być dostępna do użycia. Pliki rozrzedzone przechowują oryginalne strony źródłowej bazy danych, które zostały zmodyfikowane od momentu utworzenia migawki. Te pliki są początkowo puste i rosną wraz ze zmianami w źródłowej bazie danych. Zrozumienie tych terminów jest niezbędne do efektywnego zarządzania migawkami bazy danych i korzystania z nich w programie SQL Server.
Migawka bazy danych
Spójny transakcyjnie, tylko do odczytu, statyczny widok bazy danych (źródłowa baza danych).
Źródłowa baza danych
W przypadku migawki bazy danych baza danych, na której utworzono migawkę. Migawki bazy danych są zależne od źródłowej bazy danych. Migawki bazy danych muszą znajdować się w tym samym wystąpieniu serwera co baza danych. Ponadto, jeśli ta baza danych stanie się niedostępna z jakiegokolwiek powodu, jej migawki staną się niedostępne.
Plik rozrzedny
System plików NTFS udostępnia plik, który wymaga znacznie mniej miejsca na dysku, niż w przeciwnym razie byłoby potrzebne. Plik rozrzedowany służy do przechowywania stron kopiowanych do migawki bazy danych. Gdy plik rzadki zostanie utworzony, zajmuje mało miejsca na dysku. W miarę jak dane są zapisywane w migawce bazy danych, system plików NTFS stopniowo przydziela miejsce na dysku do odpowiedniego pliku rzadkiego.
Warunki wstępne
Źródłowa baza danych, która może używać dowolnego modelu odzyskiwania, musi spełniać następujące wymagania wstępne:
Wystąpienie serwera musi działać w wersji programu SQL Server obsługującej migawki bazy danych.
- Aby uzyskać więcej informacji, zobacz funkcje obsługiwane przez wersje programu SQL Server 2016.
Źródłowa baza danych musi być online, chyba że jest to baza danych zwierciadlana w ramach sesji mirroringu bazy danych.
Migawkę bazy danych można utworzyć w grupie dostępności w dowolnej podstawowej lub pomocniczej bazie danych. Rola repliki musi być podstawowa lub drugorzędna i nie może być w stanie rozwiązywania.
Zalecamy, aby stan synchronizacji bazy danych był SYNCHRONIZOWANIE lub SYNCHRONIZOWANY, gdy tworzysz migawkę bazy danych. Migawki bazy danych można jednak utworzyć, gdy stan NIE JEST SYNCHRONIZOWANY.
- Aby uzyskać więcej informacji, zobacz Migawki bazy danych z zawsze włączonymi grupami dostępności (SQL Server).
Aby utworzyć migawkę bazy danych na lustrzanej bazie danych, baza danych musi być w stanie ZSYNCHRONIZOWANYM.
Źródłowej bazy danych nie można skonfigurować jako skalowalnej udostępnionej bazy danych.
Przed programem SQL Server 2019 źródłowa baza danych nie mogła zawierać grupy plików MEMORY_OPTIMIZED_DATA. Dodano obsługę migawek bazy danych w pamięci w programie SQL Server 2019.
Wszystkie modele odzyskiwania obsługują migawki bazy danych.
Ograniczenia dotyczące źródłowej bazy danych
O ile istnieje migawka bazy danych, istnieją następujące ograniczenia dotyczące źródłowej bazy danych:
Nie można porzucić, odłączyć ani przywrócić bazy danych.
Tworzenie kopii zapasowej źródłowej bazy danych zwykle działa, ale nie wpływa to na migawki bazy danych.
Wydajność jest zmniejszona z powodu zwiększonej liczby operacji we/wy w źródłowej bazie danych wynikającej z operacji kopiowania na zapis do migawki za każdym razem, gdy strona jest aktualizowana.
Nie można usuwać plików ze źródłowej bazy danych ani żadnych migawek.
Ograniczenia dotyczące migawek bazy danych
Migawki bazy danych zależą od źródłowej bazy danych i nie chronią przed błędami dysku ani uszkodzeniem. W związku z tym, chociaż mogą one być przydatne do celów raportowania lub podczas zmian schematu, powinny one uzupełniać, a nie zastępować, regularnych praktyk tworzenia kopii zapasowych. Jeśli musisz przywrócić źródłową bazę danych do punktu, w którym utworzono migawkę bazy danych, zaimplementuj zasady tworzenia kopii zapasowej, które umożliwiają wykonanie tej czynności.
Następujące ograniczenia dotyczą migawek bazy danych:
Należy utworzyć migawkę bazy danych, która będzie znajdować się w tym samym wystąpieniu serwera co źródłowa baza danych.
Migawki bazy danych zawsze działają w całej bazie danych.
Migawki bazy danych zależą od bazy danych źródłowej i nie stanowią nadmiarowego magazynu. Nie chronią przed błędami dysku ani innymi typami uszkodzenia. W związku z tym przywracanie bazy danych przy użyciu migawek nie jest zamiennikiem strategii tworzenia kopii zapasowych i przywracania. Wykonywanie wszystkich zaplanowanych kopii zapasowych pozostaje niezbędne. Jeśli musisz przywrócić źródłową bazę danych do punktu, w którym utworzono migawkę bazy danych, zaimplementuj zasady tworzenia kopii zapasowej, które umożliwiają wykonanie tej czynności.
Gdy strona aktualizująca się w bazie danych źródłowej zostaje wypchnięta do migawki, a migawce zabraknie miejsca na dysku lub napotka inny błąd, staje się podejrzana i musi zostać usunięta.
Migawki są tylko do odczytu. Ponieważ są one tylko do odczytu, nie można ich uaktualnić. W związku z tym migawki bazy danych mogą nie być dostępne po uaktualnieniu.
Tworzenie migawek baz danych
model
,master
itempdb
jest zabronione.Nie można zmienić żadnych specyfikacji plików migawek bazy danych.
Nie można usuwać plików z migawki bazy danych.
Nie można utworzyć kopii zapasowej ani przywrócić migawek bazy danych.
Nie można dołączać ani odłączać migawek bazy danych.
Nie można tworzyć migawek bazy danych w systemie plików FAT32 lub partycjach RAW. System plików NTFS udostępnia pliki rzadkie używane przez migawki bazy danych.
Indeksowanie pełnotekstowe nie jest obsługiwane w migawkach bazy danych. Wykazy pełnotekstowe nie są propagowane ze źródłowej bazy danych.
Migawka bazy danych dziedziczy ograniczenia zabezpieczeń źródłowej bazy danych podczas tworzenia migawki. Ponieważ migawki są dostępne tylko do odczytu, nie można zmienić dziedziczonych uprawnień, a zmiany uprawnień wprowadzone w źródle nie zostaną odzwierciedlone w istniejących migawkach.
Migawka zawsze odzwierciedla stan grup plików w momencie tworzenia migawki: grupy plików online pozostają w trybie online, a grupy plików offline pozostają w trybie offline. Aby uzyskać więcej informacji, zobacz "Migawki bazy danych z grupami plików w trybie offline" w późniejszej części tego artykułu.
Jeśli źródłowa baza danych przejdzie w stan RECOVERY_PENDING, jej migawki mogą stać się niedostępne. Jednak po rozwiązaniu problemu w źródłowej bazie danych jego migawki powinny zostać ponownie udostępnione.
Przywracanie jest nieobsługiwane dla plików NTFS tylko do odczytu oraz plików skompresowanych NTFS w bazie danych. Próba przywrócenie bazy danych zawierającej jeden z tych typów grup plików kończy się niepowodzeniem.
W konfiguracji przesyłania dzienników migawki bazy danych można tworzyć tylko w podstawowej bazie danych, a nie w bazie pomocniczej. Załóżmy, że przełączasz role między wystąpieniami serwera podstawowego i pomocniczego. W takim przypadku należy usunąć wszystkie migawki danych przed skonfigurowaniem głównej bazy danych jako pomocniczej.
Nie można skonfigurować migawki bazy danych jako skalowalnej udostępnionej bazy danych.
Migawki bazy danych nie obsługują grup plików FILESTREAM. Jeśli grupy plików FILESTREAM istnieją w źródłowej bazie danych, są one oznaczone jako offline w jego migawkach bazy danych, a migawki nie mogą być używane do przywracania bazy danych.
Notatka
Instrukcja SELECT wykonywana na migawce bazy danych nie może określać kolumny FILESTREAM; w przeciwnym razie zostanie zwrócony następujący komunikat o błędzie: Could not continue scan with NOLOCK due to data movement.
- Kiedy brakuje statystyk dotyczących migawki tylko do odczytu lub są one nieaktualne, mechanizm bazy danych tworzy i utrzymuje tymczasowe statystyki w
tempdb
. Aby uzyskać więcej informacji, zobacz Statystyki.
Miejsce na dysku
Migawki bazy danych zużywają miejsce na dysku. Jeśli migawce bazy danych zabraknie miejsca na dysku, jest oznaczona jako podejrzana i musi zostać usunięta. (Źródłowa baza danych nie jest jednak dotknięta; działania na niej są kontynuowane normalnie.)
Jednak migawki są wysoce oszczędne pod względem przestrzeni w porównaniu z pełną kopią bazy danych. Migawka wymaga wystarczającej ilości miejsca dla stron, które zmieniają się w czasie jej trwania. Ogólnie rzecz biorąc, migawki są przechowywane przez ograniczony czas, więc ich rozmiar nie jest istotnym problemem.
Im dłużej przechowujesz migawkę, tym bardziej prawdopodobne jest, że zużyje ona dostępne miejsce. Maksymalny rozmiar, do którego można zwiększyć rozrzedny plik, to odpowiedni rozmiar pliku źródłowej bazy danych w momencie tworzenia migawki. Migawka bazy danych musi zostać usunięta (porzucona), jeśli zabraknie miejsca na dysku.
Notatka
Z wyjątkiem miejsca na pliki migawka bazy danych zużywa mniej więcej tyle zasobów jak baza danych.
Grupy plików w trybie offline
Grupy plików w trybie offline w źródłowej bazie danych wpływają na migawki bazy danych podczas próby wykonania dowolnej z następujących czynności:
Utwórz migawkę.
- Jeśli w źródłowej bazie danych jedna lub więcej grup plików jest w trybie offline, tworzenie migawki może być zakończone pomyślnie. Rzadkie pliki nie są tworzone dla grup plików offline.
Przełącz grupę plików w tryb offline
- Możesz przełączyć plik w tryb offline w źródłowej bazie danych. Jednak grupa plików pozostaje w trybie online w migawkach bazy danych, jeśli była w trybie online podczas tworzenia migawki. Jeśli zapytania dotyczące danych uległy zmianie od momentu utworzenia migawki, oryginalna strona danych jest dostępna w migawce. Jednak zapytania korzystające z migawki w celu uzyskania dostępu do niezmodyfikowanych danych w grupie plików mogą zakończyć się niepowodzeniem z błędami wejścia/wyjścia (We/Wy).
Przełącz grupę plików w tryb online
- Nie można udostępnić grupy plików w trybie online w bazie danych, która zawiera migawki bazy danych. Jeśli grupa plików jest w trybie offline w momencie tworzenia migawki lub zostaje wyłączona z trybu online, gdy istnieje migawka bazy danych, pozostaje offline. Dzieje się tak, ponieważ przeniesienie pliku z powrotem do trybu online wymaga jego przywrócenia, co nie jest możliwe, jeśli istnieje migawka bazy danych.
Przywróć źródłową bazę danych do migawki
- Przywrócenie źródłowej bazy danych do migawki bazy danych wymaga, aby wszystkie grupy plików były w trybie online, z wyjątkiem tych, które były w trybie offline podczas tworzenia migawki.
Powiązana zawartość
- Dublowanie Baz Danych i Migawki Baz Danych (SQL Server)
- CREATE DATABASE — migawki bazy danych
- Utwórz migawkę bazy danych (Transact-SQL)
- Wyświetlanie migawki bazy danych (SQL Server)
- Wyświetl rozmiar rzadkiego pliku migawki bazy danych (Transact-SQL)
- Przywróć bazę danych do migawki bazy danych
- Usuń Migawkę Bazy Danych (Transact-SQL)