MainframeSupports
tip uge 16/1999:

Nogen gange sker det, at man afvikler nogle jobs samtidigt, som ikke kan tåle at køre samtidigt. Et eksempel er to jobs, der opdaterer de samme DB2-tabeller og derfor nogle gange deadlocker med hinanden. Der findes en nem løsning på den slags problemer og det handler ugens tip om.

Når et dataset i et job benyttes med DISP=OLD (i stedet for DISP=SHR), vil det ikke være muligt for andre at benytte det samme dataset samtidigt. Jobbet går først i gang, når ingen andre benytter datasettet og ingen andre kan benytte datasettet før det sidste step i jobbet, der benytter datasettet, er slut. "Andre" er i denne forbindelse ikke alene jobs, men også started tasks og TSO-brugere.

Man kan altså undgå, at to jobs kører samtidigt, ved at lade begge jobs benytte det samme dataset med DISP=OLD. Det bedste er, at oprette et særligt dataset til formålet i stedet for at anvende et eksisterende, som måske benyttes til andre ting. Faktisk kan man oprette datasets, der ikke fylder noget og dermed heller kan indeholde nogen data. Det gøres lettest med følgende step:
 

//IEFBR14  EXEC PGM=IEFBR14
//DUMMYDSN DD DSN=MIT.DISP.OLD.DATASET,DISP=(MOD,CATLG,CATLG),
//            UNIT=SYSALLDA,SPACE=(TRK,0)
 
Steppet opretter datasettet MIT.DISP.OLD.DATASET, og hvis det findes i forvejen, sker der intet. De to jobs, man ønsker at forhindre i at køre samtidigt kan nu benytte dette dataset med DISP=OLD. Alt, hvad der skal til, er at tilføje følgende linie i sine jobs et passende sted:
 
//DUMMYDSN DD DSN=MIT.DISP.OLD.DATASET,DISP=OLD
Der skal ingen programrettelser eller noget andet til og det fungerer uafhængigt af, hvad problemstillingen ellers er, hvis jobbene kører samtidigt.
Sidste uges tip        Tip oversigten