Wat is Transactie?

Een reeks bewerkingen op een database die als één eenheid wordt behandeld. COMMIT maakt de resultaten definitief, en ROLLBACK brengt de gegevens terug in de toestand van vóór het begin van de transactie. Het DBMS beheert transacties met locks en logs, zodat ze voldoen aan atomiciteit, consistentie, isolatie en duurzaamheid (de ACID-eigenschappen).

Japanse benaming: トランザクション

“Transactie” komt voor in 13 oefenvragen uit 1 onderwerpen, bijv. Basis van databases.

Vakgebied: Basis van databases

COMMIT en ROLLBACK

Bij een overboeking tussen rekeningen is het resultaat pas juist als zowel het afboeken van rekening A als het bijboeken op rekening B heeft plaatsgevonden. Een transactie bundelt zo'n reeks bewerkingen tot één eenheid: met COMMIT aan het eind worden de resultaten definitief, en met ROLLBACK, bijvoorbeeld als er halverwege een fout optreedt, wordt elke wijziging in de transactie ongedaan gemaakt. Niet-gecommitte wijzigingen worden ook bij een storing ongedaan gemaakt, zodat er geen halve toestand achterblijft waarin maar een deel van de wijzigingen is doorgevoerd.

Gelijktijdigheidsbeheer

Als veel gebruikers tegelijk een database gebruiken, lezen en schrijven meerdere transacties dezelfde gegevens. Zonder enige controle ontstaan problemen: de ene wijziging kan een andere overschrijven en doen verloren gaan (een lost update), of een transactie kan niet-gecommitte gegevens lezen (een dirty read). Het DBMS voorkomt onderlinge beïnvloeding van transacties met gelijktijdigheidsbeheer via gedeelde en exclusieve locks, of met multiversion concurrency control (MVCC), dat eerdere versies van gegevens bewaart om te lezen. Hoeveel beïnvloeding wordt voorkomen, wordt met het isolatieniveau gekozen.

Herstel na storingen

Het DBMS legt de waarden van vóór en na wijzigingen vast in een log en schrijft de log naar de opslag vóór de database zelf. Na een storing gebruikt het de log om de wijzigingen van gecommitte transacties opnieuw uit te voeren (rollforward) en die van niet-gecommitte transacties ongedaan te maken (rollback), zodat een correcte toestand wordt hersteld. Door regelmatig checkpoints te nemen, wordt het deel van de log dat bij het herstel moet worden doorlopen korter.

Nu oefenen: vragen over Transactie

In de tabel Rekening wordt een transactie gestart, en worden een UPDATE die 300 aftrekt van het saldo van rekening A en een UPDATE die 300 bij het saldo van rekening B optelt uitgevoerd. Daarna wordt in plaats van COMMIT een ROLLBACK uitgevoerd. Wat gebeurt er met de tabel Rekening?

  1. AAlleen de optelling bij rekening B wordt ongedaan gemaakt; de aftrekking van rekening A blijft bestaan
  2. BBeide UPDATE's worden ongedaan gemaakt, en de tabel keert terug naar de toestand van vóór het begin van de transactie
  3. COmdat de UPDATE's al zijn uitgevoerd, wordt geen van beide ongedaan gemaakt
Antwoord en toelichting tonen

Antwoord: B. Beide UPDATE's worden ongedaan gemaakt, en de tabel keert terug naar de toestand van vóór het begin van de transactie

Een transactie is een mechanisme dat een reeks bewerkingen op een database als één eenheid behandelt. Wijzigingen binnen een transactie worden definitief wanneer COMMIT wordt uitgevoerd, en worden allemaal ongedaan gemaakt wanneer ROLLBACK wordt uitgevoerd, waarbij de gegevens terugkeren naar de toestand van vóór het begin van de transactie. In dit voorbeeld worden zowel de aftrekking van rekening A als de optelling bij rekening B ongedaan gemaakt, en blijven beide saldi ongewijzigd. Als er halverwege een overboeking een fout optreedt, zorgt een rollback ervoor dat er geen halve toestand achterblijft waarin maar één rekening is bijgewerkt. Om slechts een deel van het werk ongedaan te maken, kan met SAVEPOINT een punt worden gemarkeerd en met ROLLBACK TO SAVEPOINT naar dat punt worden teruggekeerd.

Welke van de ACID-eigenschappen die een transactie moet hebben, is de eigenschap dat een overboeking die rekening A debiteert en rekening B crediteert ofwel volledig ofwel helemaal niet wordt uitgevoerd, ook als er halverwege een storing optreedt?

  1. AConsistentie (consistency)
  2. BDuurzaamheid (durability)
  3. CAtomiciteit (atomicity)
Antwoord en toelichting tonen

Antwoord: C. Atomiciteit (atomicity)

De ACID-eigenschappen zijn genoemd naar de beginletters van vier eigenschappen waaraan een transactie moet voldoen. Atomiciteit (atomicity) betekent dat de bewerkingen in een transactie ofwel allemaal ofwel geen van alle worden uitgevoerd; bij een storing worden de tot dan toe gemaakte wijzigingen ongedaan gemaakt. Consistentie (consistency) betekent dat de gegevens vóór en na de transactie blijven voldoen aan de integriteitsbeperkingen (saldi nooit negatief, vreemde sleutels die altijd naar bestaande rijen verwijzen enzovoort). Isolatie (isolation) betekent dat gelijktijdig lopende transacties elkaar niet beïnvloeden en hetzelfde resultaat geven als wanneer ze een voor een zouden zijn uitgevoerd. Duurzaamheid (durability) betekent dat de resultaten van een gecommitte transactie niet verloren gaan, ook als er daarna een storing optreedt. De alles-of-niets-eigenschap uit de vraag is atomiciteit.

Veelgestelde vragen

Wat gebeurt er als er halverwege een transactie een fout optreedt?

De applicatie voert een ROLLBACK uit of het DBMS voert het herstel na de storing uit, en elke wijziging in die transactie wordt ongedaan gemaakt. Er blijft nooit maar een deel van de wijzigingen achter.

Welke problemen ontstaan er als een transactie lang duurt?

Ze houdt lang locks vast, zodat andere transacties moeten wachten, er minder werk gelijktijdig kan worden verwerkt en deadlocks waarschijnlijker worden. In de regel wordt een transactie zo kort gehouden als nodig is om de consistentie te bewaren.

“Transactie” in de toelichting

Vragen met “Transactie” (13)

  1. In de tabel Rekening wordt een transactie gestart, en worden een UPDATE die 300 aftrekt van het saldo van rekening A en een UPDATE die 300 bij het saldo van rekening B optelt uitgevoerd. Daarna wordt in plaats van COMMIT een ROLLBACK uitgevoerd. Wat gebeurt er met de tabel Rekening?
  2. Welke van de ACID-eigenschappen die een transactie moet hebben, is de eigenschap dat een overboeking die rekening A debiteert en rekening B crediteert ofwel volledig ofwel helemaal niet wordt uitgevoerd, ook als er halverwege een storing optreedt?
  3. De voorraad van een product in de tabel Voorraad is 10. Transactie T1 leest de voorraad en schrijft de waarde min 3 terug, en T2 leest de voorraad en schrijft de waarde min 5 terug. Als ze zonder locks worden uitgevoerd in de volgorde T1 leest, T2 leest, T1 schrijft, T2 schrijft, wat is dan de uiteindelijke voorraad?
  4. Welke beschrijving van een dirty read, een van de problemen die optreden als transacties gelijktijdig lopen, is juist?
  5. Transactie T1 voerde SELECT COUNT(*) FROM Bestelling WHERE Bedrag >= 1000 uit en kreeg 8. Direct daarna voegde T2 met INSERT een rij toe voor een bestelling met een bedrag van 2000 en voerde een commit uit. Toen T1 hetzelfde SELECT-statement opnieuw uitvoerde, kreeg het 9. Welk verschijnsel is dit?
  6. Transactie T1 heeft een gedeelde lock op een rij en leest die. T2 vraagt een gedeelde lock en T3 een exclusieve lock op dezelfde rij aan. Wat is juist voor de periode tot T1 zijn lock vrijgeeft?
  7. Welke beschrijving van tweefasenvergrendeling (two-phase locking, 2PL), die voor het gelijktijdigheidsbeheer van transacties wordt gebruikt, is juist?
  8. Transactie T1 nam een exclusieve lock op rij A en vroeg daarna een lock op rij B aan, terwijl T2 een exclusieve lock op rij B nam en daarna een lock op rij A aanvroeg, zodat geen van beide verder kan. Wat doet een DBMS doorgaans wanneer het deze situatie detecteert?
  9. Er zijn transacties T1 tot T5, en vóór een storing is één checkpoint genomen. T1 is vóór het checkpoint begonnen en gecommit. T2 en T3 zijn vóór het checkpoint begonnen; T2 is na het checkpoint maar vóór de storing gecommit, en T3 was op het moment van de storing niet gecommit. T4 en T5 zijn na het checkpoint begonnen; T4 is vóór de storing gecommit, en T5 was niet gecommit. Welke transacties moeten bij het herstel na de storing met de log een rollforward krijgen?
  10. SQL-statements worden ingedeeld in de datadefinitietaal (DDL), de datamanipulatietaal (DML) en de datacontroletaal (DCL). Welke wordt als DDL ingedeeld?
  11. Wat is het resultaat als in SQL DELETE FROM Medewerker zonder WHERE-clausule wordt uitgevoerd?
  12. Welk antwoord noemt van de isolatieniveaus die de SQL-standaard definieert juist de verschijnselen die bij READ COMMITTED kunnen optreden?
  13. Bij het wijzigen van gegevens leggen veel DBMS'en de wijzigingen vast in een log (journaal) en schrijven ze die log naar niet-vluchtige opslag vóór de database zelf (WAL: write-ahead logging). Wat is de belangrijkste reden voor deze aanpak?

Verwante termen

SQL Isolatieniveau ACID-eigenschappen Deadlock Vreemde sleutel (foreign key) Tweefasenvergrendeling (2PL) View (databaseview) Index (databaseindex) Derde normaalvorm (3NF) ER-diagram (entity-relationshipdiagram)

Naar de woordenlijst