Portal | Manuals | References | Downloads | Info | Programs | JCLs | Mainframe wiki | Quick Ref
IBM Mainframe Computers Forums Index
 
Register
 
IBM Mainframe Computers Forums Index Mainframe: Search IBM Mainframe Forum: FAQ Memberlist Profile Log in to check your private messages Log in
 
How to find the limit of GDGs

 
Post new topic   Reply to topic    IBMMAINFRAMES.com Support Forums -> JCL & VSAM
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    Post subject: How to find the limit of GDGs
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: 8685
Location: Back in jolly old England

PostPosted: Fri Jan 25, 2008 5:10 pm    Post subject:
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

Active Member


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

PostPosted: Fri Jan 25, 2008 7:09 pm    Post subject:
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    Post subject: Reply to: How to find the limit of GDGs
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

Active Member


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

PostPosted: Wed Jan 30, 2008 9:06 pm    Post subject:
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    Post subject: Reply to: How to find the limit of GDGs
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: 8339
Location: Dubuque, Iowa, USA

PostPosted: Sat Jun 02, 2018 4:17 am    Post subject: Reply to: How to find the limit of GDGs
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: 640
Location: The Universe

PostPosted: Sat Jun 02, 2018 5:37 am    Post subject:
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    IBMMAINFRAMES.com Support Forums -> JCL & VSAM All times are GMT + 6 Hours
Page 1 of 1

 

Search our Forum:

Similar Topics
Topic Author Forum Replies Posted
This topic is locked: you cannot edit posts or make replies. Rexx code to find greater then symobl... Bharath Vikraman CLIST & REXX 8 Tue May 29, 2018 9:40 am
No new posts Limit in Length for a CICS START seahawk789 CICS 6 Mon Apr 02, 2018 8:34 pm
No new posts Find & Replace string in CA-SORT mrgnndhmk CA Products 1 Fri Mar 30, 2018 12:58 am
No new posts Find a string in PS file opened in br... mukkas CLIST & REXX 3 Sat Feb 24, 2018 2:15 pm
No new posts Split files upto certain limit based ... bubbu75 DFSORT/ICETOOL 5 Tue Nov 14, 2017 11:11 pm

Facebook
Back to Top
 
Job Vacancies | Forum Rules | Bookmarks | Subscriptions | FAQ | Polls | Contact Us