Avatar billede borrisholt Novice
03. maj 2011 - 06:25 Der er 11 kommentarer

Oprette et kørrende "job"

Hej

Jeg har en stored procedure som løbende laver nogle oprydninger. I den sidste ende bruges det til at finde ud af hvor mange brugere der er logget ind, men det er en detalje.

Jeg har brug for at kørre denne stored procedure inde i et uendeligt loop inde i SQL serveren. Altså i en "tråd".

Hvordan gør jeg det. JEg har været ved at kigge på Services og Ques men kan ikke rigtigt får det til at passe sammen, fordi jeg skal ikke kommunikere med nogen blot slette en eller flere records i en tabel.

Tak.
Jens Borrisholt
Avatar billede Slettet bruger
03. maj 2011 - 09:24 #1
Hvis det er en SQL express du sidder med, er der ingen job´s ellers kan jeg ikke se problemet?
Avatar billede borrisholt Novice
03. maj 2011 - 11:56 #2
Problemet er jeg ikke lige ved hvordan jeg skal kode det ..
Avatar billede Slettet bruger
03. maj 2011 - 12:41 #3
Du kan oprette et job vha Menufunktionerne, hvilket klart er det hurtigste, men hvis du vil kode det skal du regne med at det er rigtig langhåret :-) men spændende hvis man sæter sig ind i det. Her er et eksempel på en af funktionerne: http://msdn.microsoft.com/en-us/library/ms187358.aspx

Brug hjælpefilen og grav dig ned i de andre funktioner
Avatar billede arne_v Ekspert
03. maj 2011 - 15:26 #4
Hvorfor ikke lave en Windows service som koerer den SP i et loop?
Avatar billede Slettet bruger
03. maj 2011 - 15:35 #5
arne_v: det kan man også. Der er utallige måder at gøre det på, men hvorfor ikke bruge den job/scheduler som er indbygget?
Avatar billede borrisholt Novice
03. maj 2011 - 15:35 #6
@Arne det skal ikke være en Windows Service fordi det skal køre på en server med mange SQL server instalationer på. i et SaaS miljø.

Detmed har vi også svaret på hvorfor det heller ikke skal været et almindeligt SQL Job. det skal køre i et uendeligt loop, men et sekunds delay.
Avatar billede Slettet bruger
03. maj 2011 - 16:01 #7
Et sekund... Hmm!! Kan ikke huske opløsningen på scheduleren men mener den ligger på et minut, måske du skulle angribe det på en anden måde. Se her: http://www.mysqltutorial.org/stored-procedures-loop.aspx
Avatar billede arne_v Ekspert
03. maj 2011 - 19:50 #8
Jeg kan ikke se hvorfor en windows service ikke kan haandtere flere SQL servere.

Mit argument for en app loesning fremfor en DB loesning er:
- uendelig loekke i SP er ikke god DB
- jobs er for jobs ikke den her slags opdateringer

Saa er der:
- eksternt program, en windows services synes oplagt
- en trigger et passende sted (det er ikke muligt at vurdere om det er muligt eller ej udfra det foreliggende)
Avatar billede Slettet bruger
03. maj 2011 - 20:18 #9
Er nød til at bøje mig i støvet for arne_v :-)

En Service ville være den optimale løsning også hvis det omhandler flere SQL servere etc. Og absolut det hurtigste. Men nok lidt mere bøvlede at få implementeret i en større virksomhed med masser af regler.

Hvad med at implementere en extendet stored proecedure ?
Avatar billede HenrikSjang Nybegynder
03. maj 2011 - 22:34 #10
Der vil teknisk set ikke være noget problem i at lave et sql agent job, som er scheduleret til at køre hvert minut, og som udfører følgende:

WHILE (1=1)
BEGIN
  EXEC DinSP
  WAITFOR DELAY '00:00:01'
END

Dette vil så betyde, at jobbet for så vidt vil køre for evigt, og blot eksekvere din sp og så vente et sekund, og så gentage. Og hvis så jobbet crasher, eller serveren genstartes - ja så går der max 1 minut før den startes igen via sql server agent jobbet.

Om løsningen er god eller dårlig, vil jeg undlade at blande mig i. Men det kan i hvert fald laves som beskrevet ovenfor.
Avatar billede borrisholt Novice
04. maj 2011 - 06:30 #11
sjang det var noget i den stil jeg havde forestillet mig. Men jeg tænkte om SQL serveren kunne køre den i en service el.

Helt nøjagtigt så har jeg en tabel UserSessions jeg skriver i når man logger ind i mit program. En af de oplysninger jeg skriver ned er HostProcess det tal som du også finder nnede i sysprocesses.

Så vil jeg gerne lave en løsning som automatisk sletter rækken i UserSessions når sessionen dør. Altså når den ikke længere findes i sysprocesses.
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

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