AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Automatische Transaktionen SQL Server 2005 verhindern?
Thema durchsuchen
Ansicht
Themen-Optionen

Automatische Transaktionen SQL Server 2005 verhindern?

Ein Thema von Phoenix · begonnen am 17. Okt 2007
Antwort Antwort
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.613 Beiträge
 
#1

Automatische Transaktionen SQL Server 2005 verhindern?

  Alt 17. Okt 2007, 07:55
Datenbank: Microsoft SQL Server • Version: 2005 • Zugriff über: ADO, alternativ Corelabs SDAC
Folgendes Problem:

Eine Anwendung läuft einwandfrei auf SQL Server 2000.
Die gleiche Anwendung auf SQL Server 2005 läuft reproduzierbar in Deadlocks.

Hintergrund: Es werden in eine Tabelle mehrere Datensätze eingefügt. Nach dem Einfügen werden einige Daten neu geladen - unter anderem wird auch ein Select auf die geänderte Tabelle gefeuert. Beim SQL Server 2000 erhält dieses Statement die neu eingefügten Datensätze und alles ist wunderbar. Beim SQL Server 2005 bleibt das Statement jedoch wegen eines nicht commiteten Inserts (das letzte Statement der eingefügten Datensätze) in einem Lock auf der Tabelle hängen.

Erster Ansatz: Implicit Transactions sind auf dem Server ausgeschaltet.
Diese Einstellung hat jedoch keinen Einfluss - sowohl wenn es an als auch aus ist gehts nicht.

Bei ADO ist Autocommit an.
Bei SDAC gibt es gar kein Autocommit.

Das Problem tritt sowohl bei ADO als auch bei SDAC-Verbindungen auf.

Setze ich Manuell ein Commit nach den Inserts ab funktioniert der Teil. Schliesse ich dann jedoch das Formular auf dem diese Änderungen gemacht wurden wird die Verbindung geschlossen - und dann erhalte ich eine Exception von der Datenbank, dass die Verbindung trotz einer offenen Transaktion geschlossen wurde und diese Transaktion automatisch gerollbacked wurde.

Es scheint also, als würde der Server trotz anders lautender Einstellungen implizite Transaktionen für jede Verbindung starten.

Was kann man da machen? Ich bin echt am Ende mit meinem Latein

Ps: Die Gleiche Anwendung funktioniert so wie sie ist auf Oracle, auf Access (JET Engine) auf SQL Server 2000 und auf ASTA-Servern. Nur bei SQL Server 2005 tritt dieses Phänomen auf. Es kann also eigentlich nur an den Datenbankeinstellungen liegen.

Edit Nachtrag:
Ich setze jetzt nach dem Öffnen der Verbindung sogar noch explizit ein 'SET IMPLICIT_TRANSACTIONS OFF' ab. Auch das hilft nicht, es scheint definitiv noch eine offene Transaktion zu geben. Interessant ist: Connection.InTransaction ist false. Die Transaktion scheint also wirklich von der DB zu kommen.

Edit 2: Titel etwas passender gemacht.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz