{"id":208,"date":"2006-10-29T17:05:16","date_gmt":"2006-10-29T15:05:16","guid":{"rendered":"http:\/\/www.glorf.it\/blog\/2006\/10\/29\/sql-talk\/vorschlaege-zur-datensicherung-mit-sql-server-teil-3-online-vollsicherung"},"modified":"2006-10-29T17:05:16","modified_gmt":"2006-10-29T15:05:16","slug":"vorschlaege-zur-datensicherung-mit-sql-server-teil-3-online-vollsicherung","status":"publish","type":"post","link":"http:\/\/www.glorf.it\/blog\/2006\/10\/29\/sql-talk\/vorschlaege-zur-datensicherung-mit-sql-server-teil-3-online-vollsicherung","title":{"rendered":"Vorschl&#228;ge zur Datensicherung mit SQL-Server &#8211; Teil 3: Online-Vollsicherung"},"content":{"rendered":"<p>Im <a href=\"http:\/\/www.glorf.it\/blog\/2006\/09\/03\/sql-talk\/vorschlaege-zur-datensicherung-mit-sql-server-teil-1-ueberblick\">ersten Teil<\/a> der Serie \u201cVorschl&#228;ge zur Datensicherung mit SQL-Server\u201d habe ich ein paar Dinge zum Umfeld und zum Verst&#228;ndnis geschrieben. Im zweiten Teil beschrieb ich das <a href=\"http:\/\/www.glorf.it\/blog\/2006\/09\/08\/sql-talk\/vorschlaege-zur-datensicherung-mit-sql-server-teil-2-offline-sicherung\">Vorgehen beim Offline-Backup<\/a>. In diesem Teil gehe ich auf die Online-Vollsicherung ein. Dabei wird im laufenden Betrieb der Inhalt der Datenbank mit Bordmitteln des SQL-Servers gesichert.<\/p>\n<p><strong>Ablauf<\/strong><\/p>\n<ul>\n<li>Datenbank-Pr&#252;fung<\/li>\n<li>Datenbank-Sicherung<\/li>\n<li>Archivierung der Sicherungsdateien<\/li>\n<\/ul>\n<p><strong>Datenbank-Pr&#252;fung<\/strong><\/p>\n<p>Wenn man die Datenbanken &#252;berpr&#252;ft, dann muss man auch recht zeitnah (also am besten am n&#228;chsten Morgen) kontrollieren, ob die Pr&#252;fung Fehler entdeckte und ggf. die vorherige Sicherung besonders gut aufheben. Es w&#228;re denkbar in dem SQL-Sicherungsskript pro Datenbank abzufragen, ob die Pr&#252;fung Fehler ergab und die Datenbank ggf. nicht zu sichern. Das erscheint mir aber unn&#246;tig m&#252;hsam. Au&#223;erdem sollte man sowieso mehrere Generationen an Sicherungen haben. Dann ist es durchaus sinnvoll auch eine defekte DB zu sichern solange die letzte korrekte Datenbanksicherung nicht &#252;berschrieben wird.<\/p>\n<p>Deswegen will ich auch hier noch kurz auf das Generationenprinzip bei den wiederverwendtbaren Sicherungsmedien hinweisen: Bitte immer mehrere Sicherungsb&#228;nder verwenden und die Sicherungen von bestimmten Stichtagen generell aufheben. Beispielsweise k&#246;nnte man 10 Generationen verwahren: Mo, Di, Mi, Do, Fr, Mo, Di, Mi, Do, Fr. Die Wochenendsicherungen werden dann dauerhaft archiviert: KW23, KW24, KW25, \u2026<br \/>\nDann kann man bei versehentlichem L&#246;schen die Daten der letzten zwei Wochen tagesaktuell restaurieren und &#228;ltere Daten wochengenau.<\/p>\n<p>Die Datenbank-Pr&#252;fung kann durchaus im laufenden Betrieb erfolgen. Allerdings wird die Performance dadurch deutlich ged&#252;ckt. Man sollte sich dazu also keine Spitzenzeiten aussuchen. Au&#223;erdem kann es bei parallelem Arbeiten vorkommen, dass ein Allokierungsfehler gemeldet wird, der keiner ist: Wenn f&#252;r eine Seite die Verkettungen gepr&#252;ft werden und zuf&#228;llig diese verkettete Seite gleichzeitig ge&#228;ndert wird (z.B. aufgesplittet), dann wird das als Fehler erkannt. In so einem Fall sollte man die Pr&#252;fung einfach nochmal durchf&#252;hren und schauen, ob der gleiche Fehler erneut angezeigt wird.<\/p>\n<p><strong>Datenbank-Sicherung<\/strong><\/p>\n<p>Mit dem Backup-Befehl wird der Inhalt der Datenbank komplett gesichert. Dazu wird der Inhalt von benutzten Seiten in die Sicherungsdatei rausgeschrieben. Weil in einer Datenbank immer etliche Seiten leer sind, ist die Sicherungsdatei erheblich kleiner als die Datenbank-Dateien. Tipp: Wenn man sie dann noch zippt, erreicht man erstaunliche Kompressionsraten.<br \/>\nDiese Sicherung kann im laufenden Betrieb durchgef&#252;hrt werden. Dabei wird genau der Stand gesichert, der zu dem Ende der Sicherung konsistent ist. Um das hinzubekommen, muss der SQL-Server etwas in die Trickkiste greifen: einige Sperren werden aufrechterhalten, andere Seiten werden im Tranlog gesichert. Um hier die Performance zu verbessern hat Microsoft im SQL-Server-2005 den neuen Snapshot-Modus verwendet. Damit ist die Performance deutlich besser. Hier wird dann allerdings der konsistente Zustand zum Beginn der Sicherung gespeichert.<\/p>\n<p>In diesem Szenario wird eine Vollsicherung durchgef&#252;hrt: Es werden alle Datenseiten gesichert. Das ist besonders einfach in der R&#252;cksicherung, kann aber schon ein Weilchen dauern. Die Performance ist ganz gut: Meiner Erfahrung nach geht das fast so schnell, wie die Kopie der Dateien auf der Platte.<\/p>\n<p>Tipp: Bitte ein Passwort f&#252;r die Sicherungsdateien vergeben, sonst haben es Datendiebe unn&#246;tig leicht. Andererseits sollte das Passwort nicht nur einer kennen, der jeden Morgen mit &#252;berh&#246;hter Geschwindigkeit (und wom&#246;glich noch mit dem Motorrad) zur Arbeit rast. \ud83d\ude41<\/p>\n<p><strong>Archivierung der Sicherungsdateien<\/strong><\/p>\n<p>Anschlie&#223;end m&#252;ssen die Sicherungsdateien noch auf ein dauerhaftes Medium archiviert werden. Dabei muss unbedingt darauf geachtet werden, dass die Archivierung erst nach dem Ende der SQL-Server-Sicherung beginnt. Im Einzelfall ist das gar nicht so einfach. 100%ig kann man es nur dadurch erreichen, dass die SQL-Server-Sicherung als Batch in der Pre-Phase der Datensicherungssoftware l&#228;uft.<br \/>\nF&#252;r die Erstellung des Skriptes sind aber SQL-Kenntnisse erforderlich.<\/p>\n<p><strong>Vorteile<\/strong><\/p>\n<ul>\n<li>Diese Methode ist vergleichsweise schnell.<\/li>\n<li>Die R&#252;cksicherung ist auch f&#252;r die meisten Laien noch machbar sofern sie eine sehr gute Anleitung bekommen.<\/li>\n<li>Diese Methode erm&#246;glicht einen 7x24-Stunden-Betrieb.<\/li>\n<\/ul>\n<p><strong>Risiken und Nebenwirkungen<\/strong><\/p>\n<ul>\n<li>F&#252;r diese Sicherungsmethode muss man gruendlegende Kenntnisse &#252;ber Datenbanksystemen haben.<\/li>\n<li>Man muss ein SQL-Server-Werkzeug verwenden oder SQL beherrschten und mit der &quot;normalen&quot; Sicherung koordinieren.<\/li>\n<li>Die Dauer kann bei sehr gro&#223;en Datenbanken recht lange werden. Mann muss also auf jeden FAll mal testen, wie lange das auf der eigenen Hardware dauert, bevor man sich daf&#252;r entscheidet.<\/li>\n<\/ul>\n<p><strong>Mein pers&#246;nliches Res&#252;mee:<\/strong><\/p>\n<p>Ich finde diese Methode recht gut, aber w&#252;rde die nur empfehlen, wenn jemand mit dem SQL-Server per &quot;Du&quot; ist oder man einen 24-Stunden-Betrieb ben&#246;tigt. In diesem Fall sollte in dem B&#252;ro aber wenigstens ein Selfmade-Admin vorhanden sein, der bereit ist sich da reinzuarbeiten&#8230;<\/p>\n<p>Im vierten Teil gehe ich auf die inkrementelle und die differentielle Online-Sicherung ein.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im ersten Teil der Serie \u201cVorschl&#228;ge zur Datensicherung mit SQL-Server\u201d habe ich ein paar Dinge zum Umfeld und zum Verst&#228;ndnis geschrieben. Im zweiten Teil beschrieb ich das Vorgehen beim Offline-Backup. In diesem Teil gehe ich auf die Online-Vollsicherung ein. Dabei wird im laufenden Betrieb der Inhalt der Datenbank mit Bordmitteln des SQL-Servers gesichert. Ablauf Datenbank-Pr&#252;fung [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[3],"tags":[],"_links":{"self":[{"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/posts\/208"}],"collection":[{"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/comments?post=208"}],"version-history":[{"count":0,"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/posts\/208\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/media?parent=208"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/categories?post=208"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/tags?post=208"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}