0

每天在大型机中运行一些作业,我需要通过其他一些 jcl 或 rexx 自动获取它们的开始和结束时间,这可能吗?

4

4 回答 4

3

是的,这是可能的。正如@SaggingRufus 所指出的,您的作业调度程序(CA JMR、Control-M 等)可能会提供此功能 - 与您的技术人员交谈并询问。

可以通过与SDSF 的 Rexx 接口来执行此操作,然后安排一个作业来执行您的 Rexx 代码。执行 Rexx 代码的 ID 必须有权查看您希望检索其信息的作业。SDSF还有一个Java 接口。

您可以使用的另一种机制是 SMF,但除非您还拥有 MXG,否则这不会是一条容易的道路。

与您的技术人员交谈并解释您想要什么以及为什么,他们可能已经解决了这个问题。

于 2016-11-16T15:54:43.460 回答
2

执行您想要的操作的标准方法是使用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。免责声明:我是该产品的开发人员之一。

于 2016-11-18T07:11:02.297 回答
1

如果您的站点使用 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                                                    
/* 

那么您需要做的就是计算该文件中有多少条记录。

如果没有,其他作业调度程序可能会提供类似的功能。

于 2016-11-16T15:16:14.757 回答
0

另一种方法是向运行存储日期的 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(事件主记录)。

于 2016-11-17T19:28:33.633 回答