Datenverlust in Datenbank vorbeugen
Guten Abend liebe Community,
Ich habe vor kurzem eine Webseite mit viel Dantenbank-Interaktion aufgesetzt und frage mich daher, wie ich Datenverlust in der DB verhindern kann. Klar, viele Backups machen, aber damit es gar nicht erst so weit kommt, wie und durch was kann Datenverlust hier (in einer SQL DB) ausgelöst werden? Kann es z.B. vorkommen, dass wenn zwei Nutzer gleichzeitig auf einen Wert zugreifen, der eine beschreibt, der andere liest, oder wie auch immer, dass dann Daten verloren gehen können? Was muss ich alles beachten, damit möglichst nicht die Datenbank von einem Moment zum anderem plötzlich leer oder Korrupt ist?
1 Antwort
Es gibt unter den meisten SQL Systemen Transaktionen. Dort kannst du zum Beispiel festlegen wann eine Folge von Anweisungen beginnt und endet. Sollte dazwischen etwas passieren kannst du die ganze Transaktion wider rückgänig machen.
http://de.wikipedia.org/wiki/Transaktion_%28Informatik%29
An sonsten mach dir da nicht so viele Gedanken und lass es in den Standardeinstellungen. Wie du oben schon geschrieben hast ist es wichtig regelmäßig Backups zu machen. Sollte mal was passieren dann kannst du von diesem aus etwas einspielen bzw. in der Datenbank manuell Reperaturen ausführen und dein Problem suchen und dich weiter belesen.
Dafür ist doch das Datenbank Management System da, dass eben solche Fehler beim Schreiben und Löschen nicht passieren. Was mir grad einfällt ist, dass wenn du viel mit Einschränkungen wie Primärschlüssel, Fremdschlüssel und den kleinsten Datentyp wählst (nicht die Größe sondern Art der Daten), kannst du so bei Programmierfehlern vorbeugen, dass die Dankenbank inkonstitent wird. Solltest du genauere Fragen zu Beispielen oder weiteren Sachen in Richtung Datenbank haben, dann sollten wir das am besten mal nicht hier in der Frage machen.
Oh, vielen Dank für den Link und die Tipps. Ich werde auf jeden Fall schauen, die Transaktion irgendwie in das Script eingebaut zu bekommen. Das sorgt ja dann, wenn ich es richtig verstanden habe dafür, dass eine Aktion entweder ganz oder eben gar nicht durchgeführt wird.
Ich frage mich nur, ob es potenziell möglich wäre, dass wenn mehrer User auf den selben Wert in der Datenbank zugreifen, möglicherweis zwei sogar diesen Wert gleichzeitig modifizieren wollen, ob die Aktionen dann nacheinander und reibungslos ausgeführt werden (einer also in Warteposition steht), oder ob einfach ohne Rücksicht auf Verluste gleichzeigtig gelöscht und geschrieben und was weiß ich nicht noch alles wird, und am Ende nur Müll bei rauskommt oder sogar alle Daten weg sind.