Database Snapshot er oprettelsen af et uforanderligt billede af databasen, du kan tænke på det som at tage det aktuelle billede af databasen.
hvis jeg forklarer det gennem et eksempel, bliver det klarere.
For eksempel tager vi snapshot af Adventurearbejde2014-databasen. Vi læser gennem dette øjebliksbillede. Der er endnu ikke foretaget ændringer i Adventure2014-databasen. Vores vælger gå til den oprindelige database, fordi der ikke er nogen ændring i den oprindelige database.
hvis der sker ændringer i den oprindelige database, skrives disse ændringer til en dedikeret plads på disken til Snapshot (kaldet sparsomme filer).
når vi vil læse dataene, hvis dataene er ændret i den oprindelige database, læses den uændrede version af dataene fra den sparsomme fil. På denne måde bliver billedet intakt.
selvom det ikke optager diskplads, så snart vi får Snapshot, øges størrelsen på de sparsomme filer, når ændringerne i den oprindelige database øges. Hvis størrelsen på de sparsomme filer vokser, og der ikke er plads tilbage på disken, bliver snapshotet mistænkt, og du skal slette snapshotet.
det bruges mest med Spejleteknologi.
jeg foreslår, at du læser min artikel “Databasespejling på server. I Spejling kan vi ikke læse fra den sekundære database. Når vi vil læse fra den sekundære database, kan vi gøre dette ved snapshot af den sekundære database.
og på denne måde skaber vi ikke en byrde for rapporten i den primære database ved at foretage vores rapportforespørgsler fra den sekundære database.
eller du kan få et øjebliksbillede af databasen, før du udfører en batchopdatering eller sletning. En forkert opdatering eller sletning kan vendes ved hjælp af snapshot. Det ville være en meget hurtigere metode end at vende tilbage fra Backup.
Snapshot skal være på samme instans med databasen.
lad os fortsætte med to eksempler.
i det første eksempel får vi et øjebliksbillede for at kunne læse fra den sekundære database i den spejlede database.
i det andet eksempel får vi snapshot for at vende en forkert opdateringsoperation.
Eksempel1:
først skal den spejlede database være synkron. Så billedet af din sekundære database skal være som følger.
vi opretter derefter Snapshot ved hjælp af følgende script. Du skal angive alle filerne i databasen.
i vores eksempel var der to filer. Vi oprettede snapshot til disse to filer. Hvis du ikke er bekendt med Filgruppe og fil, kan du læse min artikel”Sådan opretter du en Database på
1
2
3
4
5
|
Opret DATABASE Eventyrarbejder2014_snapshot på
(navn = Eventyrarbejder2012_data, filnavn = ‘C:\DB\Data\AdventureWorks2012_Data.ss’ ),
( navn = Eventyr2014_deneme, filnavn = ‘C:\DB\Data\AdventureWorks2014_Deneme.ss’ )
som øjebliksbillede af Eventyrarbejder2014;
gå
|
jeg fik følgende script fra msdn.
med følgende script kan du finde størrelsen på snapshot på disken og den maksimale størrelse, den kan vokse.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
vælg DB_NAME (sd.source_database_id) AS,
sd.name AS,
mf.name AS,
størrelse_on_disk_bytes/1024 AS ,
mf2.Størrelse/128 som
fra sys.master_files mf
Deltag sys.databaser sd
på mf.database_id = sd . database_id
Deltag sys.master_files mf2
på sd.source_database_id = mf2.database_id
og mf.file_id = mf2.file_id
kryds Anvend sys.dm_io_virtual_file_stats(sd.database_id, mf.file_id)
hvor mf. is_sparse = 1
og mf2.is_sparse = 0
Bestil efter 1;
|
følgende resultatsæt vendte tilbage, da jeg kørte scriptet. Jeg indstiller størrelsen på disse to datafiler til 256 mb.
derfor kan snapshotet vokse til maksimalt 256 MB.
vi skabte vores øjebliksbillede.
du kan læse fra dit øjebliksbillede, som om det var en database fra Databases-> Database Snapshots sektion på SSMS.
normalt kan du ikke læse fra sekundær database om spejling. Men du kan læse fra snapshot af den sekundære database.
Eksempel2:
lad os køre scriptet nedenfor i den primære database.
1
2
3
4
5
|
Opret DATABASE Eventyrarbejder2014_snapshot på
(navn = Eventyrarbejder2012_data, filnavn = ‘C:\DB\Data\AdventureWorks2012_Data.ss’ ),
( navn = Eventyr2014_deneme, filnavn = ‘C:\DB\Data\AdventureWorks2014_Deneme.ss’)
som øjebliksbillede af Eventyrarbejder2014;
gå
|
når du har taget Snapshot, skal du slette alle poster i en tabel ved hjælp af følgende script. Jeg sletter poster fra tabellen med navnet Snapshot_deneme, som jeg oprettede tidligere i Adventurearbejds2014-databasen.
1
|
Slet fra Snapshot_deneme
|
efter sletningsprocessen kan du gendanne dine slettede poster ved hjælp af følgende script.
men hvis du har udført en anden handling efter at have taget snapshot, mister du disse ændringer.
1
2
3
|
brug master
gå
Gendan DATABASE Eventyrarbejder2014 fra DATABASE_SNAPSHOT = ‘Eventyrarbejder2014_snapshot’
|
forfatter: dbtut
vi er et team med over 10 års databasestyring og BI-erfaring. Vores Ekspertise: Oracle, SQL Server, PostgreSQL, MySQL, MongoDB, Elasticsearch, Kibana, Grafana.