Avatar billede rmundt Nybegynder
11. oktober 2001 - 15:17 Der er 2 kommentarer og
2 løsninger

dbms_job

Med dbms_job.isummit kan man putte et job i Oracles scheduler og få det til at køre med intervaller.

Jeg har lavet følgende procedure:

procedure ZZZstart_job(jno BINARY_INTEGER)  IS
  jobno      BINARY_INTEGER;
BEGIN
  jobno := jno;
  DBMS_JOB.ISUBMIT(jobno,\'ZZZINSERTJOBSCH;\', SYSDATE, \'SYSDATE + 10/86400\');
  COMMIT;
END;

som ligger et job i \'job queue\' og skulle starte hvert 10 sekunde. ZZZINSERTJOBSCH er en procedure som indsætter nogle rækker i en tabel. Proceduren ser således ud:

Procedure ZZZInsertJOBSCH is


V_ANTAL Number;
Begin

    for V_ANTAL in 1..3 loop

        Insert Into ZZZTBLJOBSCH(Name) values (\'Test Linie nr. \' || V_ANTAL);

    end loop;
    COMMIT;
End;

Den bliver lagt i køen, men bliver ikke igangsat og begynder ikke at køre i intervaller. I next_sec bliver der insat et tidpunkt, men det er som at der er et eller andet som gør at jobscheduleren ikke fanger at der skal startes en kørsel.
Avatar billede teepee Nybegynder
11. oktober 2001 - 15:31 #1
Det ser ellers meget rigtigt ud. Prøv med et meget højt jobid (100000) eller prøv at sætte 10/86400 i parentes så der står sysdate + (10/86400)
Avatar billede Slettet bruger
11. oktober 2001 - 15:56 #2
Du skal have nogen linier i din init.ora:

job_queue_interval = 5
job_queue_processes = 1

og genstarte serveren
Avatar billede pnielsen Nybegynder
12. oktober 2001 - 18:45 #3
Jeg vil nok sige at job_queue_interval = 5 er MEGET lavt....
Det betyder at job processen checker hvert 5. sekund for et job der skal køres. En
normalt unødig belastning.
Men hvis jobbet SKAL køre hvert 10. sekund, er det se\'fø\'li en nødvendighed.

Bemærk at du med job=10 sek og interval=5 sek i værste tilfælde så vil have et job der kører med 14 sek mellemrum ;-)

Sæt job_queue_processes til et højere tal end 1! Så vil du kunne håndtere flere jobs af
gangen.

Iøvrigt behøver du ikke vende basen! Den kan sættes med
alter system set job_queue_processes=5;
Den vil se\'fø\'li så kun gælde til basen er blevet vendt, hvis du ikke sætter den i din init.ora!

Normalt tildeler jeg ikke jobnummer selv, men lader databasen om det!

var jobno number;
EXEC DBMS_JOB.SUBMIT(:jobno,\'MY_PROCEDURE;\', SYSDATE, \'SYSDATE + 1/24\');

Så vil den selv klare det....

Good luck
Avatar billede rmundt Nybegynder
16. oktober 2001 - 09:42 #4
Jeg satte både processes og intervals op og det virker nu.

Tak for hjælpen
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