Question & Answer
Question
When my VTOC or VTOCIX starts running out of space, how do I alter the size of it?
Cause
Running out of space in the VTOC or VTOCIX results in not being able to create new data sets on the volume.
Answer
If you see that your VTOC and/or VTOCIX does not have enough space (low number of DSCBs or VIRs available), then you can use ICKDSF to increase the size. When either the VTOC or VTOCIX is full, you might need to move things around on the volume to allow for the increased size of the VTOC/VTOCIX.
There are two methods to expand the VTOC:
EXTVTOC - expands the VTOC at its current location.
NEWVTOC - moves and expands the VTOC to a new location.
Here are some restrictions to be aware of.
- The VTOC must be one extent and must be within the first 64K tracks on the volume. That is, the VTOC must end before cylinder 4369 or x'1111', head 1.
- The Index data set has to be allocated within the first 65,520 cylinders on a volume and can not exceed 64K-1 tracks in size.
- The VTOC must be in contiguous space. To expand it in place the space immediately after it on the volume must be free, otherwise it will need to be moved to a new location on the volume. If the space after the VTOC is the VTOCIX, EXTVTOC can be used to expand the VTOC by omitting the EXTINDEX parameter. ICKDSF deletes and reallocates the VTOCIX during EXTVTOC processing.
- The VTOCIX must be in contiguous space.
Running DSS DEFRAG with TYPRUN=NORUN is an effective method for viewing the contents of the volume to determine what data sets reside after the VTOC. This method is also useful in determining whether or not the VVDS resides immediately after the VTOC. In the case where the VVDS exists immediately after VTOC, EXTVTOC cannot be used because the VVDS cannot be moved or reallocated. Thus NEWVTOC must be used to relocate the VTOC.
Sample JCL DEFRAG job:
//COPY EXEC PGM=ADRDSSU,PARM='TYPRUN=NORUN'
//SYSPRINT DD SYSOUT=*
//DD1 DD DISP=SHR,VOL=SER=volser,UNIT=3390 <--change volser
//SYSIN DD *
DEFRAG DDNAME(DD1)
/*
For more information, refer to the following link on Using DFSMSdss DEFRAG to layout allocated and free space on the volume
Review this chart to help determine an optimal size of your VTOC and VTOCIX:
*If the VTOCIX parm is omitted from EXTVTOC,NEWVTOC, or INIT, then ICKDSF calculates a size based on the VTOC size.
INCREASING SIZE OF VTOC
Our recommendation is to run EXTVTOC during a time of low usage in order to reduce concurrent I/O to the VTOC while EXTVTOC is running. ICKDSF will need to enqueue on the VTOC while processing the VTOC so there is a possibility that jobs may have to wait while ICKDSF EXTVTOC is processing.
- Increase the size of VTOC in-place:
- Use ICKDSF REFORMAT EXTVTOC
- DDNAME must be specified.
- Volume can be online.
-
//EXAMPLE JOB // EXEC PGM=ICKDSF //VOLDD DD DISP=SHR,UNIT=3390,VOL=SER=VOL111 /* volume is VOL111 //SYSPRINT DD SYSOUT=A //SYSIN DD * REFORMAT DDNAME(VOLDD) VERIFY(VOL111) EXTVTOC(90) /* new VTOC size is 90 tracks /* new size must be larger than current, /* ICKDSF will calculate new VTOCIX size
- Increase size of VTOC in-place and increase the size of the VTOCIX:
- Use ICKDSF REFORMAT EXTVTOC and EXTINDEX:
-
//EXAMPLE JOB // EXEC PGM=ICKDSF //VOLDD DD DISP=SHR,UNIT=3390,VOL=SER=VOL111 /* volume is VOL111 //SYSPRINT DD SYSOUT=A //SYSIN DD * REFORMAT DDNAME(VOLDD) VERIFY(VOL111) EXTVTOC(90) EXTINDEX(50) /* new VTOC size is 90 tracks, /* new VTOCIX size is 50 tracks, /* must be larger than current
- Move VTOC and increase size:
- If there is no space to expand the VTOC in its current location, relocating the VTOC is needed.*
- *If data sets exist right after the VTOC, you can move them to make room to expand the VTOC in-place. This method is preferable, if you are not able to take the volume offline. The volume must be offline if the VTOC needs to move to a new location. The VVDS data set is not moveable, so when it is right after the VTOC, then you will need to use NEWVTOC.
- Use ICKDSF REFORMAT NEWVTOC
- The volume must be offline.
- The UNIT parameter must be specified.
- Once the VTOC is relocated, a BUILDIX needs to be run to rebuild the VTOCIX.
-
Example using decimal values for VTOC location and size //EXAMPLE JOB // EXEC PGM=ICKDSF //SYSPRINT DD SYSOUT=A //SYSIN DD * REFORMAT UNIT(0F5B) VERIFY(VOL111) NEWVTOC(15,0,90) /* new VTOC location is cyl 15 head 0, /* new VTOC size is 90 tracks, /* new location and size must be /* different from current /* specify UNIT since device is offlineExample using hexidecimal values for VTOC location and size //EXAMPLE JOB // EXEC PGM=ICKDSF //SYSPRINT DD SYSOUT=A //SYSIN DD * REFORMAT UNIT(0F5B) VERIFY(VOL111) NEWVTOC(x'F',x'0',x'5A') /* new VTOC location is cyl x'F' head x'0', /* new VTOC size is x'5A' tracks (90 tracks), /* new location and size must be /* different from current /* specify UNIT since device is offlineExample using ANY for VTOC location, and hexidecimal value for size (hex and decimal allowed for ANY) //EXAMPLE JOB // EXEC PGM=ICKDSF //SYSPRINT DD SYSOUT=A //SYSIN DD * REFORMAT UNIT(0F5B) VERIFY(VOL111) NEWVTOC(ANY,x'5A') /* new VTOC location is ANY which assigns it /* to the first available free space extent /* that is large enough. /* new VTOC size is x'5A' tracks (90 tracks), /* new location and size must be /* different from current /* specify UNIT since device is offline
- If there is no space to expand the VTOC in its current location, relocating the VTOC is needed.*
INCREASING SIZE OF VTOCIX
- Increase size of VTOCIX:
- Use ICKDSF REFORMAT REFVTOC EXTINDEX
-
//EXAMPLE JOB // EXEC PGM=ICKDSF //VOLDD DD DISP=SHR,UNIT=3390,VOL=SER=VOL111 /* volume is VOL111 //SYSPRINT DD SYSOUT=A //SYSIN DD * REFORMAT DDNAME(VOLDD) VERIFY(VOL111) REFVTOC EXTINDEX(50) /* new VTOCIX size is 50 tracks /* new size must be larger than /* current. REFVTOC will rebuild /* the VTOC at it's current location. /* The VTOC size does not change.
- Creating a VTOCIX:
- Use ICKDSF BUILDIX to create a new VTOCIX when none exists.
-
//EXAMPLE JOB // EXEC PGM=ICKDSF //VOLDD DD UNIT=(3390,,DEFER),VOL=(PRIVATE,SER=VOL111), /* volume is VOL111 // DSN=SYS1.VTOCIX.VOL111,DISP=(NEW,KEEP), /* creates the VTOCIX data set // SPACE=(TRK,20,,CONTIG) /* VTOCIX size is 20 tracks and contiguous //SYSPRINT DD SYSOUT=A //SYSIN DD * BUILDIX DDNAME(VOLDD) IXVTOC /*
[{"Type":"MASTER","Line of Business":{"code":"LOB56","label":"Z HW"},"Business Unit":{"code":"BU070","label":"IBM Infrastructure"},"Product":{"code":"SWG90","label":"z\/OS - SWG90"},"ARM Category":[{"code":"a8m0z0000000ADlAAM","label":"DFSMS-\u003EDevice Management Services-\u003EDADSM"}],"ARM Case Number":"TS011563331","Platform":[{"code":"PF035","label":"z\/OS"}],"Version":"All Versions"}]
Was this topic helpful?
Document Information
Modified date:
08 January 2025
UID
ibm16850899