Avatar billede Lasse Novice
22. marts 2006 - 22:23 Der er 10 kommentarer og
1 løsning

Isolation level

Jeg har to aabne sessioner startet fra et c# program der forloeber saaledes:

1) SES1: Start Transaction
2) SES1: Select top 1 partId, partName from parts where partProcessState = 0
3) SES1: Laeg resultat ud i c# variabler
4) SES1: UPDATE Parts SET partProcessState = 1 WHERE PartId = c# variable
5) SES1: Slut transaction

Jeg troede at dette medfoerte at SES2 ikke kunne laese i Parts tabellen mellem step 1 og 5, men det kan den. Hvad skal jeg goere for at det ikke er muligt at SES2 skal kunne laese i denne tid?
Avatar billede arne_v Ekspert
23. marts 2006 - 00:03 #1
det er der vist ikke noget transaction isolation level der sikrer

men jeg har svaert ved at tro at transaction isolation level serializable ikke
er nok til din app

PS: Hvorfor ikke en enkelt SQL saetning ?
Avatar billede Lasse Novice
23. marts 2006 - 00:53 #2
Ok, saa jeg skal nok over i en timestamp loesning.

PS: Hvorfor ikke en enkelt SQL saetning ?>>

1) Jeg skal gerne have ID'et ud.
2) Ville dette goere det "sikkert"?
Avatar billede arne_v Ekspert
23. marts 2006 - 04:01 #3
1) det er jo en forklaring
2) betydeligt mere sikker
Avatar billede Lasse Novice
23. marts 2006 - 16:09 #4
2) betydeligt, men stadig med usikkerhed, ikke sandt?
Avatar billede arne_v Ekspert
23. marts 2006 - 16:18 #5
ja og nej

ingen af loesningerne laaser tabellen mellem start og slut

begge loesninger vil opfylde alle normale krav til integritet (mellem SELECT
og UPDATE) ved et passende hoejt transaction isolation level

den sidste vil gaa hurtigere og vil derfor minimere chancen for problemer
Avatar billede Lasse Novice
23. marts 2006 - 17:55 #6
For at skaere det ud i pap (og for at vaere sikker):

Vil det sige at der VIL forekomme fejl, men at man accepterer dette i praksis?
Avatar billede arne_v Ekspert
23. marts 2006 - 18:03 #7
nej og ja

alle normale krav kan loeses sikkert med transaction isolation level

jeg mener ikke at dit krav kan loeses uden at locke tabellen helt

men jeg kender ingen som har dit krav i praksis
Avatar billede Lasse Novice
23. marts 2006 - 18:13 #8
Jeg burde ikke vaere den foerste (og er det helt sikkert ikke), men lad mig forklare processen saa der kommer en bedre forstaaelse af problemet. Adskillige processer skal goere foelgende:

1) Get new part to update.
2) Mark part as being updated.
3) Update part - denne process er LAAANGSOM... kan tage 2 min.
4) Mark part as already updated.

Det jeg vil undgaa er at adskillige processer faar den samme fil der skal opdateres.

Jeg vil regne med at dette er et almindeligt problem (a pool of problems that needs to be done, and several problem-solvers needs to grab a 1 distinct problem from the pool).
Avatar billede arne_v Ekspert
23. marts 2006 - 18:26 #9
det problem er anderledes end det du spurgte om

hvis du kun vil have at 2 processer ikke kan lave 2-4 paa samme data
saa er det et helt normalt problem som loeses ved transaction isolation
lever serialiazable

men det er ikke det samme som at man ikke kan laese fra tabellen i hele
perioden 1-5 - det kraever at tabellen laases for exclusive access i hele
perioden
Avatar billede Lasse Novice
24. januar 2007 - 21:34 #10
svar=>point
Avatar billede arne_v Ekspert
24. januar 2007 - 21:53 #11
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester