Häufigeres Sichern von SQL DB

10

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.

RSolberg
quelle
Ich habe meine Antwort auf Ihr Update bearbeitet und hoffe, es hilft

Antworten:

5

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:


USE CompanyCRM; 
GO 
BACKUP DATABASE CompanyCRM 
   TO DISK = 'D:\CRMBackups\CompanyCRMCRM_diff.Bak'    
WITH FORMAT, DIFFERENTIAL,
MEDIANAME = 'CompanyCRM_Backup',       
NAME = 'Full Backup of CompanyCRM'; 
GO 

quelle
1
@Shawn: OP sagte, dass "der Verlust von 1 Tag Daten zu diesem Zeitpunkt Zehntausende von Dollar gegenüber ein paar Hundert im letzten Jahr kosten würde". Wo hat er gesagt, dass er Daten im Wert von 1 Tag verlieren kann?!
Marian
8
  • Sicherungen in SQL Server stören nicht. Dh die Datenbank bleibt betriebsbereit. Lesen Sie die Dokumentation.
  • Führen Sie jeden Tag eine vollständige Sicherung durch, gefolgt von ausgelieferten (abgeschriebenen) LOG-Sicherungen (wieder hat die Dokumentation ... Dokumentation) regelmäßiger - etwa alle 15 Minuten.
TomTom
quelle
4
Ich denke, Backup ist etwas, für das Sie kein Howto benötigen, aber ein vollständiges Lesen der Dokumentation - es ist geschäftskritisch UND es ist - ernsthaft - wichtig. Eier nicht nach Art kochen. Mieten Sie einen Profi.
TomTom
2
Schade, dass ich auf dieser Seite keine Antworten abgeben kann ...
RSolberg
1
@RSolberg: Die Antwort von TomTom ist gültig, zusammen mit den anderen Ratschlägen, die Sie bereits erhalten haben. Ich würde vorschlagen, dass Sie nicht erwarten, dass einer der Responder Ihnen wirklich die grundlegende Syntax der Sicherung zeigt. Obwohl ich sehe, dass Shawn so freundlich war, das zu tun. Das Entwerfen einer BACKUP-Strategie reicht nicht aus. Sie müssen es mit einer RESTORE-Strategie koppeln, damit alles gültig ist, wenn Sie es benötigen.
Marian
2
@ RSolberg: Entschuldigung, dass du sauer bist. Dies ist nicht beabsichtigt. Aber wie hat diese Community nicht geholfen? Sie haben gute und gültige Antworten (und Kommentare). Ihre eigene Nachricht lautete: "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." Sie benötigen also eine solide Backup- und Wiederherstellungsstrategie, damit Sie nicht dorthin gelangen. Eine solide Strategie beruht darauf, die Grundlagen sehr gut zu kennen. Was vom Lesen und Verstehen des Handbuchs herrührt. Entschuldigung, wenn Sie etwas anderes verstanden haben!
Marian
2
Ich stimme @RSolberg zu, dass die meisten Antworten hier nicht zeigen, wie es geht, aber das liegt auch daran, dass die Frage im Detail fehlte, "was" Sie Russell nicht verstanden haben. Sie müssen uns etwas mehr darüber erzählen, was Sie brauchen, aber ich stimme Ihnen zu, dass es auf der Website hier nicht um "RTFM n00b" gehen soll. Wie Sie bereits betont haben, haben Sie 10.000 für den Stapelüberlauf , sodass Sie sicher verstehen, dass Kommentare markiert werden, die unhöflich oder störend sind. In Zukunft sollten Sie dies eher tun, als frustriert zu überkochen.
Jcolebrand
6

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.

mrdenny
quelle
Ich kann tatsächlich ziemlich gut einschätzen, wie viele Daten wir verlieren können. Kleine Unternehmen verlangen von den Leuten, dass sie viele Hüte tragen, da der CIO I sich täglich mit Geschäftsentscheidungen befasst.
RSolberg
1
Das wird die Diskussion dann viel kürzer machen.
Mrdenny
3

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.

Stanley Johns
quelle
2

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.

Thomas Stringer
quelle
Tags gingen verloren, dies ist keine riesige Datenbank. Es wird derzeit auf einer SQLExpress-Instanz ausgeführt.
RSolberg
1
Zehntausende von Dollar mit Express? Interessant!
Andrei Rînea
Nicht wirklich. Je nachdem, was Sie speichern (keine Texte, keine Binärdateien) - das sind 10 Gigabyte Daten. Sie können ein Buchhaltungssystem für ein großes Unternehmen - ein ernsthaft großes Unternehmen - in 10 Gigabyte betreiben. Ein Online-Shop mit 100.000 Bestellungen pro Tag kann die Shop-Seite problemlos in 10 Gigabyte erledigen.
TomTom
1

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
Ja zu all dem oben genannten. Wir sichern tatsächlich auf einem gespiegelten Netzwerklaufwerk und kopieren Daten aus dieser Umgebung in ein sicheres Rechenzentrum.
RSolberg