2017-01-10 1 views
0

이 내 NDM 스크립트입니다 :NDM을 통해 유닉스 시스템에서 유닉스 메인 프레임으로 가변 블록 (각 레코드는 가변 길이)을 가진 바이너리 (ebcdic 포맷) 파일을 보내는 방법은 무엇입니까?


#!/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_ 

, 최대 레코드 길이가 나는 것을 나타 내기 위해 VB로 RECFM을 지정한 1000이기 때문에 내가 여기에 1004로 LRECL을 준

변수 블록 레코드입니다. 하지만 유닉스 메인 프레임에서 여전히 파일은 고정 길이 1000으로 수신됩니다. 첫 번째 3 개 레코드의 길이는 132, 32, 1000입니다. 첫 번째 레코드는 첫 번째 2 개 레코드 (164)로 세 번째 레코드는 836 번째 위치로 채 웁니다 첫 번째 줄과 두 번째 줄에 세 번째 레코드의 미리 알림을 넣어. 그래서 유닉스 메인 프레임에서 위치가 일치하지 않습니다. 유닉스에서만 변경할 수 있습니다. 하지만 클라이언트의 유닉스 메인 프레임에서는 아무 것도 할 수 없습니다. 파일을 가변 길이 레코드로 보내도록 스크립트를 어떻게 변경합니까?

P.S :이 주제와 관련된 모든 스레드를 읽었습니다. 지난 3 개월 동안 거의 100 가지의 변화를 시도했습니다. 아무것도 나를 위해 정말 작동합니다.

+0

레코드 길이 (LRECL)를 1000으로 설정하고 블록 크기를 1004로 설정해 보았습니까? – SaggingRufus

+0

또한 제공된 샘플에서 LRECL은 726입니다. – SaggingRufus

+2

메인 프레임의 기술 담당자와상의 한 적이 있으십니까? "유닉스 메인 프레임"이란 정확히 무엇을 의미합니까? USS? z/Linux? LinuxONE? z/OS는 레코드와 블록을 알고 있으며 Unix-and-the-Linux는 그렇지 않습니다. –

답변

0

이상한 .. 내가 SYSOPTS로 많이 해봤 = "

우리는 다음과 같은 무언가를 사용하여 FTP해야합니다 : DATATYPE = VB : ",하지만 아무것도 작동하지 않습니다. 그런 다음 VBM 대신 IBM에서 지정한대로 RECFM을 VB로, LRECL을 실제 최대 레코드 길이 인 726 대신 1004 (내 보고서의 기본값)로 사용해 보았습니다. 이전에이 같은 발생 오류 "데이터 형식 VB 아니다"때문에

#!/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_ 

그것은 이상하다 :

여기 내 NDM 스크립트입니다. 그러나 이제는 RECFM과 LREL을 변경 한 후 데이터 유형 = VB를 승인했습니다.

0

FB를 사용하고 블록 크기를 설정해야합니다.

VB 레코드 형식이 실제로 올바르게 작동하므로 다른 행이 채워집니다.

@BillWoodger는 block, recfm, cyclinders를 메인 프레임 (USS - Unix System Services)에서 실행중인 z/OS Unix 파일 구조가 아닌 z/OS 데이터 세트 구조로 보내고 있음을 암시하기 때문에 HFS 또는 zFS로

BIN 픽스와 PTFS를 z/OS 데이터 세트 파일 구조에 업로드 할 때 우리가 경험할 수있는 것은이 가게입니다. 기본값을 취하면 읽을 수없는 엉망이됩니다.

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% 
+0

아니요, FB를 사용할 수 없습니다. 필자의 이전 구현은 고정 길이 레코드로 공백을 알리는 공백을 채 웁니다. 그러나 클라이언트의 기대는 VB가되어야한다는 것입니다. –

+0

data_type = VB를 사용하여 VB가 NDM을 통해 전송 될 수 있다고 들었습니다. 하지만 VB로 데이터 형식을 사용하여 보내려고하면 데이터 형식이 NDM 로그의 VB가 아닌 것처럼 오류가 발생합니다. –

+0

다음을보십시오 : http://www-01.ibm.com/support/docview.wss?uid=swg21520272 – paulywill

1

는 다음과 같은 시도 유무 : :

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

예, DATATYPE = VB 옵션을 보았습니다. 나는 IBM 사이트에 지정된대로 "DATATYPE = VB"및 "RECFM = VBM"으로 시도했다. 그러나 NDM 로그에 데이터 유형이 VB가 아님을 나타내는 리턴 코드 8을 발생시킵니다. –