Datenbank-Snapshot ist die Erstellung eines unveränderlichen Bildes der Datenbank.
Wenn ich es anhand eines Beispiels erkläre, wird es klarer.
Zum Beispiel nehmen wir den Snapshot der AdventureWorks2014-Datenbank. Wir lesen diesen Schnappschuss durch. An der AdventureWorks2014-Datenbank wurden noch keine Änderungen vorgenommen. Unsere Auswahlen gehen zur ursprünglichen Datenbank, da sich die ursprüngliche Datenbank nicht ändert.
Wenn Änderungen in der ursprünglichen Datenbank auftreten, werden diese Änderungen für Snapshots in einen dedizierten Speicherplatz auf der Festplatte geschrieben (Sparse-Dateien genannt).
Wenn wir die Daten lesen möchten, wenn sich die Daten in der ursprünglichen Datenbank geändert haben, wird die unveränderte Version der Daten aus der Sparse-Datei gelesen. Auf diese Weise wird das Foto intakt.
Obwohl es keinen Speicherplatz beansprucht, sobald wir einen Schnappschuss erhalten, nimmt die Größe der spärlichen Dateien zu, wenn die Änderungen in der ursprünglichen Datenbank zunehmen. Wenn die Größe der Sparse-Dateien zunimmt und kein Speicherplatz mehr auf der Festplatte vorhanden ist, wird der Snapshot verdächtig und Sie müssen den Snapshot löschen.
Es wird hauptsächlich mit Spiegelungstechnologie verwendet.
Ich schlage vor, Sie lesen meinen Artikel „Datenbankspiegelung auf SQL Server“. Beim Spiegeln können wir nicht aus der sekundären Datenbank lesen. Wenn wir aus der sekundären Datenbank lesen möchten, können wir dies durch einen Snapshot der sekundären Datenbank tun.
Auf diese Weise belasten wir den Bericht in der primären Datenbank nicht, indem wir unsere Berichtsabfragen aus der sekundären Datenbank durchführen.
Oder Sie können den Snapshot der Datenbank abrufen, bevor Sie einen Batch-Aktualisierungs- oder Löschvorgang ausführen. Ein falscher Aktualisierungs- oder Löschvorgang kann mit Snapshot rückgängig gemacht werden. Es wäre eine viel schnellere Methode als die Rückkehr aus dem Backup.
Snapshot sollte sich auf derselben Instanz wie die Datenbank befinden.
Fahren wir mit zwei Beispielen fort.
Im ersten Beispiel erhalten wir einen Snapshot, um aus der sekundären Datenbank der gespiegelten Datenbank lesen zu können.
Im zweiten Beispiel erhalten wir Snapshot, um einen falschen Aktualisierungsvorgang rückgängig zu machen.
Beispiel1:
Zunächst muss die gespiegelte Datenbank synchron sein. Das Image Ihrer sekundären Datenbank sollte also wie folgt aussehen.
Wir erstellen dann den Snapshot mit Hilfe des folgenden Skripts. Sie müssen alle Dateien in der Datenbank angeben.
In unserem Beispiel gab es zwei Datei. Wir haben einen Snapshot für diese beiden Dateien erstellt. Wenn Sie mit FileGroup und File nicht vertraut sind, können Sie meinen Artikel „So erstellen Sie eine Datenbank auf SQL Server“ lesen.
1
2
3
4
5
|
DATENBANK AdventureWorks2014_Snapshot AUF
ERSTELLEN (NAME = AdventureWorks2012_Data, DATEINAME = ‚C:\DB\Data\AdventureWorks2012_Data.ss‘ ),
( NAME = AdventureWorks2014_Deneme, DATEINAME = ‚C:\DB\Data\AdventureWorks2014_Deneme.ss‘ )
ALS MOMENTAUFNAHME VON AdventureWorks2014;
GEHE ZU
|
Ich habe das folgende Skript von msdn erhalten.
Mit dem folgenden Skript können Sie die Größe des Snapshots auf der Festplatte und die maximale Größe ermitteln, die er vergrößern kann.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
WÄHLEN SIE DB_NAME(sd.source_database_id) ALS ,
sd.name WIE ,
mf.name ALS ,
size_on_disk_bytes/1024 ALS ,
mf2.größe/128 ALS
VON sys.master_files mf
BEITRETEN sys.datenbanken sd
AUF mf.database_id = sd.database_id
BEITRETEN sys.master_files mf2
AUF SD.source_database_id = mf2.database_id
UND mf.datei-ID = mf2.file_id
QUER GELTEN sys.dm_io_virtual_file_stats(sd.database_id, mf.file_id)
WOBEI mf.is_sparse = 1
UND mf2.is_sparse = 0
SORTIEREN NACH 1;
|
Die folgende Ergebnismenge wurde zurückgegeben, als ich das Skript ausführte. Ich habe die Größe dieser beiden Datendateien auf 256 MB festgelegt.
Aus diesem Grund kann der Snapshot auf maximal 256 MB anwachsen.
Wir haben unseren Snapshot erstellt.
Sie können aus Ihrem Snapshot lesen, als wäre es eine Datenbank aus dem Abschnitt Datenbanken-> Datenbank-Snapshots auf SSMS.
Normalerweise können Sie beim Spiegeln nicht aus der sekundären Datenbank lesen. Sie können jedoch aus dem Snapshot der sekundären Datenbank lesen.
Beispiel2:
Führen wir das folgende Skript in der primären Datenbank aus.
1
2
3
4
5
|
DATENBANK AdventureWorks2014_Snapshot AUF
ERSTELLEN (NAME = AdventureWorks2012_Data, DATEINAME = ‚C:\DB\Data\AdventureWorks2012_Data.ss‘ ),
( NAME = AdventureWorks2014_Deneme, DATEINAME = ‚C:\DB\Data\AdventureWorks2014_Deneme.ss‘ )
ALS MOMENTAUFNAHME VON AdventureWorks2014;
GEHE ZU
|
Nachdem Sie einen Snapshot erstellt haben, löschen Sie alle Datensätze in einer Tabelle mit Hilfe des folgenden Skripts. Ich lösche Datensätze aus der Tabelle Snapshot_deneme , die ich zuvor in der AdventureWorks2014-Datenbank erstellt habe.
1
|
Aus Snapshot_deneme löschen
|
Nach dem Löschvorgang können Sie Ihre gelöschten Datensätze mit Hilfe des folgenden Skripts wiederherstellen.
Wenn Sie jedoch nach dem Erstellen eines Snapshots einen anderen Vorgang ausgeführt haben, gehen diese Änderungen verloren.
1
2
3
|
USE master
GO
DATENBANK AdventureWorks2014 AUS DATABASE_SNAPSHOT = ‚AdventureWorks2014_Snapshot‘ WIEDERHERSTELLEN‘
|
Autor: dbtut
Wir sind ein Team mit über 10 Jahren Datenbankmanagement- und BI-Erfahrung. Unsere Expertisen: Oracle, SQL Server, PostgreSQL, MySQL, MongoDB, Elasticsearch, Kibana, Grafana.