22. marts 2006 - 22:23Der 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?
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).
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
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.