View previous topic :: View next topic
|
Author |
Message |
kishpra
New User
Joined: 24 May 2010 Posts: 92 Location: Pune
|
|
|
|
Hi All,
While running my cobol program, I am getting a below error:
CEE0813S Insufficient storage was available to satisfy a get storage (CEECZST) request. The traceback information could not be determined.
My program has the below OCCURS DEPENDING ON Clause:
Code: |
01 XS-RESULTS-TABLE.
03 XS-TABLE-ROW OCCURS 1 TO,150000,
DEPENDING ON XS-TOTAL-NO-ROWS.
05 XS-CCQREF PIC X(3).
05 XS-DUPT-CD PIC X(4).
05 XS-UID PIC X(8).
05 XS-LASTNO.
07 XS-LASTNO-TYPE PIC X(1).
07 XS-LASTNO-NBR PIC 9(8).
05 XS-TYPE PIC 9(4).
05 XS-DESC PIC X(30).
05 XS-ITT-CR PIC X(1).
05 XS-VALUE PIC S9(12)V99.
05 XS-AMT PIC S9(12)V99.
|
Please advise. It is getting compiled properly.
Code'd |
|
Back to top |
|
|
RahulG31
Active User
Joined: 20 Dec 2014 Posts: 446 Location: USA
|
|
Back to top |
|
|
kishpra
New User
Joined: 24 May 2010 Posts: 92 Location: Pune
|
|
|
|
I have used the REGION para with 0M and 256M, still getting the same error. |
|
Back to top |
|
|
Robert Sample
Global Moderator
Joined: 06 Jun 2008 Posts: 8696 Location: Dubuque, Iowa, USA
|
|
|
|
Talk to your site support group. Depending upon the site options chosen at IPL time, your specifying a region size may have NO impact at all. Only someone working AT YOUR SITE can tell you this. |
|
Back to top |
|
|
Rohit Umarjikar
Global Moderator
Joined: 21 Sep 2010 Posts: 3048 Location: NYC,USA
|
|
Back to top |
|
|
kishpra
New User
Joined: 24 May 2010 Posts: 92 Location: Pune
|
|
|
|
The code is
03 XS-TABLE-ROW OCCURS 1 TO 150000
And the size of the array is 13 MB which is below 16MB |
|
Back to top |
|
|
Garry Carroll
Senior Member
Joined: 08 May 2006 Posts: 1193 Location: Dublin, Ireland
|
|
|
|
Quote: |
And the size of the array is 13 MB which is below 16MB |
... and what about the size of the program, the size of any buffers for datasets &c &c... It all adds up, you know.
Garry. |
|
Back to top |
|
|
kishpra
New User
Joined: 24 May 2010 Posts: 92 Location: Pune
|
|
|
|
Yes all that if added should be more than 16 MB. Now my query is how can I run my program so that it runs above 16 MB and utilise the maximum storage available.
Thank you. |
|
Back to top |
|
|
Rohit Umarjikar
Global Moderator
Joined: 21 Sep 2010 Posts: 3048 Location: NYC,USA
|
|
|
|
Why do you need 150K records btw?
Quote: |
Yes all that if added should be more than 16 MB. Now my query is how can I run my program so that it runs above 16 MB and utilise the maximum storage available. |
Look for AMODE,RMODE |
|
Back to top |
|
|
Garry Carroll
Senior Member
Joined: 08 May 2006 Posts: 1193 Location: Dublin, Ireland
|
|
|
|
Quote: |
Yes all that if added should be more than 16 MB. Now my query is how can I run my program so that it runs above 16 MB and utilise the maximum storage available.
|
Check the AMODE/RMODE of your program. If it's AMODE(31) it is capable of addressing up to 2GB. If it's RMODE(ANY) it can be loaded to run 'above the line'.
Garry. |
|
Back to top |
|
|
kishpra
New User
Joined: 24 May 2010 Posts: 92 Location: Pune
|
|
|
|
My program's compile listing as below:
PROCESSING OPTIONS:
ALIASES NO
ALIGN2 NO
AMODE UNSPECIFIED
SAVE MODULE ATTRIBUTES:
AC 000
AMODE 31
COMPRESSION NONE
DC NO
EDITABLE YES
EXCEEDS 16MB NO
Please let me know how to make sure it is using AMODE 31 to run above 16 MB line |
|
Back to top |
|
|
Bill O'Boyle
CICS Moderator
Joined: 14 Jan 2008 Posts: 2501 Location: Atlanta, Georgia, USA
|
|
|
|
The CEECZST Callable Service routine performs acquiring additional storage for an already existing piece of storage that was acquired by the Callable Service routine CEEGTST.
Think of CEECZST as the change size (CZ) storage service and CEEGTST as the get storage (GT) storage service.
Have you tried CEEGTST first to see if you can acquire the storage?
If this is an OCCURS DEPENDING ON in LINKAGE (and it should be), obtain the value of XS-TOTAL-NO-ROWS beforehand, so you can calculate the proper GETMAIN size, which (most likely) doesn't have to be the maximum-occurs as it appears this is the reason for the ODO definition.
HTH.... |
|
Back to top |
|
|
Rohit Umarjikar
Global Moderator
Joined: 21 Sep 2010 Posts: 3048 Location: NYC,USA
|
|
|
|
Quote: |
Please let me know how to make sure it is using AMODE 31 to run above 16 MB line |
Talk to your support staff for whatever version control is in use they should tell you the set up.
You still did not answer, why do you need 150k records in an array? |
|
Back to top |
|
|
kishpra
New User
Joined: 24 May 2010 Posts: 92 Location: Pune
|
|
|
|
My support staff says that you are exceeding the maximum allowable limits. The records are extracted from the table using a CURSOR and then moved into an array. Any other solution to overcome this?
Thank you. |
|
Back to top |
|
|
RahulG31
Active User
Joined: 20 Dec 2014 Posts: 446 Location: USA
|
|
|
|
Quote: |
The records are extracted from the table using a CURSOR and then moved into an array. Any other solution to overcome this? |
It depends on what you are trying to do after moving them into the Array.
What is the need to move all the rows into the array?
And please read what Bill had said:
Quote: |
If this is an OCCURS DEPENDING ON in LINKAGE (and it should be), obtain the value of XS-TOTAL-NO-ROWS beforehand, so you can calculate the proper GETMAIN size, which (most likely) doesn't have to be the maximum-occurs as it appears this is the reason for the ODO definition.
|
Remember it has to be in a Linkage Section
. |
|
Back to top |
|
|
RahulG31
Active User
Joined: 20 Dec 2014 Posts: 446 Location: USA
|
|
|
|
Just to clarify when I say it 'has' to be in a Linkage Section, I mean, If you want to use ODO. There won't be any compilation issues if it is present in Working Storage Section but then, in that case, it will use the maximum storage.
If you put it in Linkage Section, it won't occupy memory space. Dynamic memory will be allocated using CEEGTST and memory can be resized using CEECZST and ultimately be freed using CEEFRST.
. |
|
Back to top |
|
|
Rohit Umarjikar
Global Moderator
Joined: 21 Sep 2010 Posts: 3048 Location: NYC,USA
|
|
|
|
Quote: |
The records are extracted from the table using a CURSOR and then moved into an array. Any other solution to overcome this? |
1. Why would you like to extract 150K in a program?
2. If at all you need it then please use a utility to unload them first in a file and then supply that file to the program( instead of cursor) and then move further ( one at a time sequentially)
3.It is a bad design at first place to have a 150k of rows fetched from the a cursor.
4. Last one if you tell us the reason why you want to populate 150k (possibly) in one shot instead of processing each row one by one? |
|
Back to top |
|
|
Bill Woodger
Moderator Emeritus
Joined: 09 Mar 2011 Posts: 7309 Location: Inside the Matrix
|
|
|
|
What compiler are you using? Compile options? Where is this data-definition?
Why do you think the problem is there? |
|
Back to top |
|
|
don.leahy
Active Member
Joined: 06 Jul 2010 Posts: 765 Location: Whitby, ON, Canada
|
|
|
|
Did you check the obvious? i.e. what Region size is your job using?
Code: |
CEE0813S Insufficient storage was available to satisfy a get storage
(CEECZST) request.
Explanation: There was not enough free storage available to satisfy a get
storage call to CEEGTST or reallocate request call to CEECZST.
Programmer Response: Ensure that the REGION size is sufficient to run the
application. Ensure that the size parameter in the get storage request is
not an unusually large number. Verify that the storage sizes specified in
the HEAP and STACK run-time options are reasonable, given the region size
allocated to the application. Verify that you are using storage options
that get your storage from above the line, if you can, since you can run
out of storage below the line much more easily.
System Action: No storage is allocated. The value of the address
parameter is undefined.
Symbolic feedback code: CEE0PD
|
|
|
Back to top |
|
|
|