![]() |
Datenbank: FB • Version: 1.5 • Zugriff über: egal
Firebird: logische Datensatz-Sperre, die immer funktioniert
Hallo #,
habe gerade einen netten Problem. Ein logischer Datensatz soll gesperrt werden, logisch deshalb, weil das zu speichernde Objekt intern in mehrere Tabellen gespeichert wird. Ich kenne "Ich sperre, also bin ich" (Entwickler von anno dazumal). Dort wurd in etwa folgendes gemacht: - Lock-Tabelle - Lock-Eintrag wird versucht eizutragen (unique index sichert die Eindeutigkeit des Log-Eintrag ab) - per Timer Lock-Datum ständig aktualisieren (falls Rechner abstürzt, kann eine zu alte Sperre ignoriert werden) Wo ich gerade hänge, war die Forderung "read commited" als TIL einzustellen. Reicht denn der unique index nicht aus ? Spätestens beim Commit der Transaktion knallt es doch, und man kann dem User sagen "Datensatz gesperrt". Die Frage ist also: Reicht ein unqiue index aus, um die Eindeutigkeit eines Datensatzes zu gewährleisten ? Ich denke: ja. Heiko PS: Bitte keine Sprüche wie "update table set id=1 where id=1 ". Der Datensatz muss auch gesperrt werden, wenn er noch gar nicht existiert, der Nutzer also noch nicht gespeichert hat. (Ich speicher nicht die DB-ID direkt, das hat andere Gründe). |
Re: Firebird: logische Datensatz-Sperre, die immer funktioni
Hallo,
erledigt. Ich habe mir den Artikel noch mal durchgelesen. Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz