Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Programm 2x offen=falsche Daten (https://www.delphipraxis.net/146767-programm-2x-offen%3Dfalsche-daten.html)

haentschman 27. Jan 2010 08:01

Re: Programm 2x offen=falsche Daten
 
Zitat:

Sowas gibt es hier irgendwie nicht...
ZConnection.TransactionIsolationLevel

Blup 27. Jan 2010 08:50

Re: Programm 2x offen=falsche Daten
 
zeitlicher Ablauf etwas übersichtlicher:
Code:
Prog 1                 Prog 2
-------------------------------------------------------
StartTrans                
Insert/Update/Delete      
                        StartTrans                          
                        Select -> unveränderte Daten
Commit                    
                        Select -> unveränderte Daten
                        Commit oder Rollback
                        StartTrans
                        Select -> geänderte Daten sind sichtbar
In Prog2 sind nur Datenänderungen aus anderen Transaktionen sichtbar, die vor dem Start der eigenen Transaktion mit Commit freigegeben wurden. Das kann man für Spezialfälle über TransactionIsolationLevel anders einstellen, sollte man aber im Normalfall nicht.

Teekeks 27. Jan 2010 08:54

Re: Programm 2x offen=falsche Daten
 
Ahh, OK danke. Jetzt geht es.
Wer hätte gedacht dass man erst eine neue Transaktion starten muss... also ich nicht.

alex517 27. Jan 2010 12:31

Re: Programm 2x offen=falsche Daten
 
Zitat:

Zitat von hoika
Das Problem ist, dass Programm 2 (Select)
erst eine neue Transaktion starten muss,
bevor es die Daten von Programm (nach dessen Commit) sehen kann.

Das ist nicht ganz korrekt.
Das gilt nur bei Verwendung des Transaction-Isolation-Levels SNAPSHOT
bzw. RepetableRead. Das sollte aber die Ausnahme sein.

Normalerweise wird READ COMMITTED verwendet.
Da ist es ausreichend das SQL-Statement erneut auszuführen und es werden
alle Daten anderer Transaktionen die mit COMMIT bestätigt sind gesehen.
Auch wenn das COMMIT nach dem Start der eigene Transaktion erfolgte.
Deshalb ja auch der Name READ COMMITTED.

Bei SNAPSHOT hingegen werden alle Daten anderer Transaktionen
ignoriert, auch wenn diese mit COMMIT bestätigt wurden.

alex


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:45 Uhr.
Seite 2 von 2     12   

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