大型机 pkunzip 生成 PEX013W 记录被截断为 lrecl=

Posted

技术标签:

【中文标题】大型机 pkunzip 生成 PEX013W 记录被截断为 lrecl=【英文标题】:Mainframe pkunzip generates PEX013W Record(s) being truncated to lrecl= 【发布时间】:2018-05-15 20:14:24 【问题描述】:

我正在通过 ftps 从 Linux 向 z/OS 发送二进制 .gz 文件。文件传输似乎没问题,但是当大型机人员 pkunzip 文件时,他们会收到警告:

PEX013W 记录被截断为 lrecl= 996。记录# 1 为 1000 字节。

目前我正在发送站点命令:

SITE TRAIL
200 SITE command was accepted
SITE CYLINDERS PRIMARY=50 SECONDARY=50
200 SITE command was accepted
SITE RECFM=VB LRECL=1000 BLKSIZE=32000
200 SITE command was accepted
SITE CONDDISP=delete
200 SITE command was accepted
TYPE I
200 Representation type is Image
... 
250 Transfer completed successfully.
QUIT
221 Quit command received. Goodbye.

他们可以在 pkunzip 之后读取文件,但出现警告并不是一件好事。

pkunzip 的输出:

SDSF OUTPUT DISPLAY RMD0063A JOB22093  DSID   103 LINE 25      COLUMNS 02- 81 
COMMAND INPUT ===>                                            SCROLL ===> CSR 
PCM123I Authorized services are unavailable.                                  
PAM030I INPUT  Archive opened:  TEST.FTP.SOA5021.GZ                        
PAM560I ARCHIVE FASTSEEK processing is disabled.                              
PDA000I  DDNAME=SYS00001,DISP_STATUS=MOD,DISP_NORMAL=CATALOG,DISP_ABNORMAL=   
PDA000I     SPACE_TYPE=TRK,SPACE_TYPE=CYL,SPACE_TYPE=BLK                      
PDA000I     SPACE_PRIMARY=4194304,SPACE_DIRBLKS=5767182,INFO_ALCFMT=00        
PDA000I     VOLUMES=DPPT71,INFO_CNTL=,INFO_STORCLASS=,INFO_MGMTCLASS=         
PDA000I     INFO_DATACLASS=,INFO_VSAMRECORG=00,INFO_VSAMKEYOFF=0              
PDA000I     INFO_COPYDD=,INFO_COPYMDL=,INFO_AVGRECU=00,INFO_DSTYPE=00         
PEX013W Record(s) being truncated to lrecl= 996. Record# 1 is 1000 bytes.    
PEX002I TEST.FTP.SOA5021                                                   
PEX003I Extracted to TEST.FTP.SOA5021I.TXT                                 
PAM140I FILES:   EXTRACTED  EXCLUDED  BYPASSED  IN ERROR                      
PAM140I                  1         0         0         0                      
PMT002I PKUNZIP processing complete. RC=00000004 4(Dec) Start: 12:59:48.86 End

是否有更好的站点命令集来将 .gz 文件从 Linux 传输到 z/OS 以避免此错误?

**** 更新****

使用下面的 SaggingRufus 的答案,事实证明,如何发送 .gz 文件并不重要,只要它是二进制文件即可。他的建议向我们指出了为输出文件发送到 pkunzip 的参数,该文件是 VB,并且正在从记录中截断 4 个字节。

【问题讨论】:

如果您没有考虑过,这是 z/OS UNIX 服务 (USS) 派上用场的领域之一……在 Linux 上,您可以使用 TAR、GZIP - 无论您使用什么像 - 然后在 z/OS 上扩展成一个 UNIX 风格的文件系统...非常方便,省去了进出传统 z/OS 数据集的麻烦。 我同意瓦莱丽的观点。如果你使用 Unix 系统服务,生活会更顺畅 @mike 同意,我没有遗漏的是,我们也带着这些文件去 MVS。再加上我们的开发人员是终生从事 MVS 的人,Unix 服务对他们来说是相当陌生的。我们快到了,只是比我希望的要慢。如果我有专门的人在这方面,我会花更多的时间来试验各种参数。很有可能,将其更改为 FB 会奏效。这里有很多不耐烦和“离开我的草坪”的心态!哈哈 【参考方案1】:

因为是可变块文件,所以有4个字节分配给记录属性。分配 LRECL 为 1004 的文件就可以了。

【讨论】:

有道理,尽管我最初确实使用了 1024 并收到了相同的警告。我应该将 RECFM 更改为其他类似 recfm=U 或 ???我不是大型机专家,所以文件中的数据由于记录格式而出现问题?该文件里面是 1000 字节的 ascii 字符。我认为格式会影响二进制文件(gz)。我并没有真正考虑解压缩的文件。 总是1000字节吗?如果是这样,您可能希望使用 LRECL 为 1000 的 FB(固定块)。这告诉大型机记录的长度固定为 1000 字节(而不是可变长度)。 RECFM 不会改变文件的“格式”,只是解释记录的方式。大型机以外的东西真的不是处理可变块文件的好方法尝试使用FB(固定块)【参考方案2】:

与其生成 .zip 文件,不如生成 .tar.gz 文件并将其传输到 z/OS UNIX? Tar 默认随 z/OS 一起提供,Rocket Software 提供了一个针对 z/OS 优化的 gzip 端口。

【讨论】:

Anthony,想联系你,请你看看我的 Meta 帖子“Merge/cleanup tags [zos], [mvs], [zseries], and [mainframe]”,并以比我更了解这些标签的人的身份发表评论吗?

以上是关于大型机 pkunzip 生成 PEX013W 记录被截断为 lrecl=的主要内容,如果未能解决你的问题,请参考以下文章

ORACLE - 哪个更好地生成记录、视图、SP 或函数的大型结果集

BitTorrent 的 Peer Exchange (PEX) 协议规范在哪里/是啥?

DHT 和 PEX 跟踪哪些对等点

如何告诉 Pex 不要存根具有具体实现的抽象类

BitTorrent 协议中的 PEX 和 DHT 有啥区别?

PEX 批量装机