TurboDB Engine Dokumentation

Mehrbenutzerzugiff und Sperren

Top  Previous  Next

Standardmäßig öffnet TurboDB Tabellen im Shared Mode. Es können also mehreren Anwendungen gleichzeitig auf eine Datenbanktabelle zugreifen. Um inkonsistente Änderungen der Tabelle zu vermeiden, gibt es einen transparenten Sperrmechanismus, der Datensätze für die Dauer des Editiervorganges durch eine Anwendung sperrt.

Einige Operationen benötigen allerdings exklusiven Zugriff auf eine Datenbanktabelle und werden daher zurückgewiesen falls eine weitere Anwendung die Tabelle benutzt. Diese Operationen sind:

Ändern der Tabellenstruktur (AlterTable)
Löschen einer Tabelle (DeleteTable)
Löschen eines Index

Lock Files

Da TurboDB eine dateibasierte Datenbank Engine ist, werden Tabellensperren über eigene Verwaltungsdateien verwaltet. Diese Lock Dateien haben denselben Namen wie die entsprechende Datenbanktabelle, aber mit der Dateierweiterung "net". Die Lock Datei beinhaltet eine Liste aller Anwendungen, die auf die Datenbanktabelle zugreifen und verwaltet die unterschiedlichen Sperren auf diese Tabelle.

Wenn eine Anwendung in eine Datenbanktabelle schreiben will, muss sie erst in der Lock Datei nachsehen, ob es erlaubt ist. Falls ja, registriert sich die Anwendung in der Lock Datei als schreibend, führt die Aktion aus und meldet sich wieder ab. Die Lock Datei wird von der ersten Anwendung erzeugt, die auf die Tabelle zugreift und wieder gelöscht, wenn die letzte Anwendung den Zugriff beendet. Daher verfügt eine Tabelle über keine Lock Datei, solange sie nicht geöffnet wird.

Bemerkung: Falls eine Anwendung abstürzt oder beendet wird, während eine Sperre auf die Tabelle oder einen Datensatz eingerichtet ist, kann die Lock Datei nicht gelöscht werden und die Sperre bleibt bestehen. Das kann gerade beim Debuggen einer TurboDB Anwendung des öfteren passieren, da ein Reset während eine Sperre eingerichtet ist genau diesen Effekt hat.  Seit Version 4 hat TurboDB einen einzigartigen Mechanismus, der solche toten Sperren erkennt und automatisch aufhebt.