Avatar billede ecpower Nybegynder
26. april 2007 - 14:54 Der er 10 kommentarer og
1 løsning

Hvordan sikrer man eksekvering i den rigtige rækkefølge

Jeg får nogle data returneret fra en hjemmeside til en temp tabel, 1 - 5 rækker af gangen. En Insert trigger ekseverer en sp der  opdaterer rækkerne med dels med stamdata fra andre tabeler og dels beregnede værdier. Nu er rækkerne klar til at blive overført til den "rigtige tabel hvilket klares af en anden sp. Herefter skal rækkerne slettes i temp tabellen evt af en 3. sp.

Når jeg manuelt eksekverer disse sp's i nævnte rækkefølge opnår jeg det ønskede resultat. Hvis jeg derimod eksekverer en ny sp2 i slutningen af sp1 ser det ud til at jeg ikke får opdateret alle felterne rigtigt, måske fordi den begynder at slette før den er færdig med at opdatere? Hvad gør jeg forkert?
Avatar billede arne_v Ekspert
27. april 2007 - 02:11 #1
Er det en rigtig temporary table (hvor navnet starter med #) ? Hvis ikke så prøve det !

Som alternativ løsning så wrap alle kaldene i en enkelt transaction og sæt
transoaction isolation level til serializable.
Avatar billede ecpower Nybegynder
27. april 2007 - 11:37 #2
Det er ikke en rigtig temporary tabel undskyld mit sprogbrug, men en temp tabel i den forstand at data mellemlander , bliver behandlet og sendt vidree til slutdestinisionen. Jeg ved ikke om det var det her du mente eller der er en smartere måde at skrive på. I alt fald siger jeg tak for det gode hint, og send et svar for det virker.

set transaction isolation level serializable
begin transaction 1
Statements
commit transaction 1

set transaction isolation level serializable
begin transaction 2
exec sp1
commit transaction

set transaction isolation level serializable
begin transaction 3
exec sp2
commit transaction 3
Avatar billede arne_v Ekspert
27. april 2007 - 15:12 #3
nej

set transaction isolation level serializable
begin transaction
Statements
exec sp1
exec sp2
commit transaction
Avatar billede ecpower Nybegynder
27. april 2007 - 17:14 #4
Som du skriver der prøvede jeg først idet det var det mest logiske jvf. dokumentationen. Imidlertid fejler de samme 5 felter hvergang, men faktisk ved jeg ikke om de fejler i opdateringen eller insert'en, for som sagt virker alting perfekt når jeg eksekverer de 3 sp's manuelt en efter en.
At det så virker når jeg skriver det som ovenfor kan jeg ikke forklare, men det ville jo være rart at kende årsagen.
Avatar billede arne_v Ekspert
28. april 2007 - 01:40 #5
hvorfor bruger du ikke en rigtig temporær tabel ?
Avatar billede ecpower Nybegynder
28. april 2007 - 09:51 #6
Det er et godt spørgsmål - Jeg har ikke så meget erfaring i det her. Projektet jeg har gang i her går ud på at gøre dele af vores administrationssystem Navision Attain tilgængeligt fra nettet. De tabeller jeg bruger er derfor oprettet via Navisions interface fordi jeg ikke aner hvordan Navision klienten reagerer på at der bliver oprettet tabeller i databasen af en 3. part.(Det koster ca. 350 for at få rettigheder til at oprette nye tabeller i navision pr stk.) Men det kunne jo afprøves.
Men hvilke fordele er der i at bruge en rigtig temporær tabel?
Avatar billede arne_v Ekspert
28. april 2007 - 21:37 #7
fordelen er at hver bruger så får sin egen temporære tabel og dermed kan du undgå
en del samtidigheds problemer
Avatar billede ecpower Nybegynder
30. april 2007 - 22:05 #8
Alle dine gode råd har hjulpet mig et stort skridt videre. Jeg har voldtestet det med samtidigheden og er meget i tvivl om det er værd at gøre meget ud af. Hvis der bliver sendt en eller flere rækker fra en eller flere sider til samme eller flere ordrenumre optræder der deadlocks hvis der er under 0,5 sekund mellem submit'ene. Over 0,5 sekund kan jeg sende og sende uden fejl. Med 4 brugere og 30 - 40 ordrer om ugen vil der formentlig sjældent opstå deadlock fejl. Men er der nogen retningslinjer for hvornår man skal tage denne fejl alvorligt? Eller er kan man sige at det er "dårligt håndværk" at se bort fra fejlmuligheden fordi den optræder yderst sjældent?
Avatar billede arne_v Ekspert
01. maj 2007 - 01:57 #9
Jeg synes at det vil være dårligt håndværk at lade fejlen forblive.

Af 2 årsager:
  - den vil komme hyppigere ved høj belastning og jo højere belastning jo mere
    ubelejliget vil det være
  - jeg mener at den kan undgåes
Avatar billede ecpower Nybegynder
04. maj 2007 - 18:40 #10
Arne V
Skal du ikke have pointene, jeg har brugt dne info til at komme videre?
Avatar billede arne_v Ekspert
04. maj 2007 - 19:15 #11
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