Avatar billede madiedk Nybegynder
02. januar 2011 - 22:12 Der er 5 kommentarer

lock table i forbindelse med concurrency

Hej

jeg har 2 tabeller der skrives til via et java program. mit problem omhandler concurrency.

Tabel 1 skal have skrevet 1 række og opdatet 1 række.
Tabel 2 skal have skrevet 100000 rækker.

i tabel 1 må og skal der kun være én række der har status "AKTU" og det skal altid være den sidste række der er skrevet til tabellen.

rækkefølgen er sådan nu:

1. transaktion begynder

2. tabel 1 opdateres med at rækken (eller alle rækker) med AKTU ændres til HIST

3. der indsættes i tabel 1 en ny række med AKTU

4. der skrives 100000 rækker til tabel 2

5. transaktion 2 commites



mit problem at at der med det nuværende setup kan opstå flere rækker med AKTU, da trin 2 jo ikke ændrer AKTU til HIST for andre concurrent transationer der kører på samme tid. 

hvordan undgåes det bedst?

håber i forstår ellers uddyber jeg gerne.

hvis det gør en forskel er det en ORACLE database
Avatar billede arne_v Ekspert
02. januar 2011 - 22:26 #1
Hvis du kører det hele i en enkelt transaktion med transaction isolation level >= read commited, så kan jeg ikke se problemet.

Andre transaktioner vil altid læse gamle data eller nye data.
Avatar billede arne_v Ekspert
02. januar 2011 - 22:28 #2
Det er muligt at de andre transaktioner gør at transaction isolation level bør være repeatable read eller serializable, men det er svært at sige uden at vide hvad de gør.
Avatar billede madiedk Nybegynder
02. januar 2011 - 22:42 #3
hvis der nu er 2 brugere der hver især kører en transaktion som den beskrevet på samme tid. så opstår problemet. Da trin 2 jo kun berøre de transaktioner der er committed og da ingen af dem er committed når den anden kommer til trin 2 bliver de ikke ændret til HIST. og de begge i trin 3 indsætter så en række med AKTU.

hvis de 2 transaktioner først køres når den anden er færdig, ja så er den commited og så ændres AKTU til HIST og den nye række der indsættes har så AKTU som den eneste.
Avatar billede arne_v Ekspert
03. januar 2011 - 00:34 #4
Hm. Jeg tror at du har ret. Du skal hæve isolation level. Hvis du går op i serialzable, så skal det ihvertfald virke.
Avatar billede arne_v Ekspert
03. marts 2011 - 03:42 #5
OK?
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