IBM Mainframe Forum Index
 
Log In
 
IBM Mainframe Forum Index Mainframe: Search IBM Mainframe Forum: FAQ Register
 

SYNCTOOL-JCL getting ABEND=U0016


IBM Mainframe Forums -> JCL & VSAM
Post new topic   Reply to topic
View previous topic :: View next topic  
Author Message
sai mainframes

New User


Joined: 02 Nov 2007
Posts: 8
Location: hyderabad

PostPosted: Mon Dec 03, 2007 4:26 pm
Reply with quote

hi,

please observe the code below.....

Code:

//STEP1 EXEC PGM=SYNCTOOL
//TOOLMSG DD SYSOUT=*                                               
//DFSMSG  DD SYSOUT=*                                               
//INPUT1  DD DSN=DGCVPW1.CMS2.V823.KANBAY.TEMP2,DISP=SHR             
//INPUT2  DD DSN=DGCVPW1.CMS2.V823.KANBAY.TEMP3,DISP=SHR             
//TMP1    DD DSN=&&TEMP1,DISP=(MOD,PASS),SPACE=(TRK,(5,5)),         
//           UNIT=SYSDA,DCB=(RECFM=VB,LRECL=16104,BLKSIZE=27998)     
//OUT1    DD DSN=DGCVPW1.CMS2.V823.KANBAY.TEMP1,DISP=SHR             
//TOOLIN  DD *                                                       
  COPY FROM(INPUT1) TO(TMP1) USING(CTL1)                             
  COPY FROM(INPUT2) TO(TMP1) USING(CTL2)                             
  SPLICE FROM(TMP1) TO(OUT1) ON(21,8,PD) WITHEACH -                 
         WITH(11,10) USING(CTL3)                                     
/*                                                                   
//CTL1CNTL DD *                                                     
  OUTREC FIELDS=(1,10,21:SEQNUM,8,PD)                               
/*                                                                   
//CTL2CNTL DD *                                                     
  OUTREC FIELDS=(11:1,10,21:SEQNUM,8,PD)                             
/*                               
//CTL3CNTL DD *                   
  OUTFIL FNAMES=OUT1,OUTREC=(1,20)
/*                               


but i am getting abend at cntl2

the abend message am getting is:

CALLER-PROVIDED IDENTIFIER IS "0002"
SYSDIAG= 6344, 85455, 85455, 285577
8,964K BYTES OF VIRTUAL STORAGE AVAILABLE, MAX REQUESTED,
0 BYTES RESERVE REQUESTED, 3M BYTES USED
INPUT2 : RECFM=VB ; LRECL= 16104; BLKSIZE= 27998
OUTREC RDW NOT INCLUDED
SYNCSORT GLOBAL DSM SUBSYSTEM ACTIVE


J.Saikrishna Yadav
Back to top
View user's profile Send private message
Anuj Dhawan

Superior Member


Joined: 22 Apr 2006
Posts: 6250
Location: Mumbai, India

PostPosted: Mon Dec 03, 2007 5:23 pm
Reply with quote

Hi,

You are using VB file as input, so you need to add RDW(Record Descriptor Word : Data preceding a variable record that specifies the length of the entire record including the RDW.) in outputs. It takes 4-bytes.So add 4-bytes to all the contorl cards. e.g. this
Code:
//CTL2CNTL DD *
OUTREC FIELDS=(11:1,10,21:SEQNUM,8,PD)
/*

can be changed to
Code:
//CTL2CNTL DD *
OUTREC FIELDS=(15:1,10,25:SEQNUM,12,PD)
/*


Give a try.


P.S.: One suggestion Sai, instead of increasing font size you could use "code" tag to post your JCL.
Back to top
View user's profile Send private message
shankar.v

Active User


Joined: 25 Jun 2007
Posts: 196
Location: Bangalore

PostPosted: Mon Dec 03, 2007 6:03 pm
Reply with quote

sai mainframes,

As Anuj D. said, the first four bytes for variable file record will contains the RDW and the record contents starts from column (or position or byte) 5.

In OUTREC, RDW should be include for variable file in first four bytes i.e., OUTREC=(1,4,.....).

Change the sort cards as follows and check it.
Code:
//TOOLIN  DD *                                                       
  COPY FROM(INPUT1) TO(TMP1) USING(CTL1)                             
  COPY FROM(INPUT2) TO(TMP1) USING(CTL2)                             
  SPLICE FROM(TMP1) TO(OUT1) ON(25,8,PD) WITHEACH -                 
         WITH(15,10) USING(CTL3)                                     
/*                                                                   
//CTL1CNTL DD *                                                     
  OUTREC FIELDS=(1,4,5,10,25:SEQNUM,8,PD)                               
/*                                                                   
//CTL2CNTL DD *                                                     
  OUTREC FIELDS=(1,4,15:5,10,25:SEQNUM,8,PD)                             
/*                               
//CTL3CNTL DD *                   
  OUTFIL FNAMES=OUT1,OUTREC=(1,4,5,20)
/*                   


Anuj D.
Quote:
Hi,

You are using VB file as input, so you need to add RDW(Record Descriptor Word : Data preceding a variable record that specifies the length of the entire record including the RDW.) in outputs. It takes 4-bytes.So add 4-bytes to all the contorl cards. e.g. this
Code:
//CTL2CNTL DD *
OUTREC FIELDS=(11:1,10,21:SEQNUM,8,PD)
/*

can be changed to
Code:
//CTL2CNTL DD *
OUTREC FIELDS=(15:1,10,25:SEQNUM,12,PD)
/*


Give a try.

The code you changed also doesn't include RDW in OUTREC. In the first four bytes, there is nothing in OUTREC, but suppose to be RDW there. Please correct me if I am wrong.
Back to top
View user's profile Send private message
Anuj Dhawan

Superior Member


Joined: 22 Apr 2006
Posts: 6250
Location: Mumbai, India

PostPosted: Mon Dec 03, 2007 7:25 pm
Reply with quote

Hi Shankar,

I'd the following concept in my mind while replying..

Quote:
A record in a VB data set looks like this:
RDW Fixed data Variable data

The RDW (Record Descriptor Word) is a 4-byte binary field with the length of the record in the first two bytes. Fixed data consists of data bytes that are present in every record. Variable data consists of one or more data bytes that may or may not be present in every record, so different records can have different lengths up to the maximum logical record length (LRECL) for the data set. For VB data sets, the RDW is in positions 1-4, so the first data byte starts in position 5. So when you code your control fields for sorting or merging VB data sets, remember to add 4 to the starting position to account for the 4-byte RDW. For example, the following SORT statement specifies a CH control field in the third through fifth data bytes of a VB record:
Code:
SORT FIELDS=(7,3,CH,A)

For OUTREC...I need to check it...but it'll take time..today my Mainframe session is not working..
Back to top
View user's profile Send private message
Aaru

Senior Member


Joined: 03 Jul 2007
Posts: 1287
Location: Chennai, India

PostPosted: Tue Dec 04, 2007 9:47 am
Reply with quote

shankar,

Quote:
The code you changed also doesn't include RDW in OUTREC. In the first four bytes, there is nothing in OUTREC, but suppose to be RDW there. Please correct me if I am wrong.


You are correct.
Back to top
View user's profile Send private message
sai mainframes

New User


Joined: 02 Nov 2007
Posts: 8
Location: hyderabad

PostPosted: Tue Dec 04, 2007 10:25 am
Reply with quote

hi Shankar,

thank you for your reply....
i tried your code.....it is abending at first cntl statement only....

code:

Code:
//STEP1 EXEC PGM=ICETOOL                                               
//TOOLMSG DD SYSOUT=*                                                   
//DFSMSG  DD SYSOUT=*                                                   
//INPUT1  DD DSN=DGCVPW1.CMS2.V823.KANBAY.TEMP2,DISP=SHR               
//INPUT2  DD DSN=DGCVPW1.CMS2.V823.KANBAY.TEMP3,DISP=SHR               
//TMP1    DD DSN=&&TEMP1,DISP=(MOD,PASS),SPACE=(TRK,(5,5)),             
//           UNIT=SYSDA,DCB=(RECFM=VB,LRECL=16104,BLKSIZE=27998)       
//OUT1    DD DSN=DGCVPW1.CMS2.V823.KANBAY.TEMP1,DISP=SHR               
//TOOLIN  DD *                                                         
  COPY FROM(INPUT1) TO(TMP1) USING(CTL1)                               
  COPY FROM(INPUT2) TO(TMP1) USING(CTL2)                               
  SPLICE FROM(TMP1) TO(OUT1) ON(25,8,PD) WITHEACH -                     
         WITH(15,10) USING(CTL3)                                       
/*                                                                     
//CTL1CNTL DD *                                                         
  OUTREC FIELDS=(1,4,5,10,25:SEQNUM,8,PD)                               
/*                                                                     
//CTL2CNTL DD *                                                         
  OUTREC FIELDS=(1,4,15:5,10,25:SEQNUM,8,PD)                           
/*                                     
//CTL3CNTL DD *                       
  OUTFIL FNAMES=OUT1,OUTREC=(1,4,5,20)
/*                                     



Output Message is Given below....

CALLER-PROVIDED IDENTIFIER IS "0001"
SYSDIAG= 10035, 91492, 91492, 290587
8,964K BYTES OF VIRTUAL STORAGE AVAILABLE, MAX REQUESTED,
0 BYTES RESERVE REQUESTED, 3,122,856 BYTES USED
INPUT1 : RECFM=VB ; LRECL= 16104; BLKSIZE= 27998
OUTREC RECORD LENGTH = 32
TMP1 : RECFM=VB ; LRECL= 16104; BLKSIZE= 27998
OUTPUT LRECL DIFFERS FROM SORTOUT LRECL
OUTREC - SHORT RECORD
SYNCSORT GLOBAL DSM SUBSYSTEM ACTIVE


will you please inform me that where i am doing wrong.....

Thanks in Advance [/code]
Back to top
View user's profile Send private message
Aaru

Senior Member


Joined: 03 Jul 2007
Posts: 1287
Location: Chennai, India

PostPosted: Tue Dec 04, 2007 11:12 am
Reply with quote

sai,

There are 2 issues with respect to your first control card.

Code:
OUTREC RECORD LENGTH = 32
TMP1 : RECFM=VB ; LRECL= 16104; BLKSIZE= 27998
OUTPUT LRECL DIFFERS FROM SORTOUT LRECL


The output RECL is different from SORTOUT. Use this to fix this.

Code:
//CTL1CNTL DD *                                         
  OUTREC FIELDS=(1,4,5,10,25:SEQNUM,8,PD,16104:X)       
/*                                                       


2nd issue is

Code:
OUTREC - SHORT RECORD


One gets ‘short record’ error only when the input file has some record whose length is shorter than the positions specified the Sort Card.Something like a file containing header, trailer & the data records. Header & Trailer are usually shorter than the other data records.

You can include a OMIT condition to eliminate such records(header & trailer) and sort the others.
Back to top
View user's profile Send private message
sai mainframes

New User


Joined: 02 Nov 2007
Posts: 8
Location: hyderabad

PostPosted: Tue Dec 04, 2007 11:16 am
Reply with quote

hi aaru,

thanks for your nice help...

just now i tried that only,

now it is working perfectly.....

thanks to you all......for your help...


Regards
J. Saikrishna Yadav
Back to top
View user's profile Send private message
Aaru

Senior Member


Joined: 03 Jul 2007
Posts: 1287
Location: Chennai, India

PostPosted: Tue Dec 04, 2007 11:21 am
Reply with quote

sai,

You are welcome icon_biggrin.gif

I created an input file with the same attributes (LRECL and block size)having 1 byte data. I modified your SORT card a bit and it worked fine.


Code:
//CTL1CNTL DD *                                       
  OUTREC FIELDS=(1,4,1,1,25:SEQNUM,8,PD,16104:X)       
/*                                                     


1,1 refers to the 1 byte data starting from position 1. You can change as per your requirements. Hope you have already changed it as you told its working.
Back to top
View user's profile Send private message
Anuj Dhawan

Superior Member


Joined: 22 Apr 2006
Posts: 6250
Location: Mumbai, India

PostPosted: Tue Dec 04, 2007 12:22 pm
Reply with quote

I should also be thankful to learn about OUTREC. (Alas..my work doesn't allow me to interact enough with SORT...that should be known to me)

Thanks Shankar & Aaru.
Back to top
View user's profile Send private message
shankar.v

Active User


Joined: 25 Jun 2007
Posts: 196
Location: Bangalore

PostPosted: Tue Dec 04, 2007 1:09 pm
Reply with quote

Aaru,
Quote:
The output RECL is different from SORTOUT. Use this to fix this.

Code:
//CTL1CNTL DD *
OUTREC FIELDS=(1,4,5,10,25:SEQNUM,8,PD,16104:X)
/*

What is the use of variable file here, as maximum record length of variable file is for all the output records?. The same mistake I did some days before and FRANK pointed out that.

When i did the run with the sai mainframes code, in my shop it's working fine. May be the default minimum record length for variable file is greater than length 32 in sai mainframes site.

The following is the message for SHORT RECORD.
Code:
WER244A [ddname] {INREC,OUTREC} SHORT RECORD
EXPLANATION: The ddname will be SORTOUT, SORTOFxx,
SORTOFx or the ddname provided by an OUTFIL FNAMES parameter.
A variable-length record was too short to contain all the fields specified
on the control statement. Program HISTOGRM may be used to determine
the length of the shortest record in the input file.
Back to top
View user's profile Send private message
Aaru

Senior Member


Joined: 03 Jul 2007
Posts: 1287
Location: Chennai, India

PostPosted: Tue Dec 04, 2007 1:38 pm
Reply with quote

shankar,

Quote:
What is the use of variable file here, as maximum record length of variable file is for all the output records?. The same mistake I did some days before and FRANK pointed out that.


oh ok. How can this SORT card be modified?
Back to top
View user's profile Send private message
shankar.v

Active User


Joined: 25 Jun 2007
Posts: 196
Location: Bangalore

PostPosted: Tue Dec 04, 2007 4:03 pm
Reply with quote

sai mainframes/Aaru,

The reason for OUTREC - SHORT RECORD is because of input records are shorter in length than the OUTREC record length specified. I did a run with some sample data for sai code which has input records are shorter in length than the OUTREC record length and i got the OUTREC -SHORT RECORD message with MAXCC=16.

Then i did a run with the same sample data I used before, which had thrown the OUTREC -SHORT RECORD and the code as Aaru suggested as follows:
Code:
//CTL1CNTL DD *                                         
  OUTREC FIELDS=(1,4,5,10,25:SEQNUM,8,PD,16104:X)       
/*

This time also i got the same OUTREC -SHORT RECORD message with MAXCC=16.

I think the below code will work fine with the proper use of variable file.
Please make sure to code LRECL=16122 for TMP1, otherwise don't code the DCB parameters, it will dynamically allocate the DCB parameters as required at runtime.
First, copy the second file to TMP1 which has the longer OUTREC length than the other one. The reason is that we can't make the shorter record length larger while doing SPLICE. In the below code SPLICE will happen with the first file records.
Code:
//STEP1 EXEC PGM=ICETOOL                                               
//TOOLMSG DD SYSOUT=*                                                   
//DFSMSG  DD SYSOUT=*                                                   
//INPUT1  DD DSN=DGCVPW1.CMS2.V823.KANBAY.TEMP2,DISP=SHR               
//INPUT2  DD DSN=DGCVPW1.CMS2.V823.KANBAY.TEMP3,DISP=SHR               
//TMP1    DD DSN=&&TEMP1,DISP=(MOD,PASS),SPACE=(TRK,(5,5)),             
//           UNIT=SYSDA,DCB=(RECFM=VB,LRECL=16122,BLKSIZE=27998)       
//OUT1    DD DSN=DGCVPW1.CMS2.V823.KANBAY.TEMP1,DISP=SHR               
//TOOLIN  DD *                                             
  COPY FROM(INPUT2) TO(TMP1) USING(CTL2)                   
  COPY FROM(INPUT1) TO(TMP1) USING(CTL1)                   
  SPLICE FROM(TMP1) TO(OUT1) ON(5,8,PD) WITHEACH -         
         WITH(13,10) USING(CTL3)                           
/*                                                         
//CTL1CNTL DD *                                           
  INREC FIELDS=(1,4,SEQNUM,8,PD,5)                         
/*                                                         
//CTL2CNTL DD *                                           
  INREC FIELDS=(1,4,SEQNUM,8,PD,23:5)                     
/*                                                         
//CTL3CNTL DD *                                           
  OUTFIL IFTHEN=(WHEN=INIT,BUILD=(1,4,13)),IFOUTLEN=16104 
/*                                                         
//

Please correct me if i am wrong.
Back to top
View user's profile Send private message
Aaru

Senior Member


Joined: 03 Jul 2007
Posts: 1287
Location: Chennai, India

PostPosted: Tue Dec 04, 2007 7:18 pm
Reply with quote

Shankar,

Quote:
Then i did a run with the same sample data I used before, which had thrown the OUTREC -SHORT RECORD and the code as Aaru suggested as follows:
Code:
//CTL1CNTL DD *
OUTREC FIELDS=(1,4,5,10,25:SEQNUM,8,PD,16104:X)
/*

This time also i got the same OUTREC -SHORT RECORD message with MAXCC=16.



Your SYNCSORT Version is different from the Version which OP is using. Sai and I are using the same version and that is why it dint abend. The working JCL which i had posted worked fine for OP and will not work for you as your version is different.
Back to top
View user's profile Send private message
shankar.v

Active User


Joined: 25 Jun 2007
Posts: 196
Location: Bangalore

PostPosted: Tue Dec 04, 2007 7:54 pm
Reply with quote

Aaru,

Let us assume a file with RECFM=VB, LRECL=16104 and BLKSIZE=27998 contains the records as follows.
Code:
A
B
C

Please run with the below set of codes and you will find both will give the same error message OUTREC - SHORT RECORD with MAXCC=16. This is because in OUTREC we specified 5,10 and in actual file only 5,1 is available.
Code:
//CTL1CNTL DD *                                       
  OUTREC FIELDS=(1,4,5,10,25:SEQNUM,8,PD)       
/*

Code:
//CTL1CNTL DD *                                       
  OUTREC FIELDS=(1,4,5,10,25:SEQNUM,8,PD,16104:X)       
/*
Back to top
View user's profile Send private message
Aaru

Senior Member


Joined: 03 Jul 2007
Posts: 1287
Location: Chennai, India

PostPosted: Wed Dec 05, 2007 1:42 pm
Reply with quote

Shankar,

Quote:
Please run with the below set of codes and you will find both will give the same error message OUTREC - SHORT RECORD with MAXCC=16. This is because in OUTREC we specified 5,10 and in actual file only 5,1 is available.


I ran the job and it abended.Yes, I totally agree with this. But this is what i said too icon_biggrin.gif . Please check my previous post and i would have changed the condition from 5,10 as per the requirement.

For testing purpose, i created a new file with one byte data and modifed the sort card of OP ( edited 5,10 to 1,1 (it shd have been 5,1)). It worked fine and only then i posted.

OP has also tested this using the new sort card after modifying 5,10. Hope there are no confusions now.
Back to top
View user's profile Send private message
View previous topic :: :: View next topic  
Post new topic   Reply to topic View Bookmarks
All times are GMT + 6 Hours
Forum Index -> JCL & VSAM

 


Similar Topics
Topic Forum Replies
No new posts ISAM and abend S03B JCL & VSAM 10
No new posts Synctool-dynamic split job for varyin... JCL & VSAM 7
No new posts Abend S0C4 11 (Page Translation Excep... PL/I & Assembler 16
No new posts WER999A - UNSUCCESSFUL SORT 8ED U Ab... SYNCSORT 5
No new posts the system or user abend SF0F R=NULL COBOL Programming 0
Search our Forums:

Back to Top