ce este database Snapshot on SQL Server

database Snapshot este crearea unei imagini Neschimbabile a bazei de date, vă puteți gândi la ea ca luând fotografia curentă a bazei de date.

dacă o explic printr-un exemplu, va fi mai clară.

de exemplu, luăm instantaneul bazei de date AdventureWorks2014. Citim prin acest instantaneu. Nu s-au făcut încă modificări în baza de date AdventureWorks2014. Selectările noastre merg la baza de date originală, deoarece nu există nicio modificare în baza de date originală.

dacă apar modificări în baza de date originală, aceste modificări sunt scrise într-un spațiu dedicat de pe disc Pentru instantaneu (numite fișiere rare).

când vrem să citim datele, dacă datele s-au schimbat în baza de date originală, versiunea neschimbată a datelor este citită din fișierul RAR. În acest fel, fotografia devine intactă.

chiar dacă nu ocupă spațiu pe disc imediat ce obținem instantaneu, dimensiunea fișierelor rare va crește pe măsură ce modificările din Baza de date originală vor crește. Dacă dimensiunea fișierelor rare crește și nu mai rămâne spațiu pe disc, instantaneul devine suspect și trebuie să ștergeți instantaneul.

este folosit mai ales cu tehnologia de oglindire.

vă sugerez să citiți articolul meu „oglindirea bazei de date pe SQL Server”. În oglindire, nu putem citi din Baza de date secundară. Când vrem să citim din Baza de date secundară, putem face acest lucru prin instantaneu al bazei de date secundare.

și în acest fel, nu creăm o povară pentru raportul din Baza de date primară făcând interogările noastre de raport din Baza de date secundară.

sau puteți obține instantaneul bazei de date înainte de a efectua o operație de actualizare sau ștergere în lot. O operație incorectă de actualizare sau ștergere poate fi inversată folosind snapshot. Ar fi o metodă mult mai rapidă decât întoarcerea de la Backup.

instantaneu ar trebui să fie pe aceeași instanță cu baza de date.

să continuăm cu două exemple.

în primul exemplu, vom obține un instantaneu pentru a putea citi din Baza de date secundară a bazei de date oglindite.

în al doilea exemplu, vom obține instantaneu pentru a inversa o operație de actualizare incorectă.

Exemplu1:

în primul rând, baza de date oglindită trebuie să fie sincronă. Deci, imaginea bazei dvs. de date secundare ar trebui să fie după cum urmează.

apoi creăm instantaneul cu ajutorul scriptului următor. Trebuie să specificați toate fișierele din Baza de date.

în exemplul nostru, au existat două fișiere. Am creat instantaneu pentru aceste două fișiere. Dacă nu sunteți familiarizat cu FileGroup și File, puteți citi articolul meu „Cum se creează o bază de date pe SQL Server”.

1
2
3
4
5

creați baza de date AdventureWorks2014_Snapshot pe
(NAME= AdventureWorks2012_Data, FILENAME = ‘C:\DB\Data\AdventureWorks2012_Data.ss’ ),
( nume = AdventureWorks2014_Deneme, Nume fișier = ‘C:\DB\Data\AdventureWorks2014_Deneme.ss’ )
ca instantaneu al AdventureWorks2014;
merge

Am primit următorul script de la msdn.

cu următorul script, puteți găsi dimensiunea instantaneului pe disc și dimensiunea maximă pe care o poate crește.

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

selectați DB_NAME (sd.source_database_id) ca ,
sd.name ca ,
mf.name AS,
size_on_disk_bytes/1024 AS,
mf2.dimensiune / 128 ca
din sys.master_files MF
Alăturați-vă sys.baze de date sd
pe mf.database_id = sd . database_id
Alăturați-vă sys.master_files mf2
pe 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)
unde mf. is_sparse = 1
și mf2.is_sparse = 0
ordine de 1;

următorul set de rezultate a revenit când am rulat scriptul. Am setat dimensiunea acestor două fișiere de date la 256 mb.

de aceea instantaneul poate crește până la maximum 256 MB.

Am creat instantaneul nostru.

puteți citi din instantaneu ca și cum ar fi o bază de date din secțiunea baze de date- > instantanee de baze de date pe SSMS.

în mod normal, nu puteți citi din Baza de date secundară despre oglindire. Dar puteți citi din instantaneul bazei de date secundare.

Example2:

să rulăm scriptul de mai jos în baza de date primară.

1
2
3
4
5

creați baza de date AdventureWorks2014_Snapshot pe
(NAME= AdventureWorks2012_Data, FILENAME = ‘C:\DB\Data\AdventureWorks2012_Data.ss’ ),
( nume = AdventureWorks2014_Deneme, Nume fișier = ‘C:\DB\Data\AdventureWorks2014_Deneme.ss’ )
ca instantaneu al AdventureWorks2014;
merge

după ce faceți instantaneu, ștergeți toate înregistrările din orice tabel cu ajutorul scriptului următor. Șterg înregistrările din tabelul numit Snapshot_deneme pe care l-am creat mai devreme în baza de date AdventureWorks2014.

1
ștergeți din Snapshot_deneme

după procesul de ștergere, puteți restaura înregistrările șterse cu ajutorul scriptului următor.

dar dacă ați făcut o altă operație după ce ați luat instantaneu, veți pierde aceste modificări.

1
2
3

utilizați master
GO
restaurați AdventureWorks2014 din DATABASE_SNAPSHOT = ‘AdventureWorks2014_Snapshot’

dbtut

autor :dbtut

suntem o echipă cu peste 10 ani de gestionare a bazelor de date și experiență BI. Expertizele Noastre: Oracle, SQL Server, PostgreSQL, MySQL, MongoDB, Elasticsearch, Kibana, Grafana.

Lasă un răspuns

Adresa ta de email nu va fi publicată.