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

How to find the limit of GDGs


IBM Mainframe Forums -> JCL & VSAM
Post new topic   Reply to topic
View previous topic :: View next topic  
Author Message
Mr.Niceguy

New User


Joined: 16 Jun 2005
Posts: 63

PostPosted: Fri Jan 25, 2008 2:46 pm
Reply with quote

Hi all,

I have nearly 20,000 GDG bases. Is there any way to list out the limit of all those GDGs in single stretch or by batch instead of finding limits one by one or manually?
Back to top
View user's profile Send private message
expat

Global Moderator


Joined: 14 Mar 2007
Posts: 8797
Location: Welsh Wales

PostPosted: Fri Jan 25, 2008 5:10 pm
Reply with quote

Here's one I prepared earlier .................

You will need to cut & paste to a notepad on your PC to get the formatting right, and then transfer to the mainframe into a PDS, and there you go.

JCL
Code:

//STEP0020 EXEC PGM=IKJEFT01,PARM='CSIGDGS'     
//SYSEXEC  DD DSN=your REXX library,DISP=SHR
//SYSOUT   DD SYSOUT=*                         
//SYSTSPRT DD SYSOUT=*                         
//SYSTSIN  DD DUMMY                             
//CATIN    DD *                                 
HLQ1.**
HLQ2.**
HLQ3.**


And the REXX
Code:

/* REXX ** GDG ATTRIBUTES VIA BATCH REXX PROCESS                    */         
                                                                               
"EXECIO * DISKR CATIN ( STEM CAT. FINIS"                                       
DO KCNT = 1 TO CAT.0                                                           
KEY = SUBSTR(CAT.KCNT,1,44)                                                     
MODRSNRC = SUBSTR(' ',1,4)                                                     
CSIFILTK = SUBSTR(KEY,1,44)                                                     
CSICATNM = SUBSTR(' ',1,44)                                                     
CSIRESNM = SUBSTR(' ',1,44)                                                     
CSIDTYPS = 'B               '                                                   
CSICLDI  = SUBSTR('Y',1,1)                                                     
CSIRESUM = SUBSTR(' ',1,1)                                                     
CSIS1CAT = SUBSTR(' ',1,1)                                                     
CSIRESRV = SUBSTR(' ',1,1)                                                     
CSINUMEN = '0003'X                                                             
CSIFLD1  = 'VOLSER  '                                                           
CSIFLD2  = 'GDGLIMIT'                                                           
CSIFLD3  = 'GDGATTR '                                                           
CSIOPTS  = CSICLDI !! CSIRESUM !! CSIS1CAT !! CSIRESRV                         
CSIFIELD = CSIFILTK !! CSICATNM !! CSIRESNM !! CSIDTYPS !! CSIOPTS             
CSIFIELD = CSIFIELD !! CSINUMEN !! CSIFLD1 !! CSIFLD2 !! CSIFLD3               
WORKLEN = 65536                                                                 
DWORK = '00010000'X !! COPIES('00'X,WORKLEN-4)                                 
RESUME = 'Y'                                                                   
CATNAMET = SUBSTR(' ',1,44)                                                     
DNAMET = SUBSTR(' ',1,44)                                                       
DO WHILE RESUME = 'Y'                                                           
 ADDRESS LINKPGM 'IGGCSI00  MODRSNRC  CSIFIELD  DWORK'                         
 RESUME = SUBSTR(CSIFIELD,150,1)                                               
 USEDLEN = C2D(SUBSTR(DWORK,9,4))                                               
 POS1=15                                                                       
 DO WHILE POS1 < USEDLEN                                                       
   IF SUBSTR(DWORK,POS1+1,1) = '0'                                             
    THEN DO                                                                     
         CATNAME=SUBSTR(DWORK,POS1+2,44)                                       
         IF CATNAME ^= CATNAMET THEN                                           
          DO                                                                   
           CATNAMET = CATNAME                                                   
          END                                                                   
         POS1 = POS1 + 50                                                       
         END                                                                   
   DNAME = SUBSTR(DWORK,POS1+2,44)                                             
   IF SUBSTR(DWORK,POS1+1,1) = 'C' THEN DTYPE = 'CLUSTER '                     
    ELSE                                                                       
      IF SUBSTR(DWORK,POS1+1,1) = 'D' THEN DTYPE = 'DATA    '                   
     ELSE                                                                       
      IF SUBSTR(DWORK,POS1+1,1) = 'I' THEN DTYPE = 'INDEX   '                   
     ELSE                                                                       
      IF SUBSTR(DWORK,POS1+1,1) = 'A' THEN DTYPE = 'NONVSAM '                   
     ELSE                                                                       
      IF SUBSTR(DWORK,POS1+1,1) = 'H' THEN DTYPE = 'GDS     '                   
     ELSE                                                                       
      IF SUBSTR(DWORK,POS1+1,1) = 'B' THEN DTYPE = 'GDG     '                   
     ELSE                                                                       
      IF SUBSTR(DWORK,POS1+1,1) = 'R' THEN DTYPE = 'PATH    '                   
     ELSE                                                                       
      IF SUBSTR(DWORK,POS1+1,1) = 'G' THEN DTYPE = 'AIX     '                   
     ELSE                                                                       
      IF SUBSTR(DWORK,POS1+1,1) = 'X' THEN DTYPE = 'ALIAS   '                   
     ELSE                                                                       
      IF SUBSTR(DWORK,POS1+1,1) = 'U' THEN DTYPE = 'UCAT    '                   
     ELSE                                                                       
      DTYPE = '        '                                                       
    POS1 = POS1 + 46                                                           
    NUMVOL = C2D(SUBSTR(DWORK,POS1+4,2))/6                                     
    POS2 = POS1+10                                                             
    DO I = 1 TO NUMVOL                                                         
      POS2 = POS2 + 6                                                           
    END                                                                         
    POS2   = POS1 + C2D(SUBSTR(DWORK,POS1,2)) - 2                               
    GDGLIM = C2D(SUBSTR(DWORK,POS2,1))                                         
    POS2   = POS2 + 1                                                           
    GDGA   = X2B(C2X(SUBSTR(DWORK,POS2,1)))                                     
    GDGA1  = SUBSTR(GDGA,1,1)                                                   
    GDGA2  = SUBSTR(GDGA,2,1)                                                   
    GDAT1 = 'NOEMPTY'                                                           
    IF GDGA1  = '1' THEN DO                                                     
      GDAT1 = 'EMPTY'                                                           
    END                                                                         
    GDAT2 = 'SCRATCH'                                                           
    IF GDGA2  = '0' THEN DO                                                     
      GDAT2 = 'NOSCR'                                                           
    END                                                                         
    IF DNAMET ^= DNAME THEN DO                                                 
     IF DTYPE = 'GDG     ' THEN DO                                             
      SAY LEFT(DNAME,38) "LIMIT = " GDGLIM                                     
     END                                                                       
     DNAMET=DNAME                                                               
    END                                                                         
    POS1 = POS1 + C2D(SUBSTR(DWORK,POS1,2))                                     
  END                                                                           
END                                                                             
END                                                           
Back to top
View user's profile Send private message
Phrzby Phil

Senior Member


Joined: 31 Oct 2006
Posts: 1042
Location: Richmond, Virginia

PostPosted: Fri Jan 25, 2008 7:09 pm
Reply with quote

If the base names fit patterns, you can use the IDCAMS LISTCAT command wildcarded, then use SORT or any other program you wish to filter the lines you want:

LISTCAT GDG ENTRIES (HLQ.NODE2.NODE3.* ) ALL

You want these lines from each part of the report:

GDG BASE ------ HLQ.NODE2.NODE3.whatever
LIMIT-----------------10 SCRATCH NOEMPTY
Back to top
View user's profile Send private message
Prabha
Warnings : 2

New User


Joined: 05 Dec 2005
Posts: 79

PostPosted: Wed Jan 30, 2008 5:16 pm
Reply with quote

I tried like this

//STEP1 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
LISTCAT GDG ENTRIES(UKTEST.W.PRM6.Z18.G848.AU04.*) ALL
/*

But this is not showing limit of gdg..

The result i got is

******************************** Top of Data *********************
IDCAMS SYSTEM SERVICES

LISTCAT GDG ENTRIES(UKTEST.W.PRM6.Z18.G848.AU04.*) ALL
IDCAMS SYSTEM SERVICES
THE NUMBER OF ENTRIES PROCESSED WAS:
AIX -------------------0
ALIAS -----------------0
CLUSTER ---------------0
DATA ------------------0
GDG -------------------0
INDEX -----------------0
NONVSAM ---------------0
PAGESPACE -------------0
PATH ------------------0
SPACE -----------------0
USERCATALOG -----------0
TAPELIBRARY -----------0
TAPEVOLUME ------------0
TOTAL -----------------0
THE NUMBER OF PROTECTED ENTRIES SUPPRESSED WAS 0
IDC0001I FUNCTION COMPLETED, HIGHEST CONDITION CODE WAS 0

IDC0002I IDCAMS PROCESSING COMPLETE. MAXIMUM CONDITION CODE WAS 0
Back to top
View user's profile Send private message
Phrzby Phil

Senior Member


Joined: 31 Oct 2006
Posts: 1042
Location: Richmond, Virginia

PostPosted: Wed Jan 30, 2008 9:06 pm
Reply with quote

Please show me a 3.4 screen with the GDG base you have used.
Back to top
View user's profile Send private message
cbhavsar

New User


Joined: 31 May 2018
Posts: 1
Location: USA

PostPosted: Sat Jun 02, 2018 2:57 am
Reply with quote

expat,

Thank you for sharing rexx code for GDGs limit for IBM z/OS 2.2

(1) first I ran in to line 37 and 86 issue where for not equal
you had as ^= which replaced with <>
so code changed from from ^= to <>Error running CSIGDGS, line 37: Invalid character in program
Error running CSIGDGS, line 86: Invalid character in program
(2) There after my batch job ending good but no output?
I tried below two/three approaches but no O/P
am I missing anything here ??

//STEP0020 EXEC PGM=IKJEFT01,PARM='CSIGDGS'
//SYSEXEC DD DSN=SYS2.STORMGMT.REXX,DISP=SHR
//SYSOUT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD DUMMY
//CATIN DD *
#CBHA.**
/*

//STEP0020 EXEC PGM=IKJEFT01,PARM='CSIGDGS'
//SYSEXEC DD DSN=SYS2.STORMGMT.REXX,DISP=SHR
//SYSOUT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//CATIN DD DISP=MOD,DSN=PDM.MVSD.CATRPT
//SYSTSIN DD *
#CBHA.STOREDGE.HMIG@POL
/*

//STEP0020 EXEC PGM=IKJEFT01,PARM='CSIGDGS'
//SYSEXEC DD DSN=SYS2.STORMGMT.REXX,DISP=SHR
//SYSOUT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//CATIN DD DISP=MOD,DSN=PDM.MVSD.CATRPT
//SYSTSIN DD *
#CBHA.STOREDGE.HMIG@POL
/*
Back to top
View user's profile Send private message
Robert Sample

Global Moderator


Joined: 06 Jun 2008
Posts: 8696
Location: Dubuque, Iowa, USA

PostPosted: Sat Jun 02, 2018 4:17 am
Reply with quote

cbhavsar, did you notice the date of the posts you replied to?
Quote:
Thank you for sharing rexx code for GDGs limit for IBM z/OS 2.2
That code was written LONG, LONG, LONG before z/OS 2.2 was released -- the post is 10 years old, so it was most likely done on z/OS 1.10 or earlier.
Back to top
View user's profile Send private message
steve-myers

Active Member


Joined: 30 Nov 2013
Posts: 917
Location: The Universe

PostPosted: Sat Jun 02, 2018 5:37 am
Reply with quote

The real question here is what do you want to do with this information. 20,000 lines of GDG base names and their corresponding limit is just about useless. In your shoes I'd want to know, perhaps
  • Which GDGs are active (perhaps based on the LAST ALTER date)
  • Which GDGs have no data sets associated with them.
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 To find whether record count are true... DFSORT/ICETOOL 6
No new posts Find the size of a PS file before rea... COBOL Programming 13
No new posts Find the occurrence of Key Field (Par... DFSORT/ICETOOL 6
No new posts Find a record count/numeric is multip... COBOL Programming 1
No new posts Need to find a specific STRING COBOL Programming 11
Search our Forums:

Back to Top