Datenbank duplizieren und auf dem neuesten Stand halten - Replikation oder SSIS?

7

Ich möchte eine Datenbank auf demselben Server duplizieren und auf dem neuesten Stand halten, indem ich entweder einmal am Tag einen geplanten Dienst ausführe oder SQL Server 2008 dies intern erledigt.

Wir müssen keine Daten transformieren, sondern nur von DatabaseA nach DatabaseB kopieren (aber niemals von DatabaseB nach DatabaseA).

Würden Sie dies unter den Replikationsdiensten oder einem SSIS-Job einrichten? Was sind die Vor- und Nachteile von jedem?

Der Grund dafür ist, dass ich eine Staging-Anwendung haben kann, die in eine Staging-Datenbank liest und schreibt, aber dann jede Nacht alle neuen Daten aus der Live-Datenbank in die Staging-Datenbank gezogen werden.

Die Live-Datenbank wird täglich mit neuen Ereignissen aktualisiert, und wir möchten sicherstellen, dass die Staging-Umgebung der Live-Umgebung so weit wie möglich ähnelt.

Danke, Greg.

Gfyans
quelle
Gleiche oder andere Instanz?
RateControl

Antworten:

7

Ich würde nur sichern / wiederherstellen. Dies bewirkt dasselbe, validiert Ihre Wiederherstellungsgeschichte und kann auch problemlos Schema- / Objektänderungen verarbeiten - ohne die vorhandene Datenbank wirklich übermäßig zu belasten (Sie sichern sie bereits, oder?). Wenn es sich auf einem anderen Server befindet (oder wenn Sie sie jemals aufgeteilt haben), empfehle ich möglicherweise den Protokollversand im Gegensatz zur Spiegelung oder Replikation. Auf diese Weise können Sie festlegen, wie lange zwischen den Protokollsicherungen, wie lange die Wiederherstellung verzögert werden soll und welche Art von Wartungsfenster usw. Natürlich funktioniert auch auf einem anderen Server eine sehr einfache Sicherung / Wiederherstellung einwandfrei.

Aaron Bertrand
quelle
Vielen Dank. Genau das möchte ich mit minimalem Aufwand tun.
Gfyans
4

Ich hätte ein Wiederherstellungsskript

Und ich würde es auch das neueste "echte" Backup wiederherstellen lassen: Auf diese Weise testen Sie auch die Integrität der Backup-Datei (natürlich könnte es später beschädigt werden, aber es ist schön zu haben). Dieses neue Skript sollte kein eigenes Backup erstellen.

Wir haben dies in unserem aktuellen Shop, stellen es jedoch in einer nicht produktiven Umgebung wieder her

Ich würde weder SSIS noch Replikation verwenden: Sie möchten die gesamte Datenbank, also stellen Sie sie einfach wieder her.

gbn
quelle
2

Wenn Sie über eine Enterprise Edition verfügen, können Sie diese verwenden. database snapshotsDies ist ein sehr schneller Vorgang. Andernfalls können Sie TSQL-Skripte erstellen, um Ihre Datenbank zu sichern und wiederherzustellen, und diese Skripte im SQL-Agenten planen. Grobe Übersicht über die Schritte: Erstellen Sie ein SQL-Skript zum Sichern Ihrer Datenbank. Planen Sie die Ausführung dieses Sicherungsskripts während eines Zeitraums mit geringer Nutzung. Erstellen Sie dann ein weiteres SQL-Skript, um Ihre Datenbank aus der im vorherigen Schritt erstellten Sicherung wiederherzustellen. Planen Sie die Ausführung des Wiederherstellungsskripts zu der Tageszeit, zu der Sie eine aktualisierte Kopie der Datenbank wünschen.

Die Replikation wird häufiger für verteilte Datenbanken verwendet und ist möglicherweise vorerst ein Overkill.

Stanley Johns
quelle
Wie kann er einen Datenbank-Snapshot verwenden, wenn die Staging-Anwendung auf die Kopie schreiben muss, ohne die Quelle zu beeinflussen?
Aaron Bertrand
@ Aaron Bertrand du hast recht. Ich habe den Teil verpasst, in den die Staging-Datenbank geschrieben werden muss. Schnappschüsse sind schreibgeschützte Kopien. Vielen Dank.
Stanley Johns
1

Wenn es sich auf demselben Computer und derselben Instanz befindet, würde ich Snapshots verwenden. Es ist hauptsächlich keine Wartung enthalten. Sie müssen sich nur um den Speicherplatz auf dem Laufwerk kümmern, den Sie eingerichtet haben. Wenn es sich um eine häufig verwendete Datenbank handelt, wächst sie ziemlich schnell.

Wenn es sich auf einem anderen Computer befindet, würde jeder Prozess ausreichen, der den Protokollversand oder sogar die einfache Wiederherstellung der letzten Sicherungsdatei simuliert. Ich stimme Stan zu, dass die Replikation oder ein SSIS-Prozess ein Overkill für Ihre Situation wäre. Die Replikation hat zu viele Belastungen, um für diese einfache Aufgabe verwendet zu werden, und SSIS wäre nur eine Überkomplikation.

Marian
quelle
Wie kann er einen Datenbank-Snapshot verwenden, wenn die Staging-Anwendung auf die Kopie schreiben muss, ohne die Quelle zu beeinflussen?
Aaron Bertrand
@ Aaron: Ich glaube, ich habe den letzten Teil der Frage über das Schreiben in diese Datenbank nicht gelesen :-). In diesem Fall ist der Schnappschuss natürlich ungültig und ich würde mich an Ihrer Lösung orientieren, sichern und wiederherstellen. Übrigens, wie hilft der Protokollversand dabei? In LS befinden sich die Datenbanken entweder im Wiederherstellungsmodus oder im Standby-Modus, schreibgeschützt ... :-).
Marian
Sie können das Schiff protokollieren, bis Sie bereit sind, die sekundäre Datenbank als Staging-Datenbank zu verwenden, und dann mit Wiederherstellung wiederherstellen. Wenn Sie damit fertig sind, können Sie den Protokollversand einfach neu initialisieren. Genau so habe ich in der Vergangenheit vollautomatisierte Lösungen implementiert.
Aaron Bertrand