Record- bzw. Table-LOCK, gemeinsamer Zugriff bei SQL Server 2005

22/04/2008 - 10:34 von Martin Roppert | Report spam
Wir haben unsere Software von xBase (FoxPro-kompatible DBF-Dateien) auf SQL
portiert bzw. erweitert. Wir bieten nach wie vor beide Welten an, können also
nicht bedingungslos SQL-Strategien anwenden. Unser Problem ist, dass wir in
einer Tabelle eine eindeutige ID brauchen. In der xBase Welt haben wir uns
mit einer zweiten Tabelle geholfen, in der als einziger Wert immer der
aktuell gültige Schlüssel eingetragen und bei Bedarf hochgezàhlt wurde. So
machen wir das (leider) auch noch unter SQL, da an der ID einiges andere
dranhàngt und eine Umstellung auf ein AutoInkrement-Feld einiges an Aufwand
bedeuten würde.

Unsere Clients, die diesen Zàhler veràndern, hàngen per ODBC am SQL-Server.
Wir haben innerhalb einer Transaktion an den Clients schon verschiedene
Befehlsfolgen ausprobiert. Zum Schluss und nach dem Besuch diverser Foren
waren wir bei einem einzigen Statement angelangt:

UPDATE stp_aktu with (TABLOCKX) set lastsample=lastsample+1 output inserted.*

Trotzdem hatten wir noch einige doppelte IDs in der Tabelle, die diesen
Zàhler verwendet.


Jetzt haben wir es mit einer StoredProcedure ausprobiert, die folgendermaßen
aussieht:
BEGIN
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRANSACTION;
SET NOCOUNT ON;
UPDATE stp_aktu with (TABLOCKX) set lastsample=lastsample+1 output
inserted.*
COMMIT TRANSACTION;
END

Die Clients rufen jetzt die SP auf und verwenden den Rückgabewert für die
Zieltabelle. Trotzdem haben wir gelegentlich noch doppelte IDs wenn die
Clients „parallel“ arbeiten.

Ich habe mal mit dem Profiler auf die SP geschaut. Auffàlig ist, dass im
"Fehlerfall" die RowCounts für den zweiten Aufruf 0 sind (sonst 1). Wenn ich
aber @@ROWCOUNT in der SP abfrage ist die nie 0.

Die Clientsoftware ist NICHT in .Net und wir verwenden wie gesagt ODBC für
die Verbindung zur Datenbank.

Hat jemand noch eine Idee?

Martin Roppert
 

Lesen sie die antworten

#1 Christoph Ingenhaag
22/04/2008 - 11:01 | Warnen spam
Hi Martin,

lies mal diesen Thread
http://www.microsoft.com/communitie...;&sloc
Vg
Christoph

Ähnliche fragen