
Ved Renden 31 2870 Dyssegaard Tel. +45 23 34 54 43
| 
MainframeSupports tip uge 18/2005:
Mange installationer kører stadig IMS, fordi IMS ved restart efter et nedbrud
kan positionere den næste skrivning til et dataset korrekt. Problemstillingen
er typisk, at man læser og opdaterer i DB2 og samtidig skriver til et
dataset. Stort set alle installationer sørger for, at deres opdaterende DB2
programmer foretager COMMIT med jævne mellemrum. Desværre har MVS ikke nogen
indbygget facilitet til at foretage COMMIT af datasets. Det er her IMS kommer
ind i billedet på mange installationer. IBM har udviklet et ikke særlig kendt
produkt til at klare situationen i stedet for IMS, men jeg kan ikke huske dets
navn. Nogen få installationer har valgt selv at kode noget, så man slipper for
IMS og lignende.
Jeg havde længe grublet over, hvor svært det kan være at lave en simpel restart
til flade filer i stedet for at anvende diverse typisk dyre produkter. Mit behov
var at lave et job, som hvis det gik ned skulle kunne restartes på præcis samme
JCL som det oprindeligt blev submittet med. Det giver som regel færrest
problemer i en driftsituation. Mit job kom til at bestå af følgende komponenter:
- Læsning af DB2 restart tabel med information om, dels hvor langt behandlingen
var kommet rent DB2-mæssigt, men især om hvor mange records der var skrevet til
output datasettet.
- Hvis der ikke var skrevet nogen records eller restart tabellen ikke indeholdt
informationer om nogen nedbrudt kørsel, så antog jeg, at behandlingen startede
fra "toppen". I denne situation slettede jeg et eventuelt gammelt output dataset
og allokerede et nyt.
- Hvis der til gengæld var tale om en restart situation, så foretog jeg følgende:
- RENAME af output dataset
- ALLOC af nyt output dataset med samme attributter som det oprindelige
- Kopiering af det antal records, som restart tabellen angav fra det renamede
dataset over i det nye.
- DELETE af det renamede dataset
- Kørsel af selve programmet, der altid allokerede output datasettet med
DISP=MOD. Hver gang programmet foretog en COMMIT, så opdaterede det lige før
COMMIT'en restart tabellen med antallet af skrevne records. Når programmet kørte
færdigt uden nedbrud, så sørgede det for at fjerne restart oplysningerne fra
restart tabellen.
Ovenstående fremgangsmåde virkede strålende i praksis. Det irriterende ved
løsningen er, at man er nødt til at foretage en kopiering, som man oven i købet
skal lave et program til at håndtere på den ene eller anden måde. Hvordan du
vil implementere fremgangsmåden er helt op til dig. Det kan gøres på et utal af
måder.
Der er dog en vigtig detalje, du skal være opmærksom på. Når selve programmet
bryder ned, så skal du helst selv få kontrollen, så du pænt kan lukke output
datasettet. Hvis du ikke får det, så er der risiko for, at MVS ikke får skrevet
alle records ud på disk og dermed kan dit output dataset ende med at indeholde
færre records end din restart tabel angiver. Derfor er det vigtigt, at dit
kopieringsprogram kan opdage en sådan situation og stoppe videre afvikling.
Fremgangsmåden kan også anvendes til løsninger helt uden DB2. Så skal du
bare finde en anden måde at gemme informationen om hvor langt, du er nået.
Forrige danske tip
Last tip in english
Tip oversigten
|