Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

SQL Grundkurs 1: Die Sprache erlernen

Transaktionen und Transaktionssteuerung

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Transaktionen werden von serverbasierten Datenbank-Management-Systemen unterstützt. Beginn und Ende einer solchen Transaktion legen Sie über die Anweisungen zur Transaktionssteuerung fest. In diesem Video bekommen Sie einen ersten Überblick.

Transkript

Dieses Video möchte ich dazu nutzen, Ihnen einen Überblick über Transaktionen zu geben. Transaktionen sind Vorgänge, die nach dem Alles-oder-Nichts-Prinzip ablaufen, das heisst, Sie fassen mehrere Vorgänge zu Transaktionen zusammen, von denen Sie möchten, dass sie entweder komplett ausgeführt werden oder gar nicht. Das klassische Beispiel für eine Transaktion ist eine Banküberweisung. Diese besteht aus mehreren Einzelschritten. Der erste Einzelschritt ist das Abbuchen des Geldes vom Ausgangskonto. Der zweite Schritt, ein getrennter Schritt, ist dann das Zubuchen des Geldes am Zielkonto. Was würde passieren, wenn zwischen diesen beiden Schritten es zu einem Systemfehler im Bankrechner kommt? Dann wäre einerseits das Geld vom Ausgangskonto schon weg, am Zielkonto aber noch nicht angekommen. Mit anderen Worten, das Geld wäre verschwunden. Das soll nicht sein. Deshalb werden solche Vorgänge zusammengefasst zu Transaktionen. Diese Transaktionen belassen alle Änderungen vorläufig, und werden erst gespeichert, wenn der letzte Schritt abgeschlossen ist. Erst dann werden diese Änderungen auch für andere Benutzer sichtbar. Solange die Transaktion noch läuft, sind die Änderungen nur in der Session sichtbar, die diese Transaktion durchführt. Weiter sind Daten, solange eine Transaktion läuft, sofern sie von dieser geändert worden sind, gesperrt. Ob auf diese Daten lesend zugegriffen werden kann, hängt von den Möglichkeiten des Datenbankmanagementsystems ab. Aber generell sind diese Daten für den Schreibzugriff gesperrt. Aufgrund dieser Sperren sollten Transaktionen so schnell wie möglich wieder abgeschlossen werden, denn offene Transaktionen mit Sperren sind häufig ein Performance-Problem in Unternehmen. Der Endbenutzer empfindet einfach das System als langsam, wenn er auf eine Antwort wartet. Dabei könnte ihm das System die Antwort längst geben, kann aber nicht, weil Daten von anderen Benutzern noch gesperrt sind. Wenn ein Fehler auftritt innerhalb einer Transaktion, oder diese nicht mehr abgeschlossen werden kann, wird diese Transaktion zurückgerollt. Man spricht da von einem "Rollback". Und da gibt es verschiedene Möglichkeiten. Entweder können wir unter bestimmten Bedingungen explizit als Benutzer ein "Rollback" durchführen, oder auch das System realisiert ein "Rollback" automatisch. Das wäre zum Beispiel dann der Fall, wenn unsere Verbindung zum Server unterbrochen ist, während eine Transaktion läuft. Wenn eine Transaktion, also eine Session unterbrochen ist, kann sie nicht wieder hergestellt werden. Sie können nur eine neue Session realisieren. Das können Sie vergleichen mit ihrem Wirt ums Eck. Wenn Sie dort eine Session unterbrechen durch einen Absturz, indem Sie abstürzen, bildlich gesprochen, und auf der Theke steht noch ein halbes Bier, dann wird der Wirt auch erkennen, dass die Session unterbrochen ist, und Sie diese Session nicht mehr fortsetzen werden. Das hiesst, er wird automatisch mit diesem Glas ein "Rollback" vornehmen, sprich er wird es ausleeren und in die Spüle stellen. Das Gleiche macht ein Datenbankserver, wenn Ihre Session unterbrochen ist. Er sieht, dass es hier eine offene Transaktion gibt, die nicht mehr abgeschlossen werden kann, und rollt automatisch zurück. Dasselbe würde passieren, wenn der Server selber aufgrund eines Fehlers, zum Beispiel Stromausfall oder anderen Gründen, unterbrochen wird. Wenn der Server wieder hochfährt, bevor die Datenbank freigegeben wird, durchforstet er seine Transaktionsprotokolle. Wenn er in diesen sieht, dass es unvollständige, unabgeschlossene Transaktionen gibt, dann werden diese zurückgerollt. Insofern sind Transaktionen ein ganz wichtiger Beitrag für Datenkonsistenz. Was ist nun unsere Aufgabe im Rahmen von SQL? Wir müssen diese Transaktionen steuern. Prinzipiell werden Transaktionen ja vom Datenbankmanagementsystem verwaltet, aber zwei Dinge müssen wir dem System sagen, nämlich, ab wann es gilt, was zu einer Transaktion gehört und vor allem, wann der Endpunkt erreicht ist. Denn ein System kann von sich aus nicht wissen, wenn die vierte Anweisung erfolgreich abgeschlossen ist, ob nun noch eine fünfte folgen wird, oder ob die Transaktion mit dieser Anweisung beendet ist. Bei manchen Datenbankmanagementsystemen müssen Sie eine Transaktion explizit starten. Manche starten eine Transaktion implizit, Das heisst, mit der ersten DML-Anweisung, die Sie ausführen, wird eine Transaktion gestartet. Dies ist zum Beispiel bei Oracle und MySQL der Fall. Wenn Sie mehrere Anweisungen beim Microsoft SQL Server zu einer Transaktion zusammenfassen möchten, müssen Sie explizit eine Transaktion starten, sonst wird die Transaktion implizit automatisch nach jeder einzelnen Anweisung beendet. Den erfolgreichen Abschluss einer Transaktion nennt man "Commit" und realisiert sie auch mit der gleichnamigen Anweisung. Wenn Sie also ein "Commit" in Ihrem Editor eingeben und ausführen, wird die aktuelle Transaktion geschlossen, und alle Änderungen werden unwiderruflich gespeichert. Aber die Sperren auf den Datensätzen sind auch weg, und die Änderungen sind für alle anderen Benutzer ab diesem Zeitpunkt sichtbar. Wenn Sie die Änderungen, die Sie vorgenommen haben, nicht festschreiben wollen, können Sie mit "Rollback" die ganze Transaktion beenden. Alles, was innerhalb dieser Transaktion geschehen ist, wird damit zurückgerollt und der ursprüngliche Zustand wiederhergestellt. Auch Sperren auf den Daten sind nach einem "Rollback" wieder weg. Manchmal kann es sein, dass Sie sehr umfangreiche Transaktionen verarbeiten, und wenn Sie jetzt schon 20 Arbeitsschritte erfolgreich absolviert haben, und Ihnen passiert beim 21. ein Fehler, dann ist es oft sehr unangenehm, wenn Sie alles zurückrollen müssen, nur um den letzten Schritt ungeschehen zu machen. Um sozusagen zwischendurch innerhalb von umfangreichen Transaktionen Stellen zu markieren, bis zu denen Sie teilweise zurückrollen können, können Sie sogenannte "Safepoints" verwenden. "Safepoints" können Sie innerhalb einer Transaktion definieren, und diese bekommen einen Namen. Wenn Sie dann zurückrollen, können Sie immer definieren, ob Sie die gesamte Transaktion zurückrollen, oder eben nur bis zu einem bestimmten "Safepoint". Alle Änderungen, die Sie vor diesem "Safepoint" definiert haben, bleiben vorerst noch bestehen. Sehen wir uns den ganzen Vorgang auf einer Zeitleiste an. Zum Zeitpunkt "A" wird die Transaktion begonnen. Es erfolgt ein "Update", das Daten ändert. Es erfolgt ein "Insert", das neue Daten einfügt. An vierter Stelle wird ein "Safepoint" mit dem Namen "Punkt1" definiert. Danach erfolgt ein weiteres "Update", und danach wird noch ein "Safepoint" mit dem Namen "Punkt2" definiert. Dann kommt es noch zu einem "Delete", und damit sind alle Vorgänge erledigt. Nun haben Sie folgende Möglichkeit, mit dieser Transaktion zu verfahren: Entweder verwenden Sie am Ende ein "Commit", um all diese Änderungen, die Sie getätigt haben, festzuschreiben. Damit sind nicht nur alle Änderungen festgeschrieben, auch die "Safepoints", die zu dieser Transaktion gehört haben, sind genauso weg, wie die Sperren auf den Daten. Alternativ hätten Sie am Ende dieser Zeitleiste aber auch die Möglichkeit bis zu einem "Safepoint" zurückzurollen, zum Beispiel "Rollback to Punkt2", um bis zum "Safepoint2" zurückzurollen. In dem Fall wäre nur das "Delete" rückgängig gemacht, alle anderen Schreibvorgänge wären vorläufig noch intakt. Nachdem wir hier einen zweiten "Safepoint", den "Punkt1" definiert haben, könnten wir natürlich optional auch bis zu diesem "Safepoint" zurückrollen. Das würde nicht nur das letzte "Delete", sondern auch das vorletzte "Update" rückgängig machen. Das erste "Update" und das erste "Insert" hingegen wären nach wie vor aufrecht. Als letzte Möglichkeit könnte ich mit einem "Rollback" ohne Angabe eines "Safepoints" die gesamte Transaktion zurückrollen. Hier werden alle Änderungen rückgängig gemacht, und auch die "Safepoints" existieren nach diesem Zeitpunkt nicht mehr. Sie haben in diesem Video nun einen Überblick über Transaktionen bekommen. Ich habe Ihnen erläutert, was eine Transaktion ist, und mit welchen Anweisungen Sie eine Transaktion in SQL steuern können. Die wichtigsten Anweisungen in diesem Zusammenhang sind "Commit", um eine erfolgreich abgeschlossene Transaktion endgültig festzuschreiben, oder "Rollback", um Änderungen zu verwerfen.

SQL Grundkurs 1: Die Sprache erlernen

Arbeiten Sie sich in die Grundlagen der Datenbanksprache SQL am Beispiel von Microsoft SQL Server, Oracle und MySQL ein und lassen Sie sich die praktische Nutzung erklären.

14 Std. 40 min (112 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!