如何使用可变块(每个记录具有可变长度)发送二进制(ebcdic格式)文件,从unix系统到unix大型机通过NDM?

时间:2017-01-10 10:39:04

标签: shell unix mainframe connect-direct

这是我的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)和第3条记录的836位置填入第一行,并将第三条记录的提醒放入第二行,依此类推。 所以,我在unix大型机上的位置不匹配。 我只能在unix方面改变。但是在客户端的unix主机端无法做任何事情。 如何更改脚本以将文件作为可变长度记录发送?

P.S:我已经阅读了与此主题相关的所有主题。在过去的3个月里,我已经尝试了近100次的变化。没有什么对我有用。

3 个答案:

答案 0 :(得分:1)

您是否尝试过以下操作:

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

答案 1 :(得分:0)

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

您的VB记录格式实际上是正常工作的,这就是为什么它填满了不同的行。

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

我们认为这是我们的商店,将BIN修复和PTFS上传到z / OS数据集文件结构。如果我们采取默认设置,它就变得一团糟,不可读。

我们必须使用以下内容进行FTP:

<math.h>

答案 2 :(得分:0)

奇怪..我已经尝试了很多 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=$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后接受了数据类型= VB。