migawka bazy danych to tworzenie niezmiennego obrazu bazy danych, możesz myśleć o tym jak o robieniu aktualnego zdjęcia bazy danych.
jeśli wyjaśnię to na przykładzie, będzie jaśniej.
na przykład wykonujemy migawkę bazy danych AdventureWorks2014. Czytamy tę migawkę. W bazie danych AdventureWorks2014 nie wprowadzono jeszcze żadnych zmian. Nasze selekcje trafiają do oryginalnej bazy danych, ponieważ nie ma żadnych zmian w oryginalnej bazie danych.
jeśli zmiany wystąpią w oryginalnej bazie danych, zmiany te są zapisywane na dedykowanym miejscu na dysku dla migawek (zwanych plikami rzadkimi).
gdy chcemy odczytywać dane, jeżeli dane uległy zmianie w oryginalnej bazie danych, to z rzadkiego pliku odczytywana jest niezmieniona Wersja danych. W ten sposób zdjęcie staje się nienaruszone.
mimo, że nie zajmuje miejsca na dysku, gdy tylko otrzymamy migawkę, rozmiar rzadkich plików wzrośnie wraz ze wzrostem zmian w oryginalnej bazie danych. Jeśli rozmiar rzadkich plików rośnie, a na dysku nie ma miejsca, migawka staje się podejrzana i należy ją usunąć.
jest najczęściej używany z technologią dublowania.
proponuję przeczytać mój artykuł „database Mirroring On SQL Server”. W mirroringu nie możemy odczytać z wtórnej bazy danych. Gdy chcemy odczytać z wtórnej bazy danych, możemy to zrobić migawką wtórnej bazy danych.
i w ten sposób nie tworzymy obciążenia dla raportu w podstawowej bazie danych, wykonując nasze zapytania do Raportów z wtórnej bazy danych.
lub możesz uzyskać migawkę bazy danych przed wykonaniem operacji aktualizacji lub usuwania wsadowego. Nieprawidłową operację aktualizacji lub usunięcia można odwrócić za pomocą migawki. Byłaby to znacznie szybsza metoda niż powrót z kopii zapasowej.
Migawka powinna być na tej samej instancji z bazą danych.
kontynuujmy dwa przykłady.
w pierwszym przykładzie otrzymamy migawkę, aby móc ją odczytać z wtórnej bazy danych lustrzanej bazy danych.
w drugim przykładzie uzyskamy migawkę, aby odwrócić nieprawidłową operację aktualizacji.
Przykład1:
najpierw lustrzana baza danych musi być synchroniczna. Tak więc obraz twojej wtórnej bazy danych powinien wyglądać następująco.
następnie tworzymy migawkę za pomocą następującego skryptu. Musisz określić wszystkie pliki w bazie danych.
w naszym przykładzie były dwa pliki. Stworzyliśmy migawkę dla tych dwóch plików. Jeśli nie jesteś zaznajomiony z FileGroup i File, możesz przeczytać mój artykuł „Jak utworzyć bazę danych na SQL Server”.
1
2
3
4
5
|
Utwórz bazę danych AdventureWorks2014_Snapshot na
( NAME = AdventureWorks2012_Data, FILENAME = ” C:\DB\Data\AdventureWorks2012_Data.ss’ ),
( NAME = AdventureWorks2014_Deneme, FILENAME = ” C:\DB\Data\AdventureWorks2014_Deneme.ss’)
jako migawka AdventureWorks2014;
idź
|
dostałem następujący skrypt z msdn.
za pomocą poniższego skryptu możesz znaleźć Rozmiar migawki na dysku i maksymalny rozmiar, jaki może wzrosnąć.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
wybierz DB_NAME (sd.source_database_id) AS,
sd.name AS ,
mf.name AS ,
size_on_disk_bytes/1024 AS ,
mf2.rozmiar / 128 AS
od sys.master_files mf
dołącz do sys.bazy danych sd
NA mf.database_id = sd.database_id
JOIN sys.master_files mf2
na sd.source_database_id = MF2.database_id
I mf.file_id = mf2.file_id
CROSS APPLY sys.dm_io_virtual_file_stats (sd. database_id, mf.file_id)
WHERE MF.is_sparse = 1
AND MF2. is_sparse = 0
ORDER BY 1;
|
następujący zestaw wyników powrócił po uruchomieniu skryptu. Ustawiłem Rozmiar tych dwóch plików danych na 256 mb.
dlatego migawka może wzrosnąć do maksymalnie 256 MB.
stworzyliśmy naszą migawkę.
możesz odczytać z migawki tak, jakby była to baza danych z sekcji databases-> Database Snapshots na SSMS.
normalnie nie można odczytać z wtórnej bazy danych na dublowaniu. Ale możesz czytać z migawki wtórnej bazy danych.
Przykład2:
Uruchom poniższy skrypt w podstawowej bazie danych.
1
2
3
4
5
|
Utwórz bazę danych AdventureWorks2014_Snapshot na
( NAME = AdventureWorks2012_Data, FILENAME = ” C:\DB\Data\AdventureWorks2012_Data.ss’ ),
( NAME = AdventureWorks2014_Deneme, FILENAME = ” C:\DB\Data\AdventureWorks2014_Deneme.ss’)
jako migawka AdventureWorks2014;
idź
|
po wykonaniu migawki usuń wszelkie rekordy w dowolnej tabeli za pomocą następującego skryptu. Usuwam rekordy z tabeli o nazwie Snapshot_deneme, którą utworzyłem wcześniej w bazie danych AdventureWorks2014.
1
|
Usuń z Snapshot_deneme
|
po zakończeniu procesu usuwania możesz przywrócić usunięte rekordy za pomocą następującego skryptu.
ale jeśli wykonałeś kolejną operację po zrobieniu migawki, stracisz te zmiany.
1
2
3
|
użyj master
przejdź
Przywróć bazę danych AdventureWorks2014 z DATABASE_SNAPSHOT = 'AdventureWorks2014_Snapshot’
|
Autor: dbtut
Jesteśmy zespołem z ponad 10-letnim doświadczeniem w zarządzaniu bazami danych i BI. Nasze Ekspertyzy: Oracle, SQL Server, PostgreSQL, MySQL, MongoDB, Elasticsearch, Kibana, Grafana.