Avatar billede Lasse Novice
30. september 2004 - 22:11 Der er 5 kommentarer og
1 løsning

Hvordan fungerer en triggers timing?

Hej.

Jeg er helt groen mht triggers, saa i maa lige baere over med mine knap saa intelligente spg.

Jeg skal have lavet et logge system paa en allerede eksisterende db. Som det er nu, saa sker alle aendringer i db'en via SP, og det ville vaere forholdsvis nemt at laegge logningen i disse SP'er. Jeg kunne nu godt taenke mig at goere det via triggers, da det er nemmere at vedligeholde pga der findes ca 50 SP'er (som vedroerer de ting der skal logges paa) man kun 2 tabeller jeg skal logge paa. Dvs. 2 triggers i forhold til 50 aendringer!

Min ide er at jeg med en trigger kigger paa det som er aendret ved update/insert). Jeg skriver saa en lille tekst i en logtabel over hvad der er sket. Denne lille ting har jeg fundet ud af kan goeres ved at kigge paa tabellerne inserted og deleted i triggeren.

Det er nu ikke nok med en lille tekst i min logtabel, jeg kunne ogsaa godt taenke mig at vide hvilken person der staar for aendringen. Alle SP'er kommer med parameteren IdLogin. Denne kunne jeg forestille mig at jeg skulle gemme i en temptabel. Naar triggeren fyres af, saa skal jeg hente denne IdLogin til brug ved indsaettelse i logtabellen.

Ja, nu kommer saa det egentlige problem. Hvornaar fyres triggerne af? Mine problemer gaar ud paa at hvad hvis 2 personer fyrer en sp af paa samme tid, vil der saa komme 2(evt flere) IdLogins i denne tabel, og hvordan kan jeg vide hvilken jeg skal vaelge... Findes der noget sessionId, eller hvad kan jeg goere ved dette...

Er der evt en anden smartere maade jeg kunne loese dette paa?
Avatar billede teepee Nybegynder
01. oktober 2004 - 09:27 #1
Hvis to personer, eller et script indsætter flere rækker "på en gang" så bliver triggeren fyret for hver række.
Avatar billede Lasse Novice
02. oktober 2004 - 18:02 #2
Ok, det er maaske ikke forklaret ordentligt:

1) Person kalder SP1(stored procedure). Denne SP indsaetter personens ID i prelogtabel. Derefter aendrer SP1 noget i tabelMedTrigger1.

2) Aendringen fra SP1 i tabelMedTrigger1 goer at en trigger bliver fyret af. Triggeren kigger i prelogtabel efter det ID som har lavet aendringer. Med det ID indsaetter triggeren noget i logtabel.

Mit problem er ... Hvad hvis 2 personer paa samme tid kalder SP1. Vil der da saa komme 2 ID i prelogtabel? Det medfoerer jo at triggeren paa en eller anden maade skal bestemme sig for hvilken af de 2 den skal vaelge. Hvordan kan jeg vide hvilken en? Kan jeg evt. indsaette et timestamp i prelogtabel og tage det aeldste ID?
Avatar billede veronica Nybegynder
03. oktober 2004 - 17:30 #3
Er der ikke mulighed for, at du kan bruge integreret sikkerhed el.lign. således at dine brugere logger direkte på din database ? Det vil lette mange af dine problemer, idet du så bare i din trigger kan bruge variablen system_user, der angiver den nuværende bruger.

Alternativt vil jeg foreslå dig at bruge transaktioner.
Avatar billede janus_007 Nybegynder
03. oktober 2004 - 20:29 #4
Hej gooky

Der er flere måder at løse din opgave på, men det du selv er inde på er nu ikke så dumt rent vedligeholdelsesmæssigt. Veronicas løsning er sådan set også fin hvis alle brugte EM eller QA direkte, men igennem en applikation vil system_user blot være den account der er granted logon til eks.vis ASP_NET eller hvad ved jeg.

Der findes AFTER og INSTEAD OF triggers, du vil sikkert bruge AFTER i denne sammenhæng og den bliver fired kun hvis alle operationerne er succesfulde og garantien er at den altid bliver udført sekventielt. Dvs. du kan stole på at den fyres af lige bagefter tabel updates/ deletes osv. Herfor kan du eks.vis indsætte dit IdLogins i tabellen der ændres i og hente dette ud igen igennem din trigger og logge at IdLogins har lavet de og de ændringer...

Hygge
Avatar billede Lasse Novice
14. november 2004 - 23:54 #5
Jeg har brugt veronicas loesning... Alligevel vil jeg ogsaa give lidt point til janus007. Saa hvis du lige svarer veronica, saa kommer der nogen point.
Avatar billede Lasse Novice
26. januar 2005 - 22:32 #6
ok, pointene er dine janus_007, eftersom veronica ikke svarer
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