如何找到 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,我已经在 JCL 中拥有了。我看不到你在用 H确实,您在链接到的手册页中发现了一个文档错误。但是,您也引入了自己的错误。
为您的 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=?的主要内容,如果未能解决你的问题,请参考以下文章