如何通过NDM从unix系统向unix主机发送一个可变块(每条记录长度可变)的二进制(ebcdic格式)文件?

How to send a binary (ebcdic format) file with variable blocks (each record has variable length), from a unix system to a unix mainframe through NDM?

这是我的 NDM 脚本:


#!/bin/bash -x
#/cdunix/ndm/bin/ndmcli -x -e 4 << _EOF_
#sub maxdelay=unlimited statemnt process snode=$DEST_NODE
export NDMAPICFG=/home/drone/ndmscripts/ndmapi.cfg
NDM_FILE=
DEST_FILE=`basename `
DEST_NODE=AAA
/cdunix/ndm/bin/ndmcli -x -e 4 << _EOF_
sub maxdelay=unlimited testcopy process snode=$DEST_NODE snodeid=(BBB,123)
setop01 copy from (
                        SYSOPTS=":DATATYPE=BINARY:XLATE=NO:STRIP.BLANKS=NO:"
                        file=$NDM_FILE
                        pnode
                )
             COMPRESS EXTENDED
             to   (
                        DSN=$DEST_FILE(+1)
                        UNIT=(BATCH,2)
                        SPACE=(CYL,(500,500),RLSE)
                        DCB=(RECFM=VB,LRECL=726,BLKSIZE=0)
                        snode
                )
        pend;
_EOF_

我在这里将 LRECL 指定为 1004,因为最大记录长度为 1000。我将 RECFM 指定为 VB 以表示这是一个可变块记录。但仍然在 unix 大型机上,他们收到的文件是固定长度 1000。 我的前 3 条记录的长度分别为 132、32、1000。 它用前2条记录(164)和第三条记录的836位置填充第一行并将第三条记录的提醒放在第二行等等。 所以,我在 unix 大型机上的位置不匹配。 我只能在 unix 方面进行更改。但在客户端的 unix 大型机端无能为力。 如何更改我的脚本以将文件作为可变长度记录发送?

P.S : 我已经通读了与该主题相关的所有主题。在过去的 3 个月里,我尝试了将近 100 项更改。没有什么对我有用。

你必须使用 FB 并设置块大小。

您的 VB 记录格式实际上工作正常,这就是它填充不同行的原因。

正如@BillWoodger 之前提到的,当您指示 block、recfm、cyclinders 而不是 运行 上的 z/OS Unix 文件结构时,您将它发送到 z/OS 数据集结构大型机(USS - Unix 系统服务),例如 HFS 或 zFS。

我们在将 BIN 修复和 PTFS 上传到 z/OS 数据集文件结构时体验到这是我们的商店。如果我们采用默认值,它将变得一团糟,无法阅读。

我们必须 FTP 使用如下内容:

set pri=20
set sec=20
set proddataset=IPP.PROD
set dsntype=cylinders
set recfm=fb
set lrecl=27998
set blksize=27998
set volume=PPINS2

echo quote site pri=%pri% sec=%sec% %dsntype% recfm=%recfm% lrecl=%lrecl% blksize=%blksize% volume=%volume%

您是否尝试过以下方法:

setop01 copy from (
                        SYSOPTS=":DATATYPE=VB:"
                        file=$NDM_FILE
                        pnode
                  )

奇怪.. 我用 SYSOPTS=":DATATYPE=VB:" 尝试了很多,但没有任何效果。 然后我尝试将 RECFM 作为 VB 而不是 VBM(由 IBM 指定)并将 LRECL 作为 1004(我的报告的默认值)而不是 726(实际最大记录长度)并且它有效。

这是我的 NDM 脚本:

#!/bin/bash -x
#/cdunix/ndm/bin/ndmcli -x -e 4 << _EOF_
#sub maxdelay=unlimited statemnt process snode=$DEST_NODE
export NDMAPICFG=/home/drone/ndmscripts/ndmapi.cfg
NDM_FILE=
DEST_FILE=`basename `
DEST_NODE=XXX
/cdunix/ndm/bin/ndmcli -x -e 4 << _EOF_
sub maxdelay=unlimited testcopy process snode=$DEST_NODE snodeid=(AAA,123)
setop01 copy from (
                        SYSOPTS=":DATATYPE=VB:XLATE=NO:STRIP.BLANKS=NO:"
                        file=$NDM_FILE
                        pnode
                )
                COMPRESS EXTENDED
             to   (
                        DSN=$DEST_FILE(+1)
                        UNIT=(BATCH,2)
                        SPACE=(CYL,(500,500),RLSE)
                        DCB=(RECFM=VB,LRECL=1004,BLKSIZE=0)
                        snode
                )
        pend;
_EOF_

这很奇怪,因为之前它抛出了 "data type is not VB" 这样的错误。但现在它在更改 RECFM 和 LREL 后接受了数据类型=VB。