如何找到 JCL MSGCLASS=?

Posted

技术标签:

【中文标题】如何找到 JCL MSGCLASS=?【英文标题】:How to find JCL MSGCLASS=? 【发布时间】:2014-01-02 17:54:16 【问题描述】:

我正在编写来自 IBM publib.boulder 站点的基本 JCL 脚本。下面是简单地按升序对字符列表进行排序的 JCL。作业执行得很好,但是SYSIN的内容并没有打印到作业状态,如publib demonstration中所示

这是我的代码:

//SORT JOB OTIMPF01,CLASS=A,MSGCLASS=H 
/*                                     
//STEP1 EXEC PGM=SORT                  
//SYSIN DD *  SORT   FIELDS=(1,75,CH,A)
/*                                     
//SYSOUT  DD   SYSOUT=*                
//SYSIN   DD   *                       
NEPTUNE                                
PLUTO                                  
EARTH                                  
VENUS                                  
MERCURY                                
MARS                                   
URANUS                                 
SATURN                                 
JUPITER                                
/*                                     
//SORTOUT  DD SYSOUT=*                 
/* 

我知道这与 MSGCLASS= 语句有关。来自 publib 的示例代码使用 MSGCLASS=H,有人告诉我,这取决于谁在大型机上设置了选项。我的问题是,我怎样才能弄清楚我的大型机的 MSGCLASS 设置为什么而无需询问任何人?同样,我只想将按升序排序的字符结果显示在作业状态中。

它应该看起来像这样......

ICE134I 0 NUMBER OF BYTES SORTED: 720 
 ICE180I 0 HIPERSPACE STORAGE USED = 0K BYTES 
 ICE188I 0 DATA SPACE STORAGE USED = 0K BYTES 
 ICE052I 0 END OF DFSORT   
 EARTH 
 JUPITER    
 MARS 
 MERCURY 
NEPTUNE                                                                                    
 PLUTO 
 SATURN  
 URANUS 
 VENUS 

...只有我的工作状态读数不会在工作状态的输出中显示字符 Earth through Venus。

我的工作状态是这样的......

IEF373I STEP/STEP1   /START 2014002.1033                                                                                           
IEF374I STEP/STEP1   /STOP  2014002.1033 CPU    0MIN 00.00SEC SRB    0MIN 00.00SEC VIRT   212K SYS   248K EXT       8K SYS   11592K
IEF375I  JOB/SORT    /START 2014002.1033                                                                                           
IEF376I  JOB/SORT    /STOP  2014002.1033 CPU    0MIN 00.00SEC SRB    0MIN 00.00SEC                                                 
ICE000I 1 - CONTROL STATEMENTS FOR 5694-A01, Z/OS DFSORT V1R5 - 10:33 ON THU JAN 02, 2014 -                                        
ICE010A 0 NO SORT OR MERGE CONTROL STATEMENT                                                                                       
ICE751I 0 C5-K05352 C6-Q95214 E7-K90000                                                                                            
ICE052I 3 END OF DFSORT   

我想这与正确设置 MSGCLASS 有关。我试过用谷歌搜索 z/OS MSGCLASS,不出所料,结果很少。

【问题讨论】:

还有!我得到一个 COND CODE 0016。 是的,CC16 也是因为ICE010A 你为什么不想问别人用什么MSGCLASS? 我们的大型机充当测试环境。我们没有托管数据中心。设置它的工程师目前不在城里。显然我可以打电话给他,但我想有一个简单的方法可以找到 MSGCLASS。简而言之,我们实际上并没有专门的系统程序员或管理员或类似的东西。虽然这里有非常聪明的人,但他们经常忙于其他事情,所以我通常会专注于 IBM 文档,这(无意冒犯)并不总是最好的 :) 完全没有冒犯。几十年来,IBM 一直以其迟钝且并非总是准确的文档而闻名。 ;) 【参考方案1】:

关键问题是ICE010A 0 NO SORT OR MERGE CONTROL STATEMENT。假设您在此处正确转录了您的 JCL,您输入:

//SYSIN DD *  SORT   FIELDS=(1,75,CH,A)
/*

在这种情况下,您向SORT 提供了一个空输入流,因为SORT FIELDS=(1,75,CH,A) 被视为对DD 语句的注释。

您应该输入:

//SYSIN DD *
  SORT   FIELDS=(1,75,CH,A)
/*

【讨论】:

谢谢!我只是在编写 IBM 文档所写的内容。我猜他们犯了一个错误。不过有一个问题...为什么您的 SORT 行不必以“//”标记开头? 你还有很多阅读工作要做:-) 短篇小说,//SYSIN DD * 的意思是“从下一张卡片/行开始的所有内容,直到带有 /* 的卡片/行第 1-2 列是 SYSIN 输入流”。 SYSIN 是标准输入流的大型机等效项。 太好了,这非常有用。你是对的,我还有很多阅读要做。我敢肯定,您可以想象我首先将这个数据集放在磁带上需要什么;)【参考方案2】:

在 SDSF 中尝试 ST jobname,它会显示所有输出。 ST 是作业的状态,显示系统上所有作业提交或完成的所有输出。

此外,如果您正在查看挂起队列 H jobname,请查看它为您的作业显示的输出类,并尝试将 msgclass 更改为挂起队列中显示的类之一。例如,在我的系统上,我可以在保留队列中看到类 X 和 H,但是当我使用 ST 命令时只能看到类 A

【讨论】:

谢谢,我能用 ST 找到 CLASS= 参数。我现在知道我是 CLASS=A,我已经在 J​​CL 中拥有了。我看不到你在用 H 谈论什么。它表明该类仍然是 A。所以我假设 CLASS=A,MSGCLASS=A。我在我的 JCL 中设置了这些参数,但我仍然看不到我希望看到的字符输出。我的代码肯定有其他问题。谢谢,H 是一个有用的资源,它排除了任何可能的 MSGCLASS 或 CLASS 参数错误。【参考方案3】:

确实,您在链接到的手册页中发现了一个文档错误。但是,您也引入了自己的错误。

为您的 Mainframe 安装 SORT 包(可能是 IBM 的 DFSORT 或竞争对手的 SyncSort,但也可能是进一步的竞争对手 CA-SORT):

//SYSIN DD whatever

是你放置控制卡的地方。

在上面,可以是 *、DATA 或实际数据集的参数。

您使用的 SORT 程序的输入的 DDNAME 是 SORTIN:

//SORTIN DD whatever (same as above)

你不小心也做了那个 SYSIN。应该是:

//SYSIN   DD   *                       
NEPTUNE                                
PLUTO                                  
EARTH                                  
VENUS                                  
MERCURY                                
MARS                                   
URANUS                                 
SATURN                                 
JUPITER       

然后您应该会在 SORTOUT 假脱机文件中看到示例的输出。

当您使用 SORT(如 MERGE、JOINKEYS、OUTFIL)执行其他操作时,还有其他 DD 可以或确实使用不同命名的 DD。也可以覆盖标准名称,但不能将它们覆盖为 SYSIN。

//SYSIN DD * 有点像 STDIN,但不要被比较冲昏了头脑。按照惯例,许多大型机实用程序使用 SYSIN 作为输入。如果 JCL 流包含前面没有 DDName 的“卡片”,则将自动生成 SYSIN 的 DDName。 COBOL 有一个用于输入类型的 ACCEPT 动词,默认的 DD 是 SYSIN。但是,仅仅在 JCL 中包含一个步骤的 SYSIN 并不能保证它会被使用。如果 EXEC 上的程序不使用 SYSIN,那么简单地包含 SYSIN 不会导致从那里读取数据。

【讨论】:

是的,主机使用了DFSORT。我将不得不研究更多你在这里所说的内容。我将我的 //SORTIN 更改为 //SYSIN 并查看差异。该脚本实际上是按原样工作的,所以我将看看输出的差异。 @Mac 那时可能是个意大利面。在您的问题中,您没有 SORTIN,但有两个 SYSIN。

以上是关于如何找到 JCL MSGCLASS=?的主要内容,如果未能解决你的问题,请参考以下文章

如何从主 jcl 调度子 jcl

如何调试 JCL

如何使用jcl比较多个文件

使用 JZOS 工具包的 JCL 作业中所有 z/OS DD 语句的列表

如何通过 JCL 将参数传递给 REXX 程序

如何保护 JCL FTP 中的存储密码?