Wie kann ich überprüfen, ob eine vollständige Datenbankwiederherstellung die genaue Quellendatenbank in SQL Server widerspiegelt?

7

Wir nehmen unseren alten SQL Server 2000 Ent außer Betrieb. Instanz zugunsten von SQL Server 2008 R2 Ent. Mein geplanter Migrationspfad lautet:

  1. Clientverbindungen beenden (2000)
  2. Vollständige Sicherung (2000)
  3. Wiederherstellen (2008 R2)

Ich werde gebeten, einen schlüssigen Beweis dafür zu liefern, dass jede einzelne Transaktion "es geschafft" hat und dass die Daten eine exakte Nachbildung dessen sind, was auf der 2000-Instanz vorhanden war.

Ich hoffe, dass ich die folgende Dokumentation als Beweis verwenden kann:

Wenn dies jedoch nicht ausreicht, kann ich mir nur vorstellen, jede Zeile jeder Tabelle jeder Datenbank zu durchsuchen, eine Prüfsumme (in beiden Fällen) zu berechnen und die Zeilenanzahl für jede Tabelle in jeder Datenbank abzurufen.

Gibt es eine bessere Möglichkeit, die Überprüfungskriterien für "exakte Replikate" zu erfüllen? Ich bin auch offen für bessere Dokumentation.

Swasheck
quelle

Antworten:

9

Wenn Sie die Datenbanksicherung durchführen, ist die letzte LSN in der Quelle X. Wenn eine Aktivität auftritt (z. B. ein automatisierter Prüfpunkt), wird die Quell-LSN auf X + n weitergeleitet. Wenn eine Aktivität an der Quelle aufgetreten ist und nicht in der Sicherung erfasst wurde, hinterlässt sie einen Abdruck im Quellprotokoll, irgendwo zwischen LSN X und X + n. Mit fn_dblogone können Sie im Protokoll nachsehen, ob eine solche Aktivität aufgetreten ist.

Eine einfache Möglichkeit, um sicherzustellen, dass nach der Sicherung keine solche Aktivität auftritt, besteht darin, die Datenbank unmittelbar nach der Sicherung auf read_only zu setzen. Um zu verhindern, dass sich Aktivitäten zwischen der Sicherung und der Änderung von read_only einschleichen, können Sie Verbindungen deaktivieren oder die Datenbank in den Einzelbenutzermodus versetzen und den Server sogar im Einzelbenutzermodus starten .

Ein Verfahren wie das folgende sollte also ziemlich kugelsicher sein:

  • Starten Sie den Quellserver im Einzelbenutzermodus neu ( -m)
  • Verbinden Sie sich und erstellen Sie das Backup
  • Ändern Sie die Datenbank in read_only
  • Stellen Sie die Datenbank auf dem neuen Server wieder her
  • Führen Sie alle Tests aus, die Sie auf dem neuen Server haben
  • Verbinden Sie Anwendungen mit einem neuen Server
  • Außerbetriebnahme oder Neustart des alten Servers
Remus Rusanu
quelle
3

Ich würde sagen:

  1. Deaktivieren Sie die Verbindungen auf dem 2000-Server.
  2. Erstellen Sie eine Sicherung auf dem 2000-Server und überprüfen Sie sie anhand der Datenbank.
  3. Auf dem Server 2008 wiederherstellen.
  4. Stellen Sie sicher, dass die Verbindungen auf dem 2000-Server weiterhin deaktiviert sind.
  5. Ändern Sie den Namen auf dem 2000-Server und deaktivieren Sie den SQL Server-Dienst.
  6. Melden Sie sich ab, dass Sie die verifizierte Kopie der Datenbank auf dem neuen Server wiederhergestellt haben.
  7. Starten Sie den neuen Server.

Ich kann nicht erkennen, wie möglicherweise Transaktionen auf dem neuen Server fehlen, vorausgesetzt, dass während und nach dem Sicherungsvorgang keine Transaktionen auf dem Quellcomputer stattfinden.

Zum Beweis können Sie nur die Daten in der Quell- und Zieldatenbank vergleichen. Dies ist jedoch ein totaler Overkill, da die Sicherung und Überprüfung genau das tun wird.

Max Vernon
quelle
2
Ich könnte versuchen, sie in ein bestimmtes RedGate-Tool zu überreden.
Swasheck
Idera hat auch ein Datenvergleichstool. Dies führt jedoch nur einen Schemavergleich durch und durchläuft dann alle Zeilen in jeder Tabelle.
Max Vernon
Ich würde Redgate aufgrund meiner Erfahrung bevorzugen, es ist flexibel und macht einen tollen Job. Es verfügt auch über Befehlszeilenfunktionen, um den Vergleich von Schema und Daten zu automatisieren. Obwohl ich mich (in Ihrer Situation) nicht dafür entscheiden würde, da @MaxVernon bereits erwähnt hat, dass es nur übertrieben sein wird.
Kin Shah
1

Es gibt viele Möglichkeiten, dies zu tun.

ein. Sichern Sie von der 2000-Instanz und stellen Sie sie auf der 2008R2-Instanz wieder her. Dies erfordert Ausfallzeiten Ihrer Anwendung, bis Sie die Sicherung erfolgreich auf der 2008R2-Instanz wiederherstellen.

Außerdem müssen Sie alle Verbindungen zur 2000-Instanz trennen, da Sie die Daten nicht verlieren möchten.

b. Richten Sie den Protokollversand von 2000 bis 2008R2 ein. Bei einem Failover müssen Sie lediglich eine Endprotokollierung durchführen und auf der sekundären Instanz (2008R2) wiederherstellen und dann die Datenbank online schalten.

Option b erfordert weniger Ausfallzeiten.

BEARBEITEN:

Sie können den Protokollversand zwischen SQL 2000 und SQL 2005 / 2008R2 durchführen. ABER Sie können im STANDBY-Modus nicht sekundär bleiben.

Einige Verweise zum Implementieren des Protokollversands in SQL 2000. Beachten Sie, dass dies auch für das Einrichten des Protokollversands von 2000 bis 2005/2008 / 2008R2 gilt.

Protokollversand implementieren

Migrieren einer SQL Server 2000-Protokollversandkonfiguration auf SQL Server 2008

Benutzerdefinierter Protokollversand

Logshipping mit Powershell

Kin Shah
quelle