| Nächste Überarbeitung | Vorhergehende Überarbeitung |
| opendocks:oracle-sql-nutshell-doku:nutshell-doku-07 [2026/04/23 14:13] – angelegt heiko | opendocks:oracle-sql-nutshell-doku:nutshell-doku-07 [2026/04/23 15:09] (aktuell) – [Transaktionen, Savepoints, Commits und Rollbacks] heiko |
|---|
| Wie eingangs beschrieben arbeiten relationale Datenbanken, wie z. B. Oracle, transaktional. D. h. Datenmanipulationen werden innerhalb einer Session nicht sofort in die DB geschrieben sondern werden nur innerhalb der Session als Änderungen angezeigt.\\ | Wie eingangs beschrieben arbeiten relationale Datenbanken, wie z. B. Oracle, transaktional. D. h. Datenmanipulationen werden innerhalb einer Session nicht sofort in die DB geschrieben sondern werden nur innerhalb der Session als Änderungen angezeigt.\\ |
| Erst mit einem ''COMMIT'' werden die Änderungen wirklich in die DB geschrieben und sind ab dann auch für andere Sessions sichtbar. Mit einem ''ROLLBACK'' werden alle bis dahin vorgenommenen Änderungen verworfen und nicht in die DB geschrieben.\\ | Erst mit einem ''COMMIT'' werden die Änderungen wirklich in die DB geschrieben und sind ab dann auch für andere Sessions sichtbar. Mit einem ''ROLLBACK'' werden alle bis dahin vorgenommenen Änderungen verworfen und nicht in die DB geschrieben.\\ |
| Unter einer Session versteht man die stehende Verbindung von einem SQL-Client (z. B. SQL Developer, SQLcl oder eine Applikation) zur Datenbank. Bricht eine Session ab (z. B. durch einen Netzwerkfehler oder weil der User den Client beendet) und die stehende Datenbankverbindung wird getrennt, so werden automatisch alle bis dahin geschriebenen Änderungen zurückgerollt sofern sie noch nicht durch ein ''COMMIT'' in die DB geschrieben wurden. | Unter einer Session versteht man die stehende Verbindung von einem SQL-Client (z. B. SQL Developer, SQLcl oder eine Applikation) zur Datenbank. Bricht eine Session ab (z. B. durch einen Netzwerkfehler oder weil der Client crashed) und die stehende Datenbankverbindung wird getrennt, so werden automatisch alle bis dahin geschriebenen Änderungen zurückgerollt sofern sie noch nicht durch ein ''COMMIT'' in die DB geschrieben wurden. |
| |
| ==== SAVEPOINT und ROLLBACK TO SAVEPOINT ==== | ==== SAVEPOINT und ROLLBACK TO SAVEPOINT ==== |
| |
| "ID" "LAST_NAME" "FIRST_NAME" "USERID" "SALARY" | "ID" "LAST_NAME" "FIRST_NAME" "USERID" "SALARY" |
| 1 "Patel" "Ralph" "rpatel" 1000 | 1 "Patel" "Ralph" "rpatel" 1000 |
| 3 "Drexler" "Ben" "bbiri" 1100 | 3 "Drexler" "Ben" "bbiri" 1100 |
| 4 "Newman" "Chad" "cnewman" 1000 | 4 "Newman" "Chad" "cnewman" 1000 |
| |
| -- 2. Füge einen weiteren Datensatz hinzu: | -- 2. Füge einen weiteren Datensatz hinzu: |
| |
| "ID" "LAST_NAME" "FIRST_NAME" "USERID" "SALARY" | "ID" "LAST_NAME" "FIRST_NAME" "USERID" "SALARY" |
| 1 "Patel" "Ralph" "rpatel" 1000 | 1 "Patel" "Ralph" "rpatel" 1000 |
| 2 "Dancs" "Betty" "bdancs" 860 | 2 "Dancs" "Betty" "bdancs" 860 |
| 3 "Drexler" "Ben" "bbiri" 1100 | 3 "Drexler" "Ben" "bbiri" 1100 |
| 4 "Newman" "Chad" "cnewman" 1000 | 4 "Newman" "Chad" "cnewman" 1000 |
| |
| -- 4. Setze einen Savepoint: | -- 4. Setze einen Savepoint: |
| |
| "ID" "LAST_NAME" "FIRST_NAME" "USERID" "SALARY" | "ID" "LAST_NAME" "FIRST_NAME" "USERID" "SALARY" |
| 1 "Patel" "Ralph" "rpatel" 1000 | 1 "Patel" "Ralph" "rpatel" 1000 |
| 2 "Dancs" "Betty" "bdancs" 860 | 2 "Dancs" "Betty" "bdancs" 860 |
| 3 "Drexler" "Ben" "bbiri" 1100 | 3 "Drexler" "Ben" "bbiri" 1100 |
| 4 "Newman" "Chad" "cnewman" 1000 | 4 "Newman" "Chad" "cnewman" 1000 |
| </code> | </code> |
| Nach dem ''ROLLBACK'' waren alle gelöschten Datensätze wieder vorhanden, aber der bisher noch nicht committete ''INSERT'' war auch noch vorhanden. | Nach dem ''ROLLBACK'' waren alle gelöschten Datensätze wieder vorhanden, aber der bisher noch nicht committete ''INSERT'' war auch noch vorhanden. |