Sperren mit SQL-Server verschwunden??

27. März 2006 14:31

Hallo,

wir wollen unsere Datenbank von einer native DB auf einen SQL-Server umsetzen. Dabei wird hier als besonderes Merkmal herausgestellt, dass es unter SQL-Server zu keinerlei Sperren von Tabellen mehr kommen soll.
Ich kann dies irgendwie nicht ganz glauben oder liege ich mit meinen Zweifeln wirklich falsch? Werden die Sperren vielleicht nur etwas verringert?

Wäre schön, wenn jemand mit Erfahrungen berichten könnte.

Gruß
Guenther

27. März 2006 17:35

So ist es, der SQL-Server sperrt erst mal nur den betroffenen Datensatz, das macht er so lange, bis die Verwaltung der gesperrten Datensätze mehr Ressourcen braucht als eine Seitensperre, dann sperrt er ganze Seiten aber immer noch nicht die ganze Tabelle. Erst wenn der Verwaltungsaufwand für die Seitensperren zu groß wird, sperrt der SQL-Server die ganze Tabelle.

Ich hoffe, ich habe das jetzt aus dem Kopf noch korrekt und verständlich genug erklärt, sonst soll mich halt ein anderer verbessern ;-)

27. März 2006 19:11

Vom Prinzip her ist die Aussage von Michael richtig, allerdings ist zu beachten, dass der SQL-Server auch beim Lesen von Datensätzen diese schon sperrt (so wie die meisten DBMS).
Der Navision Database Server sperrt erst beim tatsächlichen Schreiben, dafür aber immer die ganze Tabelle.

Ich habe schon Kunden betreut, bei denen wäre eine Umstellung auf den SQL-Server genau aus diesem Grund ein gewaltiger Schritt zurück gewesen.

27. März 2006 19:25

Die Lesesperre besteht aber nur für den Moment, wo tatsächlich gelesen wird, ein Schreibzugriff, der auf den gleichen Datensatz zugreift, während jemand liest, wird solange festgehalten, bis der Lesevorgang beendet ist, und dann automatisch ausgeführt. In der Regel merkt der schreibende Anwender davon nichts.

27. März 2006 21:18

Meines Wissen nach, wird der LOCKTABLE durch das Verlassen des Triggers auf dem er Aufgerufen wurde aufgehoben bzw. durch ein COMMIT. (Das war fast alles was ich zu SQL-Server auf meinen Lehrgang lernen durfte!)

@ Schumi / Timo
Wo kann ich hierzu weitere Informationen nachlesen?.
Gruß Mikka
Zuletzt geändert von mikka am 27. März 2006 21:27, insgesamt 1-mal geändert.

27. März 2006 21:23

mikka hat geschrieben:Meines Wissen nach, wird der LOCKTABLE durch das Verlassen des Triggers auf dem er Aufgerufen wurde aufgehoben bzw. durch ein COMMIT.
Gruß Mikka

Das ist richtig.
Ein COMMIT; oder das Ende des Triggers (der die Transaktion gestartet hat) hebt die Sperre wieder auf.
Darüber hinaus werden auch alle Transaktionen in einer Codeunit abgeschlossen, wenn diese mit IF Codeunit.RUN THEN ... aufgerufen wird.