Как отправить двоичный файл (в формате ebcdic) с переменными блоками (каждая запись имеет переменную длину) из системы unix в мейнфрейм unix через 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=$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. Но ничего не может сделать на стороне мэйнфрейма клиента. Как я могу изменить свой скрипт для отправки файла в виде записей переменной длины?

PS: я прочитал все темы, связанные с этой темой. Я перепробовал почти 100 изменений за последние 3 месяца. Ничто действительно не работает для меня.

3 ответа

Решение

Странно.. Я много пробовал с 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". Но теперь он принял тип данных =VB после изменения RECFM и LREL.

Вы пробовали следующее:

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

Вы должны использовать FB и установить размер блока.

Ваш формат записи VB на самом деле работает правильно, и поэтому он заполняет различные строки.

Как упоминалось ранее в @BillWoodger, вы отправляете его в структуру набора данных z/OS, когда указываете блок, recfm, циклиндеры, а не файловую структуру Unix z/OS, которая работает на мэйнфрейме (USS - Unix System Services), например 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%
Другие вопросы по тегам