Transaktionsprotokoll und Spiegelung - auf der Suche nach einer möglichst dummen Erklärung

8

Zunächst muss ich zugeben, dass ich mit dem Konzept des Transaktionsprotokolls zu kämpfen habe. Ich meine - ich verstehe, dass es das Protokoll aller Transaktionen ist, die in der Datenbank stattfinden, aber wenn es darum geht, es innerhalb einer Aufgabe richtig in den Kontext zu setzen, fehlt mir offensichtlich etwas. Für alle, die die Frage beantworten werden, können Sie die Theorie hinter dem Transaktionsprotokoll erweitern.

Hauptfrage ist - Ich habe SQL Server 2008 und eine 2-GB-Datenbank, die gespiegelt werden muss (hat ein 12-GB-Transaktionsprotokoll). Wenn ich diese Datenbank nicht spiegeln würde, könnte ich vermutlich entweder in den einfachen Modus wechseln oder das Protokoll nach der Sicherung abschneiden. Aber in diesem Fall - was soll ich tun, wenn ich das Transaktionsprotokoll unter Kontrolle halten möchte? Soweit ich weiß, muss ich das gesamte Transaktionsprotokoll führen, wenn ich die Datenbank problemlos spiegeln möchte (führen Sie einfach eine vollständige Sicherung durch).

Gibt es einen Weg daran vorbei? Idealerweise wäre es möglich, eine Sicherung durchzuführen, bei der MDF und LDF jedes Mal in einer Datei gespeichert werden und nach Abschluss der Sicherung das Transaktionsprotokoll (LDF) in der Datenbank auf 0 reduziert wird. Das Problem bei diesem Szenario sind inkrementelle Sicherungen - wenn meine erste Sicherung erfolgt abgeschnittenes Protokoll, ich gehe davon aus, dass die zweite Sicherung auf die erste verweisen muss, wenn ich später spiegeln möchte (dh ich würde nicht nur eine, sondern mehrere Dateien behalten).

Also - kann mich jemand über dieses Thema aufklären? Ich verstehe, dass ich hier versuche, viele Lücken zu schließen, und dass meine vorgeschlagenen "Lösungen" möglicherweise nicht die besten sind, aber ich würde es aufrichtig begrüßen, wenn mich jemand in Transaktionsprotokollen in die richtige Richtung treiben kann, wie sie sich auf die Spiegelung auswirken und am besten übt mit diesen beiden.

nikib3ro
quelle

Antworten:

5

Das Transaktionsprotokoll ist eine wichtige Methode, um Ihre Datenbank in einer bestimmten Zeit wiederherzustellen. Wenn Sie eine große Datenbank> 500 GB haben und Ihre Datenbank aus einer vollständigen Sicherung wiederherstellen müssen, kostet dies sehr viel Zeit. Überlegen Sie auch, wie lange diese Sicherung dauern kann, wenn Sie Ihre Datenbank jedes Mal vollständig sichern.

Ein sehr einfaches Konzept für SQL Server kann sein: Setzen Sie das Wiederherstellungsmodell Ihrer Datenbank auf Vollständig

Erstellen Sie einen Wartungsplan (1) in SQL Server:

  • Führen Sie FullBackup jede Woche durch, möglicherweise in D: \ yourbackup \ FullDBBackup.bak
  • Führen Sie alle zwei Tage eine differenzielle Sicherung in D: \ yourbackup \ DiffBackup.bak durch
  • Führen Sie alle zwei Stunden eine Sicherung Ihres Transaktionsprotokolls in D: \ Yourbackup \ Tranlogbackup.trn durch

Erstellen Sie einen Wartungsplan (2) in SQL Server:

  • Löschen Sie alle älteren Dateien 8 Tage von D: \ yourBackup * .bak
  • Löschen Sie alle älteren Dateien 3 Tage von D: \ yourBackup * .trn

In diesem Fall können Sie Ihre Datenbank in einer bestimmten Zeit sehr schnell und einfach wiederherstellen. SQL Server verwaltet Ihre "Backup" -Dateien automatisch. Ältere Dateien werden nach Ihrem spezifischen Zeitraum gelöscht.

Ich würde vorschlagen, dass Sie hier etwas über das SQL Server-Transaktionsprotokoll lesen:

http://www.sqlservercentral.com/articles/Design+and+Theory/63350/

Um die Wartungspläne in SQL Server zu verwenden, fragen Sie einfach BING / google: D.

Sie sollten eine kleine Test-Datenbank erstellen und diese testen, bevor Sie in die Produktion gehen

Shanky
quelle
Ich habe kein Problem mit vollständigen Sicherungen und Zeit, da ich das gesamte System stoppen kann, bis sie fertig sind. Eine Frage zu Ihrer Antwort: Schneide ich das Transaktionsprotokoll in diesem Szenario ab? Wenn nicht, dann verstehe ich, dass ich nur die neueste Version von FullDBBackup.bak benötige, um die Datenbank wieder zu sichern? Ich kümmere mich nicht um bestimmte Zeitpunkte - alles, was mich interessiert, ist die neueste Version von DB, die ich bekomme, wenn ich ein Backup mache. Bedeutung - Ich benötige keine Transaktionsprotokolle. Ich behalte sie nur wegen der Spiegelung. Gibt es einen Weg, das zu umgehen?
Nikib3ro
2
1. Sie können Ihr Protokoll nicht abschneiden: D 2. Wenn Sie eine Sicherungskopie Ihres Übertragungsprotokolls erstellen, gibt SQL Server diesen Speicherplatz für die Wiederverwendung in Ihrer Protokolldatei frei. Testen Sie einfach dbcc sqlperf ('logpsace') vor dem Backup und machen Sie dasselbe nach dem Backup. und am Ende brauchen Sie ein Transaktionsprotokoll ... testen Sie einfach mein Beispiel
Ich muss endlich Ihre Vorschläge in der Testumgebung umsetzen und bis jetzt gefällt mir, was ich sehe. Bitte lassen Sie mich wissen, wenn ich dieses Recht verstehe. Wenn ich jetzt die Datenbank wiederherstellen muss, würde ich zuerst die von mir erstellte vollständige Sicherung verwenden und dann mithilfe einer Kombination aus differenziellen Sicherungen und Transaktionsprotokollen meine Datenbank wiederherstellen bestimmter Zeitpunkt? Habe ich recht? Und ich gehe auch davon aus, dass ich zum Spiegeln nur den Server stoppen und eine vollständige Sicherung durchführen müsste? Oder benötige ich Transaktionsprotokolle, um die Spiegelung einzurichten? Nochmals vielen Dank für all Ihre Hilfe und Antworten!
Nikib3ro
3

Um die Spiegelung nutzen zu können, muss sich die Datenbank im vollständigen Wiederherstellungsmodus befinden und Transaktionsprotokollsicherungen durchführen, damit die Protokolldatei nicht wächst. Wenn Sie die Protokollsicherungen nicht benötigen, löschen Sie sie nach x Stunden mit einem Wartungsplan. Sie müssen jedoch erstellt werden.

Um die Umgebung zu bereinigen, sollten Sie die Spiegelung entfernen, den Wiederherstellungsmodus auf einfach umschalten, die Größe der Protokolldatei über den empfohlenen Paul Randal Way verringern , in den vollständigen Wiederherstellungsmodus zurückkehren, vollständige und Protokollsicherungen einrichten und dann Ihre neu initialisieren Spiegel. Sie können versuchen, die Protokollgröße zu verringern, während die Spiegelung vorhanden ist, aber es ist viel einfacher, sie zuerst zu entfernen. 1 GB sollte keine schlechte Datenbank sein, um sie neu zu initialisieren.

Jason Cumberland
quelle