Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi interne Sperrtabelle in FB (https://www.delphipraxis.net/122438-interne-sperrtabelle-fb.html)

mschaefer 16. Okt 2008 06:13

Datenbank: FB • Zugriff über: egal

interne Sperrtabelle in FB
 
Moin, moin,

gibt es eine interne Sperrtabelle in FB wo man sehen kann wieviele Datensätze derzeit gesperrt sind ?

Grüße // Martin

DeddyH 16. Okt 2008 07:25

Re: interne Sperrtabelle in FB
 
Schau mal hier: http://www.delphipraxis.net/internal...t.php?t=138013

mschaefer 16. Okt 2008 08:36

Re: interne Sperrtabelle in FB
 
Danke das führt doch schonmal einen Schritt weiter...

Ich würde gerne eine Übrsicht haben wieviele und welche Datensätze aktuell nicht änderbar, da in Anwenderbearbeitung (nicht internes sperren), sind.


Zitat:

Zitat von hoika
eine Alternative ist das Locken selber zu machen
-> LockTable(Id,TableId/TableName,PrimKey,LockDate/LockTime)

Ist etwas aufwändiger, klappt aber mit jeder DB,
die halbwegs Transaktionen und unique indices unterstützt.
Das Prüfen, ob Lock existiert erfolgt durch ReadCommitted Transactions.

Der Trick ist das LockDate/LockTime
das wird vom lockende Programm ständig aktualisiert, um "tote" Locks
(Programm ist abgstürzt) zu finden.

Hoika schlägt vor, dass mit einer eigenen Sperrtabelle zu machen. Das geht schon, aber letzlich muß
FB auch intern wissen welche Transaktionen noch am laufen sind und welcher Record / welche Records
davon betroffen sind. Möchte auf alle Fälle verhindern das ein User Änderungen gemacht hat und sie
dann nicht in die Datenbank eintragen kann, da der Satz gerade gesperrt ist.

Grüße // Martin

DeddyH 16. Okt 2008 08:48

Re: interne Sperrtabelle in FB
 
Genau das war der Grund, wieso ich den Thread damals eröffnet hatte. Hab es dann aber auch mit einer eigenen Locking-Tabelle umgesetzt.

mschaefer 16. Okt 2008 20:40

Re: interne Sperrtabelle in FB
 
Nach einiger Suche bin ich zu dem Schluss gekommen, dass es eine interne Sperrtabelle als Systemtabelle nicht gibt. Es gibt wohl eine Memmory-Hash-Table mit Sperrvermerken. Ob dies auf Recordebene oder Sektorweise erfolgt ist mir nicht ganz klar. Jedenfalls ist mir kein Weg in die Quere gekommen wie man auf dies Speichertabelle zugreifen kann.

Grüße // Martin

Lemmy 17. Okt 2008 05:52

Re: interne Sperrtabelle in FB
 
Hi Mschaefer,

es gibt eine Möglichkeit das zu testen. Allerdings muss ich mir das kurz überlegen, die Quelle weiß ich nicht mehr. Außerdem kann ich nicht sagen, mit welchen Transaktion-Einstellungen das geht (wo bei das eigentlich die "normalen" Einstellungen sein müssten).

Wenn Du folgendes machst:
Transaktion starten
Datensatz selektieren
Edit auf Datensatz (also ein einfaches, leeres Edit - Post)
Transaction.CommitRetaining;
und dann das eigentliche Edit durchführen.

In der Transaction.CommitRetaining müsstest Du einen evtl. Deadlock dann abfangen und dann das Editieren nicht erlauben.

Alternativ: FIBPlus kann 2 Transaktionen verwenden, eine zum lesen und eine zum schreiben - damit sollte es eigentlich keine Deadlocks beim schreiben mehr geben, allerdings "löscht" Du evtl. Änderungen von einem anderen Anwender der den selben Datensatz bearbeitet hat.


Grüße
Lemmy

mschaefer 17. Okt 2008 19:28

Re: interne Sperrtabelle in FB
 
So wird das laufen! Danke Lemmy ! Grüße // Martin


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz