AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi interne Sperrtabelle in FB
Thema durchsuchen
Ansicht
Themen-Optionen

interne Sperrtabelle in FB

Ein Thema von mschaefer · begonnen am 16. Okt 2008 · letzter Beitrag vom 17. Okt 2008
Antwort Antwort
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#1

interne Sperrtabelle in FB

  Alt 16. Okt 2008, 06:13
Datenbank: FB • Zugriff über: egal
Moin, moin,

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

Grüße // Martin
Martin Schaefer
Phaeno
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: interne Sperrtabelle in FB

  Alt 16. Okt 2008, 07:25
Schau mal hier: http://www.delphipraxis.net/internal...t.php?t=138013
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#3

Re: interne Sperrtabelle in FB

  Alt 16. Okt 2008, 08:36
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 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
Martin Schaefer
Phaeno
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: interne Sperrtabelle in FB

  Alt 16. Okt 2008, 08:48
Genau das war der Grund, wieso ich den Thread damals eröffnet hatte. Hab es dann aber auch mit einer eigenen Locking-Tabelle umgesetzt.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#5

Re: interne Sperrtabelle in FB

  Alt 16. Okt 2008, 20:40
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
Martin Schaefer
Phaeno
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#6

Re: interne Sperrtabelle in FB

  Alt 17. Okt 2008, 05:52
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
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#7

Re: interne Sperrtabelle in FB

  Alt 17. Okt 2008, 19:28
So wird das laufen! Danke Lemmy ! Grüße // Martin
Martin Schaefer
Phaeno
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:07 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