databas Snapshot är skapandet av en oföränderlig bild av databasen, kan du tänka på det som att ta aktuell bild av databasen.
om jag förklarar det genom ett exempel blir det tydligare.
till exempel tar vi ögonblicksbilden av AdventureWorks2014-databasen. Vi läser igenom denna ögonblicksbild. Inga ändringar har gjorts i databasen AdventureWorks2014 ännu. Våra val går till den ursprungliga databasen eftersom det inte finns någon förändring i den ursprungliga databasen.
om ändringar inträffar i den ursprungliga databasen skrivs dessa ändringar till ett dedikerat utrymme på disken för ögonblicksbild (kallas glesa filer).
när vi vill läsa data, om data har ändrats i den ursprungliga databasen, läses den oförändrade versionen av data från den glesa filen. På detta sätt blir fotot intakt.
även om det inte tar upp diskutrymme så snart vi får Snapshot, kommer storleken på de glesa filerna att öka när ändringarna i den ursprungliga databasen ökar. Om storleken på de glesa filerna växer och det inte finns något utrymme kvar på skivan blir ögonblicksbilden misstänkt och du måste ta bort ögonblicksbilden.
det används mest med Speglingsteknik.
jag föreslår att du läser min artikel ”databasspegling på SQL Server”. I Spegling kan vi inte läsa från den sekundära databasen. När vi vill läsa från den sekundära databasen kan vi göra detta genom ögonblicksbild av den sekundära databasen.
och på detta sätt skapar vi inte en börda för rapporten i den primära databasen genom att göra våra rapportfrågor från den sekundära databasen.
eller du kan hämta ögonblicksbilden av databasen innan du utför en batchuppdatering eller radering. En felaktig uppdatering eller radering kan vändas med snapshot. Det skulle vara en mycket snabbare metod än att återvända från säkerhetskopiering.
Snapshot ska vara i samma instans med databasen.
låt oss fortsätta med två exempel.
i det första exemplet får vi en ögonblicksbild för att kunna läsa från den sekundära databasen i den speglade databasen.
i det andra exemplet får vi snapshot för att vända en felaktig uppdateringsoperation.
Exempel1:
först måste den speglade databasen vara synkron. Så bilden av din sekundära databas ska vara enligt följande.
vi skapar sedan ögonblicksbilden med hjälp av följande skript. Du måste ange alla filer i databasen.
i vårt exempel fanns det två filer. Vi skapade snapshot för dessa två filer. Om du inte är bekant med filgrupp och fil kan du läsa min artikel ”Hur man skapar en databas på SQL Server”.
1
2
3
4
5
|
skapa databas AdventureWorks2014_Snapshot på
(NAME = AdventureWorks2012_Data, filnamn = ’C:\DB\Data\AdventureWorks2012_Data.ss’ ),
( NAME = AdventureWorks2014_Deneme, filnamn = ’C:\DB\Data\AdventureWorks2014_Deneme.ss’ )
som ögonblicksbild av AdventureWorks2014;
gå
|
jag fick följande manus från msdn.
med följande skript kan du hitta storleken på ögonblicksbilden på disken och den maximala storleken den kan växa.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
välj DB_NAME (sd.source_database_id) AS,
sd.name som,
mf.name som,
size_on_disk_bytes / 1024 som ,
mf2.storlek / 128 som
från sys.master_files mf
gå sys.databaser sd
på mf.database_id = sd.databas_id
gå sys.master_files mf2
på sd.source_database_id = mf2.databas_id
och mf.file_id = mf2.file_id
CROSS tillämpa sys. dm_io_virtual_file_stats (sd. database_id, mf.file_id)
där mf. is_sparse = 1
och mf2. is_sparse = 0
Beställ efter 1;
|
följande resultatuppsättning återvände när jag körde manuset. Jag ställer in storleken på dessa två datafiler till 256 mb.
därför kan ögonblicksbilden växa till högst 256 MB.
vi skapade vår ögonblicksbild.
du kan läsa från din ögonblicksbild som om det var en databas från avsnittet Databases-> databas Snapshots på SSMS.
normalt kan du inte läsa från sekundär databas om spegling. Men du kan läsa från ögonblicksbilden av den sekundära databasen.
exempel 2:
Låt oss köra skriptet nedan i den primära databasen.
1
2
3
4
5
|
skapa databas AdventureWorks2014_Snapshot på
(NAME = AdventureWorks2012_Data, filnamn = ’C:\DB\Data\AdventureWorks2012_Data.ss’ ),
( NAME = AdventureWorks2014_Deneme, filnamn = ’C:\DB\Data\AdventureWorks2014_Deneme.ss’)
som ögonblicksbild av AdventureWorks2014;
gå
|
när du har tagit Snapshot tar du bort alla poster i en tabell med hjälp av följande skript. Jag tar bort poster från tabellen Snapshot_deneme som jag skapade tidigare i AdventureWorks2014-databasen.
1
|
ta bort från Snapshot_deneme
|
efter borttagningsprocessen kan du återställa dina raderade poster med hjälp av följande skript.
men om du har gjort en annan operation efter att ha tagit snapshot, kommer du att förlora dessa ändringar.
1
2
3
|
använd master
gå
Återställ databas AdventureWorks2014 från DATABASE_SNAPSHOT = ’AdventureWorks2014_Snapshot’
|
författare: dbtut
vi är ett team med över 10 års databashantering och BI erfarenhet. Våra Experter: Oracle, SQL Server, PostgreSQL, MySQL, MongoDB, Elasticsearch, Kibana, Grafana.