Was tun bei Vermischten Datensaetzen?

Thomas Berger ThB.com at t-online.de
Fr Okt 13 10:38:40 CEST 2000


B. Eversberg wrote:

> > Aeltere Versionen von NFS unterstuetzen kein File-Locking,
> > aeltere (=alle?) allegro-X-Programme daher wohl auch nicht.
> > Damit ist es dann theoretisch unmoeglich ein Programm zu
> > haben, das im Netzwerkbetrieb korrekt funktioniert.
> 
> Dem hatten wir eigentlich vorgebeugt mit der Methodik, uns nicht auf
> das betriebssystemeigene Locking zu verlassen, sondern mit einem
> direkt in die TBL bzw. in den Datensatz geschriebenen Byte ein Flag
> zu setzen. Nur in Situationen, wo zwei Personen wirklich im Abstand
> von Sekundenbruchteilen speichern, koennte diese Sperre noch
> durchbrochen werden (sog. "race condition"). bei NT und bei Novell
> allerdings nicht, weil da auch noch ein normales File-Locking
> zusaetzlich gemacht wird, etwa seit V15a.

So ist es auch richtig, alle Sicherheitsmechanismen
greifen Hand in Hand:

Makroskopisch:
  - "Signalfile" cat.sgf: Kein Bearbeiter darf mehr
    mit der Bearbeitung der Datenbank beginnen
    (wg anstehender Reorganisation etc.), noch aktive
    Bearbeiter werden mit dem Telefon aus der
    Datenbank herauskomplimentiert (Termin fuer
    automatische Telefonfunktion von a99?)

  - Datensaetze in Bearbeitung sind individuell
    gesperrt. Das schuetzt vor gleichzeitiger
    Bearbeitung durch andere, auch waehrend
    der Mittagspause (obwohl man hier erziehend
    auf die Kollegen einwirken sollte, die
    Bearbeitungszeiten auf ein Minimum zu
    reduzieren).
    Stuerzt der Rechner waehrend der Bearbeitung
    ab (Stromausfall, Fenster zugeklickt, Fenster
    in der Taskleiste verbuddelt, nach Hause gegangen),
    so ist dieser Satz fuer immer gesperrt, und kann
    durch den Administrator bzw. Benutzer, die die
    entsprechende Stelle im Handbuch gelesen haben,
    durch eine spezielle Tastenkombination "entsperrt"
    werden. Vorher ist allerdings zu klaeren, dass
    dieser Satz wirklich nicht mehr in Bearbeitung
    ist, sonst koennen Inkonsistenzen entstehen
    (das ist hoffentlich klar).

Mikroskopisch:
  - Beim Abspeichern eines neuen oder modifizierten
    Datensatzes wird die .TBL-Datei durch allegro
    "gesperrt", damit exklusiver Schreibzugriff
    auf .TBL-, und Indexdatei sowie das *aktuelle*
    Ende der .LOG- und ggfls. der betroffenen 
    .cLD-Datei (umspeichern!) gewaehrleistet ist. 
    Je nach Anzahl der auszutragenden und einzumischenden 
    Schluessel und Langsamkeit des Netzes / Groesse 
    der Datenbank / Anzahl der Leersaetze bei "//"
    muss diese Exklusivitaet fuer einige hundert 
    Millisekunden bis zu mehreren Sekunden aufrecht
    erhalten werden, bis das Speichern halt abgeschlossen
    ist.
    Versuchen andere Arbeitsplaetze waehrend dieser
    Zeit, ebenfalls zu speichern, so erscheint
    unten auf dem Schirm ".TBL-Datei gesperrt",
    und es wird 60 Sekunden lang automatisch
    versucht, ob das Speichern moeglich geworden
    ist. Dies ist ueppig dimensioniert, nur bei
    globalen Ersetzungen, globalen Manipulationen,
    Turbo-Updates etc. kann es dazu kommen, dass
    hier der urspruengliche Arbeitsplatz mit vielen
    Schreiboperationen in unmittelbarer Folge
    die Datenbank fuer andere Bearbeiter "dicht
    macht".
    Stuerzt das urspruengliche PRESTO waehrend
    des Speicherns ab (Stromausfall, Netzwerkaussetzer,
    korrupte Datensetze, pathologisch lange
    Datensaetze, Fehler in der Parametrierung, 
    Bugs in PRESTO, ...), so ist die Satztabelle
    dann "auf ewig" gesperrt. Der Systemverwalter
    muss in diesem Fall die Situation klaeren und
    entscheiden, ob der die Satztabelle manuell
    freigibt: Ueber den entsprechenden Menupunkt
    im Cockpit bzw. mittels Sniffer (aeltere Cockpit-
    Versionen koennen in Microsoft-Netzwerken die .TBL
    nicht freigeben, wenn die Datenbank in Benutzung
    ist, die neueren Cockpit-Versionen sowie alle
    Versionen von SNIFFER koennen es).

"Nanoskopisch":
  - In Mutlti-Tasking Umgebungen (Windows, jedes
    Netzwerk) sind die Zustaends*uebergaenge* bei
    den oben genannten Schutzmechanismen kritisch.
    Es ist beweisbar, dass hier 100%ige Sicherheit
    nur dann gegeben ist, wenn das zugrundeliegende
    Betriebssystem hier Mechanismen bereitstellt.
    Am verbreitetsten und dem Problem hier auch
    am angemessensten ist das File oder Record
    locking, das hier etwa gewaehrleistet, dass
    es nie zwei PRESTOs gleichzeitig die Satztabelle
    fuer sich sperren. Wegen der langen Dauer der
    Schreiboperationen waere es kein guter Stil,
    das Sperren der Satztabelle oder gar das der
    einzelnen Datensaetze ueber das Betriebssystem-
    Locking zu realisieren:  Das Betriebssystem 
    stellt nur die sogenannten atomaren Operationen
    zur Verfuegung, die allegro (und alle Anwendungen,
    die auf gemeinsame Dateien zugreifen) fuer den
    Aufbau eigener Sicherheitsmechanismen unbedingt
    benoetigt.

a99 uebrigens benutzt, da hier ja tendenziell 
hunderte von Saetzen gleichzeitig bearbeitet werden
und Sitzungen "aufbewahrt" werden koennen, auf der
makroskopischen Ebene nicht das Sperren von Datensaetzen,
sondern den Vergleich der Aenderungsdaten als
Anhaltspunkt dafuer, dass keine Gleichzeitige
Bearbeitung eines Satzes stattgefunden hat. Dies
ist eine Heuristik und einige Sachen sollten
beherzigt werden:
- Man sollte bearbeitete Saetze moeglichst sofort
  abspeichern (sonst sieht man die Bearbeitungen
  ja auch nicht im Index)
- Man sollte bearbeitete und nicht gespeicherte
  Saetze nach Moeglichkeit nicht ueber die aktuelle
  Sitzung hinaus aufbewahren
- Man sollte die Datenbank moeglichst nicht
  reorganisieren oder entlueften, wenn irgendein
  Bearbeiter noch nichtgespeicherte, bearbeitete
  Saetze hortet.

Derzeit ist vermutlich noch niemandem (hoechstens
Frau Tews?) klar, wie man als Datenbankadministrator
hier steuernd und organistatorisch eingreifen kann.
Gerade beim Neueinstieg auf a99 stelle ich mir
aber vor, dass es auch fuer die Bearbeiter angenehmer
ist, in der .ini-Datei fuer a99 die Einstellungen
so zu setzen, dass das "Elefantengedaechtnis" von
a99 etwas zurueckgedraengt wird und ein Neustart
von a99 auch moeglichst eine "frische" Sitzung
praesentiert.

viele Gruesse
Thomas Berger





Mehr Informationen über die Mailingliste Allegro