So habe ich einen Batch-Job, der SMF-Typ 14, 15 und 17 Datensätze in 3 separate Dateien extrahiert und formatiert dann die Dateien, um eine Liste der Datensätze zu erstellen gelesen, geschrieben und gelöscht durch welche Jobs. Dies wird dann nach Zeitstempel sortiert, so dass Sie den "Lebenszyklus" für einen bestimmten Datensatz sehen können.Vereinfachung eines DF/Sort-Jobs, der SMF liest, um den Lebenszyklus einer Datenmenge zu analysieren.
Ich weiß jedoch, dass DF/Sortt ziemlich mächtig ist und ich denke, dass mein erster Schritt, die Typ 14, 15 und 17 Datensätze zu trennen, nicht notwendig ist, und es könnte in einem Schritt gemacht werden, aber ich ' Ich bin nicht wirklich sicher, wo ich anfangen soll, da DFSort/ICETOOL ziemlich anspruchsvoll geworden ist.
Hier ist meine aktuelle JCL:
//JBSP03DL JOB (JSDBBSP,P10),'SMF F NOW',
// NOTIFY=&SYSUID,
// CLASS=L,
// MSGCLASS=X,
// REGION=8M
//*
//DELETE EXEC PGM=IEFBR14
//OUTDSN DD DISP=(MOD,DELETE),DSN=JSDBSP.JBSP03.DSLIFE.TXT,
// UNIT=SYSDA
//*
//SMFDUMP EXEC PGM=IFASMFDP,REGION=6M
//*
//SYSPRINT DD SYSOUT=*
//* Extract type 14, 15 and 17 records into 3 temporary datasets
//DUMPIN DD DISP=SHR,DSN=JSHSMF.SMF.JXSF.MANDUMP
//*
//DUMP14 DD DISP=(,PASS),DSN=&&TYPE14,
// UNIT=SYSDA,SPACE=(CYL,(500,200),RLSE),
// BUFNO=20,BLKSIZE=27998,LRECL=32760,RECFM=VBS
//DUMP15 DD DISP=(,PASS),DSN=&&TYPE15,
// UNIT=SYSDA,SPACE=(CYL,(500,200),RLSE),
// BUFNO=20,BLKSIZE=27998,LRECL=32760,RECFM=VBS
//DUMP17 DD DISP=(,PASS),DSN=&&TYPE17,
// UNIT=SYSDA,SPACE=(CYL,(500,200),RLSE),
// BUFNO=20,BLKSIZE=27998,LRECL=32760,RECFM=VBS
//*
//SYSIN DD *
INDD(DUMPIN,OPTIONS(DUMP))
OUTDD(DUMP14,TYPE(14))
OUTDD(DUMP15,TYPE(15))
OUTDD(DUMP17,TYPE(17))
//*
//SORTPROC PROC
//SORTWRTE EXEC PGM=SORT,REGION=8M
//SORTOUT DD DISP=MOD,DSN=&&SORTTMP,
// SPACE=(CYL,(20,20)),UNIT=SYSDA
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SORTWK01 DD DISP=(NEW,DELETE),DSN=&&TEMPSORT,UNIT=SYSDA,
// SPACE=(CYL,(50,50))
// PEND
//*
//* Process the type 14 records
//TYPE14 EXEC SORTPROC
//SORTIN DD DISP=SHR,DSN=&&TYPE14
//SORTOUT DD DISP=(,PASS),DSN=&&SORTTMP,
// SPACE=(CYL,(20,20)),UNIT=SYSDA,
// LRECL=133
//SYSIN DD *
SORT FIELDS=(11,4,PD,A,7,4,PD,A)
SUM FIELDS=NONE
OUTREC BUILD=(11,4,DT1,EDIT=(TTTT-TT-TT), DATE OF RECORD
C' AT ',
7,4,TM4,EDIT=(TT:TT:TT.TT), TIME OF RECORD
C' ',
69,44,
C' was opened by ',
19,8),CONVERT
//*
//* Process the type 15 records
//TYPE15 EXEC SORTPROC
//SORTIN DD DISP=SHR,DSN=&&TYPE15
//SYSIN DD *
SORT FIELDS=(11,4,PD,A,7,4,PD,A)
SUM FIELDS=NONE
OUTREC BUILD=(11,4,DT1,EDIT=(TTTT-TT-TT), DATE OF RECORD
C' AT ',
7,4,TM4,EDIT=(TT:TT:TT.TT), TIME OF RECORD
C' ',
19,8,
C' opened ',
69,44,
C' for output'),CONVERT
//*
//* Process the type 17 records
//TYPE17 EXEC SORTPROC
//SORTIN DD DISP=SHR,DSN=&&TYPE17
//SYSIN DD *
SORT FIELDS=(11,4,PD,A,7,4,PD,A)
SUM FIELDS=NONE
OUTREC BUILD=(11,4,DT1,EDIT=(TTTT-TT-TT), DATE OF RECORD
C' AT ',
7,4,TM4,EDIT=(TT:TT:TT.TT), TIME OF RECORD
C' ',
19,8,
C' deleted ',
44,44),CONVERT
//*
//* Finally sort the output file by the date & time stamp
//*
//FINAL EXEC SORTPROC
//SORTIN DD DISP=(OLD,DELETE),DSN=&&SORTTMP
//SORTOUT DD DISP=(NEW,CATLG),DSN=JSDBSP.JBSP03.DSLIFE.TXT,
// UNIT=SYSDA,LRECL=121,RECFM=FB,SPACE=(CYL,(20,30))
//SYSIN DD *
SORT FIELDS=(1,23,CH,A)
Es ist möglich, dies zu tun, ohne die 14, 15 und 17 Datensätze in separate Dateien zu trennen?
Edit: die obige JCL tut genau das, was ich wan, aber ich würde in der Lage sein, nach Dataset-Namen oder Job-Namen zu filtern, da dies eine Menge Ausgabe produzieren kann, die dann für ISPF Edit zu groß ist oder Ansicht für eine weitere Analyse
Edit:
Type 14 :
5 5 SMF14RTY 1 binary Record type 14 (X'0E').
18 12 SMF14JBN 8 EBCDIC Job name.
68 44 SMF14_JFCBDSNM 44 EBCDIC DATA SET NAME (DSNAME=)
Type 15 :
5 5 SMF14RTY 1 binary Record type 14 (X'0F').
18 12 SMF15JBN 8 EBCDIC Jobname
68 44 SMF15_JFCBDSNM 44 EBCDIC DATA SET NAME (DSNAME=)
Type 17:
5 5 SMF17RTY 1 binary Record type 17 (X'11').
18 12 SMF17JBN 8 EBCDIC Job name.
44 2C SMF17DSN 44 EBCDIC Data set name.
Eine weitere Verbesserung wäre zu prüfen, ob ein OPEN wurde tatsächlich den Datensatz zu erstellen. Ich sollte auch RENAMES hinzufügen, sonst könnten Sie den Überblick darüber verlieren, was mit einem bestimmten Datensatz passiert ist.
Edit:
Richtlinien Bill Folgen, meine JCL ist jetzt:
//DELETE EXEC PGM=IEFBR14
//OUTDSN DD DISP=(MOD,DELETE),DSN=JSDBSP.JBSP03.DSLIFE.TXT,
// UNIT=SYSDA
//*
//SORTWRTE EXEC PGM=SORT,REGION=8M
//*
//SORTIN DD DISP=SHR,DSN=JSHSMF.SMF.JXSG.MANDUMP
//SORTOUT DD DISP=(MOD,CATLG),DSN=JSDBSP.JBSP03.DSLIFE.TXT,
// SPACE=(CYL,(20,20)),
// UNIT=SYSDA,LRECL=133
//*
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYMNOUT DD SYSOUT=*
//SYMNAMES DD *
SMF-RECORD-TYPE,5,1,BI
SMF-JOB-NAME,19,8,CH
SMF-14-15-DSN,69,44,CH
SMF-17-DSN,44,44,CH
SMF-DATE,11,4,DT1
SMF-TIME,7,4,TM4
//*
//SYSIN DD *
SORT FIELDS=(11,4,PD,A,7,4,PD,A)
OUTREC IFTHEN=(WHEN=(SMF-RECORD-TYPE,EQ,14),
BUILD=(SMF-DATE,EDIT=(TTTT-TT-TT),
C' AT ',
SMF-TIME,EDIT=(TT:TT:TT.TT),
C' ',
SMF-14-15-DSN,
C' was opened by ',
SMF-JOB-NAME)),CONVERT
Aber das gibt:
OUTREC IFTHEN=(WHEN=(5,1,BI,EQ,14),BUILD=(11,4,DT1,EDIT=(TTTT-TT-TT),C' AT ',7,4
,TM4,EDIT=(TT:TT:TT.TT),C' ',69,44,C' was opened by ',19,8)),CONVERT
*
WER268A OUTREC STATEMENT : SYNTAX ERROR
die
Weglassen, CONVERT
gibt mir:
WER235A OUTREC RDW NOT INCLUDED
Bearbeiten - letzte Änderung:
Nur versuchen, Typ 14 Datensätze zu isolieren, so Stromeingang ist jetzt:
//SYMNAMES DD *
SMF-RECORD-TYPE,6,1,BI
SMF-JOB-NAME,11,8,CH
SMF-14-15-DSN,65,44,CH
SMF-17-DSN,44,44,CH
SMF-DATE,11,4,DT1
SMF-TIME,7,4,TM4
SYSIN DD *
SORT FIELDS=(11,4,PD,A,7,4,PD,A)
OUTFIL IFTHEN=(WHEN=(SMF-RECORD-TYPE,EQ,14),
BUILD=(1,4,SMF-DATE,EDIT=(TTTT-TT-TT),
C' AT ',
SMF-TIME,EDIT=(TT:TT:TT.TT),
C' ',
SMF-14-15-DSN,
C' was opened by ',
SMF-JOB-NAME))
Hallo David. Ja, aber die Frage ist, wie man die SORT-Anweisungen danach kombiniert. –
David - Ja, jetzt kann ich zwischen den Datensatztypen im Code unterscheiden, ich kann einfach das SMF-Archiv als Eingabe für meine SORT verwenden. Ich habe sie vorher getrennt, damit ich für jeden Typ 3 leicht unterschiedliche Sätze von Steueranweisungen ausführen konnte. –