如何通过 NDM 将具有可变块(每个记录具有可变长度)的二进制(ebcdic 格式)文件从 unix 系统发送到 uni



这是我的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=$1
DEST_FILE=`basename $1`
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 大型机端什么也做不了。如何更改脚本以将文件作为可变长度记录发送?

PS :我已经通读了与此主题相关的所有线程。在过去的 100 个月里,我尝试了近 3 次更改。没有什么对我有用。

您是否尝试过以下方法:

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

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

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

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

在将 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%

奇怪。我已经尝试了很多 SYSOPTS=":D ATATYPE=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=$1
DEST_FILE=`basename $1`
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_

这很奇怪,因为以前它抛出了诸如"数据类型不是VB"之类的错误。但是现在它在更改RECFM和LREL后接受了datatype=VB。

相关内容

  • 没有找到相关文章

最新更新