I tried with One byte in F2 record its not working same abend
Yes it will have up to 5000 records and Both file is VB of Lrecl 3313
UNSUCCESSFUL SORT 0C4 S
SYSTEM COMPLETION CODE=0C4 REASON CODE=00000004
TIME=08.33.59 SEQ=33663 CPU=0000 ASID=01A8
PSW AT TIME OF ERROR 078D0000 00144DEE ILC 6 INTC 04
NO ACTIVE MODULE FOUND
NAME=UNKNOWN
But if i try with 10 records in each file , Its going through well
Joined: 09 Mar 2011 Posts: 7309 Location: Inside the Matrix
Can you show the output messages: from the small one which works, and from the large one of somehow indeterminate size?
Can you show your current sort cards, and describe as fully as possible what you are trying to achieve?
You say your input is VB? Do you have different-sized records? Assuming yes, can you confirm minimum length and whether all are to be processed the same?
Better show us the JCL as well.
Can you look back through any previous questions, and provide replies for those as well, please?
JOINKEYS REFORMAT RECORD LENGTH= 6626, TYPE = F
NOMATCH1 : RECFM=VB ; LRECL= 3313; BLKSIZE= 27998
MATCHES : RECFM=VB ; LRECL= 3313; BLKSIZE= 27998
5,148K BYTES OF VIRTUAL STORAGE AVAILABLE ABOVE THE 16MEG LINE,
0 BYTES RESERVE REQUESTED, 100K BYTES USED
NOMATCH1 : DATA RECORDS OUT 9; TOTAL RECORDS OUT 9
MATCHES : DATA RECORDS OUT 1; TOTAL RECORDS OUT 1
SYNCSMF CALLED BY SYNCSORT; RC=0000
SYNCSORT GLOBAL DSM SUBSYSTEM ACTIVE
OUTFIL WAS USED FOR SORTOUT
RCD IN 10, OUT 10
And if i use my original file which is having 20k records
Code:
0 BYTES RESERVE REQUESTED, 1,102,192 BYTES USED
20K BYTES OF EMERGENCY SPACE ALLOCATED
JOINKEYS REFORMAT RECORD LENGTH= 6626, TYPE = F
NOMATCH1 : RECFM=VB ; LRECL= 3313; BLKSIZE= 27998
MATCHES : RECFM=VB ; LRECL= 3313; BLKSIZE= 27998
13,000K BYTES OF VIRTUAL STORAGE AVAILABLE ABOVE THE 16MEG LINE,
0 BYTES RESERVE REQUESTED, 100K BYTES USED
SYNCSMF CALLED BY SYNCSORT; RC=0000
SYNCSORT GLOBAL DSM SUBSYSTEM ACTIVE
Job fails with user abend U0016
Jesmsg shows
Code:
+WER999A BPV380SM,SRTMAT , - UNSUCCESSFUL SORT 0C4 S
IEA995I SYMPTOM DUMP OUTPUT 313
SYSTEM COMPLETION CODE=0C4 REASON CODE=00000004
TIME=08.33.59 SEQ=33663 CPU=0000 ASID=01A8
PSW AT TIME OF ERROR 078D0000 00144DEE ILC 6 INTC 04
NO ACTIVE MODULE FOUND
NAME=UNKNOWN
Infile Record details
All the records will have minimum of 1600 byte
Eg layout with Hex format
Code:
5 9 120411 r
F00000F44444440000FFFFFF000000009000000000004444444444444444444444444444
50000C90000000000C12041100C00C049C000C000C0C0000000000000000000000000000
Joined: 09 Mar 2011 Posts: 7309 Location: Inside the Matrix
OK, let's pretend all your records are 1604 and you run through the JCL and sort cards you have. You'll get two-and-a-bit records are a time in each part of your REFORMAT statement. At some point, one of the 1604 records will be at the end of a block which is followed by storage you are not able to access, and S0C4.
Same thing if you have a mix of records. At some point a 1604 is going to be last or 2nd-to-last in the block.
Your REFORMAT and other cards need to deal with variable-length records. Consult your documentation/look for examples of join with variabl-length records and REFORMAT. I don't have Syncsort documentation, so can't assist directly,
I was trying with same sort card for having Variable Length file of lrcl 504 Its working fine , Really i am nt getting any clue why its not working for Lrecl 3313
Bill You are trying to say its becasue of Storage issue
Joined: 09 Mar 2011 Posts: 7309 Location: Inside the Matrix
No. I'm saying that when you have a record which is shorter than your maximum, with your existing sort cards you are attempting to get datat from beyond the end of the record. When that "falls off" the record buffer, you get the S0C4 if it is into storage you are not allowed to access.
If you have a 1604 record, you must only access 1604 bytes. Same for any other records you have that are not maximum length.
Your REFORMAT would be fine for fixed-length records. You need to write one for variable-length records.
On the REFORMAT, first take the RDW from F1. Then, so we know where to find it, take the RDW from F2. For an unmatched F1, there will be no F2 and the first two bytes of the F2 RDW will be X'0000'. This we use as your "not matched" indicator. Next, put the entire variable-length record from F1, by specifying 5 as a start position but not specifying a length. The length used will be the length of the current record, less the first four bytes of the RDW.
You now have a variable-length reformat record.
You have a new test for matched or not, on the record-length in the RDW from F2.
In the OUTRECs it copies the RDW from the reformat record (the 1,4) and then ignores the RDW from F2 and gets all the data from position 9 to end-of-record. The actual record-length of your output record will be adjusted to reflect the amount of data present in the OUTREC record, but it must start from the original RDW, in this case of the reformat record.
I don't have Syncsort, so can't test, but this might give you a push in the right type of direction. In DFSORT I'd do it differently, because there is an indicator available to show the state of the match which can be included on the reformat record.
It is a good example for the use of SYMNAMES.
Code:
//SYMNAMES DD *
* Data layout for F1 record
F1-RDW,1,4,CH
F1-REST-OF-RECORD,*
F1-KEY,5,1000,CH
* Data layout for F1 record
F2-RDW,1,4,CH
F2-KEY,5,1000,CH
* Data layout for reformat record
REFORMAT-RECORD-RDW,1,4,CH
* Fixed portion of reformat record
REFORMAT-F2-RDW,*,4,CH
REFORMAT-F2-RECORD-LENGTH,=,2,C
REFORMAT-F2-IOCS,*,2,CH
* Variable portion of reformat record
REFORMAT-F1-REST,*
* Constants
NO-F2-ZERO-LENGTH,X'0000'
//SORTIN DD *
when posting JCL snippets and screen text it would be nice to use the code tags
they keep things aligned and make understanding easier for the people trying to help
( Your previous post has been code tagged )
Joined: 09 Mar 2011 Posts: 7309 Location: Inside the Matrix
It is not so helpful to cut off the messages. Although I can't necessarily look them up, I can't see the "A" suffix message.
Let's guess that it is "NOMATCH1 OUTREC - SHORT RECORD".
OK, hint that it is on OUTREC for NOMACTCH1
Code:
OUTREC=(1,4,9,3309)
Compare to mine:
Code:
OUTREC=(1,4,9)
Yours copies from 9 for a length of 3309.
Mine copies from 9 for a length of record-length of reformat record minus eight.
Guess which will give a "short record" message when a 1604-length record comes along?
I notice you also changed CH to BI on the INCLUDE. If you want to do that, you can test against 0, you'd not need to test for X'0000'. If you want to test for X'0000' no need for it to be BI. Causes confusion to the reader to mix, in my opinion.
If you tried mine and they didn't work, say so. It is certainly possible. Otherwise, why did you change them without trying them?
Sort card is working for 10 records , But if use my entire file its giving ABENDU0016
Code:
+WER999A BPV380SM,SRTMAT , - UNSUCCESSFUL SORT 0C4 S
IEA995I SYMPTOM DUMP OUTPUT 903
SYSTEM COMPLETION CODE=0C4 REASON CODE=00000004
TIME=10.48.48 SEQ=20731 CPU=0000 ASID=00E2
PSW AT TIME OF ERROR 078D0000 00116DEE ILC 6 INTC 04
NO ACTIVE MODULE FOUND
NAME=UNKNOWN
I tried with More Sort workspace it didnt works
My thinking is it may be due it cannot expand the Block size
JOINKEYS REFORMAT RECORD LENGTH= 3317, TYPE = V
NOMATCH1 : RECFM=VB ; LRECL= 3313; BLKSIZE= 27998
MATCHES : RECFM=VB ; LRECL= 3313; BLKSIZE= 27998
13,128K BYTES OF VIRTUAL STORAGE AVAILABLE ABOVE THE 16MEG LINE,
0 BYTES RESERVE REQUESTED, 100K BYTES USED
SYNCSMF CALLED BY SYNCSORT; RC=0000
SYNCSORT GLOBAL DSM SUBSYSTEM ACTIVE
the topic is getting out of hand... ( 40 posts, it looks like one of the longer topic around )
most probably will be locked shortly and delete after a while ...
no reason to clutter the forum with such a useless back and forth of useless info
Joined: 09 Mar 2011 Posts: 7309 Location: Inside the Matrix
Are you sure you don't have records of less than 1008 bytes? I don't know what that would do (maybe just an A message from Syncsort), so it is a stab. A joinkeys uses more storage than a norrmal sort, because each of the joinkeys is a sub-task to the main task. You've been coy about your EXEC card, but do you have a REGION=0M around anywhere?
Triple-check everything. If still nothing, take it to your support. If they get nowhere. take it to Syncsort.