co je Database Snapshot na SQL Serveru

Database Snapshot je vytvoření neměnného obrazu databáze, můžete si o tom myslet, že pořizujete aktuální fotografii databáze.

pokud to vysvětlím na příkladu, bude to jasnější.

například pořídíme snímek databáze AdventureWorks2014. Čteme tento snímek. V databázi AdventureWorks2014 zatím nebyly provedeny žádné změny. Naše výběry přejdou do původní databáze, protože v původní databázi nedochází ke změně.

pokud dojde ke změnám v původní databázi, jsou tyto změny zapsány do vyhrazeného místa na disku pro Snímek (nazývané řídké soubory).

když chceme číst data, pokud se data změnila v původní databázi, je nezměněná verze dat načtena z řídkého souboru. Tímto způsobem se fotografie stane neporušenou.

i když to nezabírá místo na disku, jakmile získáme Snímek, velikost řídkých souborů se zvýší se změnami v původní databázi. Pokud velikost řídkých souborů roste a na disku nezůstane žádné místo, snímek se stane podezřelým a snímek musíte odstranit.

používá se většinou s technologií zrcadlení.

doporučuji si přečíst můj článek „zrcadlení databáze na serveru SQL“. Při zrcadlení nemůžeme číst ze sekundární databáze. Když chceme číst ze sekundární databáze, můžeme to udělat snímkem sekundární databáze.

a tímto způsobem nevytvoříme zátěž pro sestavu v primární databázi tím, že děláme dotazy na sestavu ze sekundární databáze.

nebo můžete získat snímek databáze před provedením dávkové aktualizace nebo odstranění operace. Nesprávnou operaci aktualizace nebo odstranění lze zvrátit pomocí snímku. Byla by to mnohem rychlejší metoda než návrat ze zálohy.

snímek by měl být na stejné instanci s databází.

pokračujme dvěma příklady.

v prvním příkladu získáme snímek, který budeme moci číst ze sekundární databáze zrcadlené databáze.

ve druhém příkladu získáme snímek, který zvrátí nesprávnou operaci aktualizace.

Example1:

nejprve musí být zrcadlená databáze synchronní. Obrázek vaší sekundární databáze by tedy měl být následující.

snímek pak vytvoříme pomocí následujícího skriptu. Musíte zadat všechny soubory v databázi.

v našem příkladu byly dva soubory. Vytvořili jsme snímek pro tyto dva soubory. Pokud nejste obeznámeni se souborovou skupinou A souborem ,můžete si přečíst můj článek „Jak vytvořit databázi na serveru SQL“.

1
2
3
4
5

vytvořit databázi AdventureWorks2014_Snapshot na
(NAME = AdventureWorks2012_Data, FILENAME = ‚ C:\DB\Data\AdventureWorks2012_Data.ss‘ ),
( NAME = AdventureWorks2014_Deneme, FILENAME = ‚C:\DB\Data\AdventureWorks2014_Deneme.ss‘)
jako snímek AdventureWorks2014;
GO

mám následující skript z msdn.

pomocí následujícího skriptu můžete najít velikost snímku na disku a maximální velikost, kterou může růst.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

vyberte DB_NAME (sd.source_database_id) AS,
sd.name AS,
mf.name AS,
size_on_disk_bytes/1024 AS,
mf2.velikost / 128 jako
od sys.master_files mf
připojit sys.databáze sd
na mf.database_id = sd.database_id
připojit sys.master_files mf2
na sd.source_database_id = mf2.database_id
a mf.file_id = mf2.file_id
CROSS APPLY sys.dm_io_virtual_file_stats(sd.database_id, mf.file_id)
kde mf. is_sparse = 1
a mf2. is_sparse = 0
pořadí podle 1;

následující sada výsledků se vrátila, když jsem spustil skript. Nastavil jsem velikost těchto dvou datových souborů na 256 mb.

to je důvod, proč snímek může růst na maximálně 256 MB.

vytvořili jsme náš snímek.

ze snímku můžete číst, jako by to byla databáze z databáze – > sekce databázové snímky na SSMS.

normálně nemůžete číst ze sekundární databáze na zrcadlení. Ale můžete si přečíst ze snímku sekundární databáze.

Example2:

pojďme spustit skript níže v primární databázi.

1
2
3
4
5

vytvořit databázi AdventureWorks2014_Snapshot na
(NAME = AdventureWorks2012_Data, FILENAME = ‚ C:\DB\Data\AdventureWorks2012_Data.ss‘ ),
( NAME = AdventureWorks2014_Deneme, FILENAME = ‚C:\DB\Data\AdventureWorks2014_Deneme.ss‘)
jako snímek AdventureWorks2014;
jít

po pořízení snímku odstraňte všechny záznamy v libovolné tabulce pomocí následujícího skriptu. Mažu záznamy z tabulky s názvem Snapshot_deneme, kterou jsem vytvořil dříve v databázi AdventureWorks2014.

1
odstranit z Snapshot_deneme

po procesu odstranění můžete smazané záznamy obnovit pomocí následujícího skriptu.

ale pokud jste po pořízení snímku provedli další operaci, tyto změny ztratíte.

1
2
3

použít master
jít
obnovit databázi AdventureWorks2014 z DATABASE_SNAPSHOT = ‚AdventureWorks2014_Snapshot‘

dbtut

Autor: dbtut

jsme tým s více než 10 let správy databází a bi zkušeností. Naše Expertízy: Oracle, SQL Server, PostgreSQL, MySQL, MongoDB, Elasticsearch, Kibana, Grafana.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.