每天在大型机中运行一些作业,我需要通过其他一些 jcl 或 rexx 自动获取它们的开始和结束时间,这可能吗?
4 回答
是的,这是可能的。正如@SaggingRufus 所指出的,您的作业调度程序(CA JMR、Control-M 等)可能会提供此功能 - 与您的技术人员交谈并询问。
可以通过与SDSF 的 Rexx 接口来执行此操作,然后安排一个作业来执行您的 Rexx 代码。执行 Rexx 代码的 ID 必须有权查看您希望检索其信息的作业。SDSF还有一个Java 接口。
您可以使用的另一种机制是 SMF,但除非您还拥有 MXG,否则这不会是一条容易的道路。
与您的技术人员交谈并解释您想要什么以及为什么,他们可能已经解决了这个问题。
执行您想要的操作的标准方法是使用SMF 30记录。您可以在 REXX 中执行此操作,但如果您不了解 SMF 记录的格式,则会有点棘手。您的站点可能有一个像 SAS 这样的工具,可以让它变得微不足道。
- SMF 30 子类型 1 在作业(或任何地址空间)开始时写入。
- SMF 30 子类型 5 在作业结束时写入。
还有其他几种子类型记录,例如作业步骤终止增量。SMF 30 绝对包含您可能想了解的有关批处理作业的所有信息。如果您只是想知道一个作业花费了多少时间或 CPU 时间,那么只需阅读子类型 5 并查看性能部分。
如果您确实必须使用 REXX,那么有些产品具有访问 SMF 数据的 REXX API,例如IBM Transaction Analysis Workbench for z/OS。免责声明:我是该产品的开发人员之一。
如果您的站点使用 CA JMR,此解决方案将有效
//SCANJMR JOB (11111),'JMRSCAN',
// CLASS=T,MSGCLASS=X,MSGLEVEL=(1,1),
//SCAN EXEC JMRSCAN
//JMRPRINT DD DSN=&&OUTDATASET,
// DISP=(NEW,CATLG,),
// UNIT=SYSDA,SPACE=(TRK,(20,20)),
// DCB=(LRECL=133,RECFM=FB,BLKSIZE=6118)
//JMRIN DD *
FUNCTION LIST=ALL JOBMASK=* SDATE=16/11/16
EDATE=16/11/16
/*
那么您需要做的就是计算该文件中有多少条记录。
如果没有,其他作业调度程序可能会提供类似的功能。
另一种方法是向运行存储日期的 Rexx 程序的作业添加一个简单的步骤。
这些步骤甚至不需要在实际的生产作业中,您可以将它们安排为作业,生产作业作为后继,然后作为前驱。
Rexx 具有内置的时间和日期函数,它们的使用示例是:-
rc = audit('OACG22X Invoked by' userid() 'at' time() 'on' date()'.')
您可以通过使用 MOD 的 DISP 或通过读入然后用添加的新记录重写它来更新报告数据。EXECIO是您将使用的 rexx 函数。
当您运行报告时,这将清除数据或循环 GDG(创建一个空的 +1)。
以下 Rexx 非常接近可以使用的内容(尽管相当膨胀,即您基本上会对EXECIO和out.1的生成感兴趣(使用当前日期和时间),(这仅在输出)):-
/* REXX - CYCLE TAPES WITHIN A POOL FOR EMHA800W BATCH JOB */
/*--------------------------------------------------------------------*/
/* read in data from tape cycle dataset */
/*--------------------------------------------------------------------*/
"EXECIO 1 DISKR CYCTAPE (stem in. FINIS"
LastTape = SUBSTR(in.1,1,6)
If LastTape = "XXXXXX" Then NewTape = "SAP001"
Else Do
TapeNum = SUBSTR(in.1,5,2)
If DATATYPE(TapeNum,"N") Then Do
NewNum = TapeNum + 1
If Newnum > 4 Then NewNum = 1
RetCde = NewNum
Newnum = RIGHT(Newnum,2,"0")
NewTape = "SAP0"||NewNum
End
Else RetCde = 100
End
out.1 = NewTape||" "||DATE("E")||" "||TIME("N")
"EXECIO 1 DISKW CYCTAPEO (stem out. FINIS"
Say "Return Code will be "||RetCde
Return RetCde
此处详细介绍了通过批处理运行 Rexx如何将我的 Rexx 程序作为批处理作业运行?.
我没有使用过 Zeke,但通过非常简短的搜索,您似乎可以检查EMR(事件主记录)。