Frage zu Locking (Vergabe von Nummern im Nummernkreis)

Forum für neue Firebird-Anwender.

Moderator: thorben.braun

bfuerchau
Beiträge: 70
Registriert: Mo 7. Mai 2018, 18:09

Mi 27. Mär 2019, 17:30

Ok, was die Doku angeht so muss tatsächlich bei der FB "with lock" kodiert werden, das mache ich i.Ü. genauso.
"for update" verwende ich bei der DB2/400 :).

Fehler behandle ich hier in der Regel gar nicht, da dies wiederum Sache des Client sein soll (z.B. Lock-Timeout, der eigentlich nicht eintreten sollte).

Was mache ich?

begin in autonomous transaction
Do begin
select first 1 a.lockvalue from zgloballock a with lock into :xvalue
Do begin
execute statement :xcmd;
when any do begin exception; end
end end

In diesem Fall ist "xcmd" das auszuführende SQL wie "create table ...".
Wegen der Fehlerbehandlung funktioniert dies tatsächlich nur mit dem "when any do begin exception; end", da ein auftretender Fehler dann an den Client weitergeleitet wird.
Wird die autonome Transaktion korrekt beendet, gibts einen Commit, ansonsten einen Rollback.
Da ich alle kritischen und konkurierenden SQL's auf diesem Weg ausführe kann es keine Konkunrenz-Fehler mehr geben.
vr2
Beiträge: 44
Registriert: Fr 13. Apr 2018, 00:13

Mi 10. Apr 2019, 13:52

Hallo,

zum Dunstkreis des Threads: auf der Firebird-Seite ist ein guter Artikel über Transaktionen verlinkt:http://firebirdsql.org/en/news/transact ... -firebird/

Es kann sein, dass sich Nebenläufigkeits- und Lockinggeschichten elegant lösen lassen, wenn man sich ein wenig mit Transaktionen befasst.

Grüße, Volker
bfuerchau
Beiträge: 70
Registriert: Mo 7. Mai 2018, 18:09

Do 11. Apr 2019, 12:02

Nun, schön das das nun auch Firebird mal erklärt, aber das ist schon ein alter Hut seit es Transaktionen gibt (1983):
https://de.wikipedia.org/wiki/ACID
https://en.wikipedia.org/wiki/ACID_(computer_science)
Benutzeravatar
martin.koeditz
Beiträge: 87
Registriert: Sa 31. Mär 2018, 14:35

Fr 12. Apr 2019, 15:24

Nun, schön das das nun auch Firebird mal erklärt, aber das ist schon ein alter Hut seit es Transaktionen gibt (1983):
https://de.wikipedia.org/wiki/ACID
https://en.wikipedia.org/wiki/ACID_(computer_science)
Das ist schon richtig, aber im Link von ib-aid ist das Transaktionsmodell schon etwas hübscher dargestellt als auf Wikipedia. Außerdem geht der Autor auf die Firebird-spezifischen Aspekte ein. Da kocht jedes System sein eigenes Süppchen.

Gruß
Martin
Martin Köditz
it & synergy GmbH
Antworten