Hallo Matthias,
Anderes Thema; ich bin gerade dabei ein wenig mit SQL herumzuspielen. Dabei bin ich auf die Frage gestoßen, ob SQL denn Sprachmittel zur Ver- fügung stellt, mit denen sich einzelne Tabellen für bestimmte User vorrübergehend sperren lassen, etwa um derweilen Änderungen daran vor- zunehmen.
Ich arbeite sehr intensiv mit Informix Online - 7.3x. Es könnte sein, daß einige Begriffe bei anderen Datenbanken anders lauten. Aber vielleicht hilft es dir weiter. Ich weiß zwar nicht, welche Datenbank du hast, aber es gibt die Möglichkeit Datenbanken, Tabellen, Zeilen, Felder oder Schlüssel in verschiedenen Isolationslevel zu versetzen. niedrigste - dirty read es kann alles gelesen, jedoch nichts geschrieben werden committed read Prozeß darf keine unbestätigten Daten lesen (wenn gerade geändert wird) curso stability nur für Programmierung wichtig höchste - repeatable read andere Prozesse dürfen die erst weiterlesen wenn andere Sperren (egal welche) entfernt wurden. (ist die schärfste Sperre)
Um eine Tabelle einer Datenbank zu sperren sollte eigentlich
loch table <tabellenname> in shared mode (dirty read)
ausreichen um anderen Nutzern das lesen der Daten zu erlauben, Änderungen aber zu unterbinden. Wenn das nicht ausreicht sagst du einfach
lock table <tabellenname> in exclusive mod (repeatable read)
dann haben alle anderen Nutzer auser dem, der das Statement absetzt keine Möglichkeit auf die Daten zuzugreifen. Um alles wieder rückgängig zu machen reicht
unlock table <tabellenname>
Gleichzeitig kann auch noch der Sperrmodus gesetzt werden, was bedeutet, wie sollen die anderen Nutzer reagieren, wenn Sie auf ne Sperre stoßen.
set lock mode to wait : wartet bis die Sperre weg ist (was Stunden dauern kann) set lock mode to not wait : Nutzer bekommt Meldung daß Datensatz gesperrt und fliegt raus set lock mode to wait 20 : wartet 20 Sekunden auf die Aufhebung der Sperre und fliegt dann mit Fehler raus
Wie gesagt alles unter Informix - aber da das alles dem ANSI entsprechen sollte .... probiers einfach aus
Soweit ich bisher mitbekommen habe, ist nach dem Erstellen einer Tabelle nur dem User der Zugriff (sowohl lesend als auch schreibend) erlaubt, der sie erstellt hat. In der Doku zu meinem
SQL-System
(miniSQL) werden solche Operationen nicht erwähnt, rein logisch betrachtet
müsste
es aber doch welche geben - oder?
Es kommt darauf an, wie die Nutzungsrechte in deiner Umgebung gesetzt sind. M.M. nach hat jeder Nutzer sofort das Recht eine Tabelle zu lesen, wenn sie halt existiert und nichts anderes vereinbart wurde (siehe Isolationslevel). Anders sieht es bei Temporären TAbellen aus. Diese sind nur für den Nutzer und die betreffende Session bestimmt. Es kann kein anderer Prozeß oder Nutzer diese lesen, bearbeiten oder löschen. Endet die Session stirbt die Tabelle.
Ich hoffe ich konnte dir weiterhelfen
Viel Erfolg beim Probieren
Thomas