Announcement

Collapse
No announcement yet.

"Sperrkonzept" ?!

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • "Sperrkonzept" ?!

    Hallo,

    ich beschäftige mich im Rahmen meiner Diplomarbeit momentan intensiv mit Visual Studio 2005 und einem MS SQL Server 2005.

    Um meine Arbeit beenden zu können benötige ich dringend allgemeine Informationen zum Thema Datenkonsitenz bzw. ob es ein "Sperrkonzept" auf dem Server gibt, dass automatisch einen Datensatz für weitere schreibende Zugriffe sperrt.

    Details:
    VB.NET Anwendung, die mit einem vorher eingerichteten User auf die DB connected
    Ausser innerhalb der Datenbank zu lesen oder zu schreiben passiert nichts weiter.
    Die SQL-Statements sind alle innerhalb der Anwendung fest hinterlegt.

    Die Anwendung wird auf verschiedenen Rechnern von verschiedenen Benutzern, die sich bei der Anwendung mit ihrem eigenen Benutzer anmelden müssen, ausgeführt.

    Wie kann ich gewährleisten, dass ein Datensatz, der gerade von User A bearbeitet wird, nicht von User B ebenfalls bearbeitet werden kann, bzw. dass die Änderungen nicht zu einer Inkonsistenz führen.

    Bitte um eine allgemeine Erklärung / Hilfe, da ich bisher in keiner Domentation oder auch im Internet etwas dazu gefunden habe.

    Vielen Dank schon mal.

  • #2
    Hallo,

    der MS SQL Server stellt so genannte "Lock Hints" zur Verfügung, mit denen das Sperrverhalten abweichend von der Default-Einstellung der Datenbanksitzung für jede einzelne SQL-Anweisung gesteuert werden kann. Wenn ein pessimistisches Sperrverfahren benötigt wird, legt eine SELECT-Einweisung mit der Option FOR UPDATE eine permanente Sperre auf den Datensatz, der bis zum Abschluss der Transaktion bestehen bleibt (d.h. diese Datenbanksession "reserviert" sich diesen Datensatz für den exklusiven Zugriff).

    In BOL ("Books Online" alias Hilfedatei) des MS SQL Server sind die verschiedenen Optionen unter dem Indexeintrag Lock Hints zu finden.

    Allerdings ist eine pessimistische Datensatzsperre "wider der Natur" einer mengenorientierten SQL-Datenbank. Besser ist eine optimistische Sperre, bei der die Tabelle zusätzlich eine Spalte vom Datentyp ROWVERSION (alias TIMESTAMP) nutzt. Eine ROWVERSION wird bei jedem Schreibzugriff vom SQL Server automatisch neu gesetzt, so dass eine Kollision von 2 Benutzern immer dann garantiert erkannt wird, wenn jede UPDATE-Anweisung in der WHERE-Einschränkung den alten ROWVERSION-Wert zusammen mit dem Primärschlüsselwert vergleicht. Wenn die Wizards von Visual Studio 2005 genutzt werden (DataAdapter/TableAdapter), wird eine vorhandenen ROWVERSION automatisch in den SQL-Anweisung verbaut, wenn im Wizard im erweiterten Dialog die Mehrbenutzerfähigkeit über die Checkbox angefordert wird.

    Comment

    Working...
    X