Ich habe derzeit eine geplante Aufgabe, die jede Nacht um 2 Uhr morgens ausgelöst wird und SQLCMD.exe aufruft und ein SQL-Skript zur Ausführung für die Sicherung übergibt (siehe unten). Wir sind ein ziemlich kleines Unternehmen mit wachsenden Anforderungen aufgrund des starken Wachstums auf der Geschäftsseite. Der Verlust von 1 Tag Daten zu diesem Zeitpunkt würde Zehntausende von Dollar kosten, gegenüber ein paar Hundert um diese Zeit im letzten Jahr. Was kann ich am besten tun, um häufigere Sicherungen zu erhalten, bis ich diese DB-Plattform auf eine andere Lösung migrieren kann, bei der die Datenspiegelung mit großer Redundanz wie SQL Azure erfolgt? Erzwingt dieses Skript unten, dass die Datenbank offline ist? Kann ich dieses Skript mit Benutzern ausführen, die mit der Datenbank interagieren?
USE CompanyCRM;
GO
BACKUP DATABASE CompanyCRM
TO DISK = 'D:\CRMBackups\CompanyCRMCRM.Bak'
WITH FORMAT,
MEDIANAME = 'CompanyCRM_Backup',
NAME = 'Full Backup of CompanyCRM';
GO
Aktualisieren
Wow, offensichtlich eine viel engagiertere DBA-Community hier als auf SO. Vielen Dank für das bisherige Feedback. Es fehlt nur noch das "Wie". Ich habe den obigen SQL-Befehl gezeigt, mit dem ich tägliche Sicherungen durchführe, aber die Beispiele für inkrementelle Protokollsicherungen sind MIA. Dies ist keine große Datenbank, sie wird derzeit auf SQLExpress ausgeführt. Wenn ich HA oder SQL Azure sage, beziehe ich mich speziell auf die vorhandene Architektur, die wir als kleines Unternehmen nicht haben. Diese Instanz wird derzeit auf unserem EINZIGEN Server ausgeführt. Wenn dieser Server abstürzt, wird unsere Zeit zur Wiederherstellung zu einem Knackpunkt. Aus diesem Grund wird SQL Azure attraktiv.
quelle
Antworten:
BEARBEITEN Sie von Ihrem Update
Da Sie gesagt haben, dass Sie Daten im Wert von 1 Tag verlieren können, würde ich die Datenbanken einfach in den EINFACHEN Wiederherstellungsmodus versetzen. Sie könnten dann jeden Morgen und / oder Abend einen FULL machen. Wenn Sie sich tagsüber versichern möchten, können Sie eine differenzielle Sicherung der Datenbank durchführen, eine davon nur für den Fall. Dadurch werden alle Änderungen erfasst, die seit der vollständigen Sicherung vorgenommen wurden. Wenn ich einen Zeitrahmen kenne, in dem viel eingegeben wird, kann ich diese Art der Sicherung nach Abschluss dort ablegen. Dies kann den Benutzern Zeit bei der Wiederherstellung sparen, sodass sie keine zusätzliche Dateneingabe vornehmen müssen.
Da dies Ihr einziger Server ist, würde ich sicherstellen, dass Sie DBCC CHECKDB für die Datenbanken ausführen. Backups nützen nichts, wenn Sie feststellen, dass sie beschädigt sind (ich denke, jemand hat dies auch erwähnt). Sie können wahrscheinlich einige Skripte finden, um eine geplante Aufgabe einzurichten und das SQL ERRORLOG auf die DBCC-Nachricht zu überprüfen, um Fehler abzufangen. SQL Server warnt Sie nicht nativ vor Fehlern, die von DBCC-Nachrichten zurückgegeben werden. Es sei denn, Sie überprüfen jedes Mal manuell, ob ein Skript dies tut.
Der Befehl zur differenziellen Sicherung:
quelle
quelle
Das erste, was Sie tun müssen, ist herauszufinden, wie viele Daten Sie sich leisten können, um zu verlieren. Bis dahin wissen Sie nicht, wie oft die Datenbank gesichert werden soll. Dies ist keine Nummer, die Sie sich einfallen lassen sollten. Dies muss das Unternehmen (oder der CEO eines kleineren Unternehmens) entscheiden. Die erste Zahl, mit der sie zurückkommen, ist 0 Minuten. Was getan werden kann, aber es wird sehr teuer sein. In Wirklichkeit beträgt die kleinste Datenmenge, für die Sie Backups erstellen können, etwa alle 2 Minuten. Wenn die Datenmenge im System klein genug ist, können Sie jede Minute Backups durchführen.
Um Transaktionsprotokollsicherungen durchzuführen, müssen Sie die Datenbank in den vollständigen Wiederherstellungsmodus versetzen.
Wenn Sie es sich leisten können, Daten im Wert von 5 Minuten zu verlieren, möchten Sie wahrscheinlich täglich vollständige Sicherungen und Transaktionsprotokollsicherungen alle 5 Minuten durchführen. Wenn Sie Daten im Wert von 15 Minuten verlieren können, sollten Sie alle 15 Minuten vollständige Sicherungen und Transaktionsprotokollsicherungen durchführen.
Eine andere Möglichkeit wäre, wöchentliche vollständige Sicherungen, tägliche differenzielle Sicherungen und Transaktionsprotokollsicherungen alle x Minuten durchzuführen, wie oben beschrieben.
Beachten Sie, dass je öfter Sie Sicherungen durchführen müssen, desto mehr Dateien müssen Sie im Falle eines Datenbankfehlers oder eines Datenlöschvorgangs wiederherstellen. Es kann sinnvoll sein, den ganzen Tag über differenzielle Sicherungen durchzuführen, um die für die Wiederherstellung der Datenbank erforderliche Zeit zu verkürzen.
Alle Sicherungen, die die BACKUP-Datenbank und die BACKUP LOG-Anweisung verwenden, werden online durchgeführt und hindern Benutzer nicht daran, auf die Datenbank zuzugreifen.
quelle
Nehmen wir an, Sie haben ein gemeinsames Geschäftsszenario mit Ihrer geschäftigsten Zeit: Montag bis Freitag von 9 bis 17 Uhr. Dann würde ich vorschlagen: Vollständiges Backup am Sonntagabend. Differenzielle Sicherungen um 8, 18 und 1 Uhr (um die Wiederherstellungszeit zu verkürzen). Protokollieren Sie Backups stündlich oder je nach den Anforderungen Ihres Unternehmens.
Abhängig von Ihrer Aufbewahrungsdauer sollten Sie über einen automatischen Bereinigungsjob verfügen, um die alten Sicherungsdateien zu löschen. All dies kann mithilfe von SQL-Wartungsplänen erstellt werden. Überprüfen Sie diesen Link für SQL 2005 .
Sie sollten Ihre Backups auf einer redundanten Festplatte (gespiegelt) speichern, oder Sie können Bänder für die externe Speicherung verwenden. Benutzer können weiterhin am System arbeiten, während die Sicherungen ausgeführt werden.
quelle
Ich würde nicht jede Nacht ein vollständiges Backup machen. Wenn es sich um eine große Datenbank handelt, kann dies sehr lange dauern, ganz zu schweigen davon, dass viel Platz auf den Medien belegt ist. Führen Sie jedes Wochenende eine vollständige Sicherung und jede Nacht eine differenzielle Sicherung durch. Führen Sie dann jede Stunde oder jede halbe Stunde eine Transaktionsprotokollsicherung durch (vorausgesetzt, Ihre Datenbank wird vollständig wiederhergestellt). Stellen Sie jedoch sicher, dass sich diese .bak- und .trn-Dateien bei einem Festplattenfehler auf einer separaten Festplatte befinden.
quelle
Können Sie Ihren Sicherungsordner nachts in der Cloud synchronisieren, um externen Speicherplatz zu erhalten? Da ich mir ziemlich sicher bin, dass dies für ein Gesundheitsunternehmen gilt, gibt es welche, die für die Einhaltung von HiPA sicher genug sind? Oder vielleicht einfach super verschlüsseln?
Setzt das Skript mindestens eine Kopie des Backups auf eine Netzwerkfreigabe? Auf diese Weise, wenn die physische Box explodiert ...
quelle