FDRMOVE MOVE function with examples
MOVE Function of FDRMOVE
The MOVE function of FDRMOVE moves the selected data sets when each of them becomes inactive, such as when batch jobs using the data sets finish, or TSO users log off. Normally, regular read/write I/O is used to move the data sets so larger data sets may be unavailable for longer periods. For this reason, MOVE is used for data sets that can tolerate being unavailable for longer periods than the data sets selected for FASTMOVE.
A single FDRMOVE job can process many volumes, but if you wish to reduce the total elapsed time, you can start multiple FDRMOVE jobs, each processing different input volumes.
In many installations, 90% of the data sets are inactive (not in use) or become inactive over some period of time. These data sets typically remain inactive for a long period of time. MOVE automates the process of moving these data sets with little or no impact. If a job needs the data set while it is being moved, it usually waits for it.
SELECT statements identify the data sets to be moved and the new volume(s) to move them onto. You can move:
- Entire volumes (all data sets on selected input volumes). This is especially useful when you want to combine specific small volumes onto one or more larger volumes.
- All data sets on one or more volumes that are below a certain size. Testing has shown that moving small data sets with normal I/O is often faster than using instant replication technology to move them.
- Specified data sets, selected by name and volume serial or SMS storage group or optionally from the catalog.
MOVE identifies all of the input volumes according to your specifications. It then begins moving inactive data sets from each volume, up to eight volumes concurrently per FDRMOVE job. When it has completed this first pass of all volumes, it begins waiting for active data sets to become available.
MOVE attempts to move each selected data set, but if the data set is active (a SYSDSN enqueue exists for the data set), and then it is bypassed. MOVE periodically tests each enqueued data set to see if it has become free, and if so moves it. The MOVE job can run for hours or days if needed, selecting data sets as they become free, until all selected data sets have been moved, or you terminate the FDRMOVE step. The MOVE function usually uses normal read/write I/O to move the data sets, but it may also use instant replication functions like FlashCopy and EMCSNAP if the source and target DASD volumes are in the same subsystem.
Moved data sets are allocated and cataloged on the output volume, and scratched from the input volume. FDRMOVE holds an exclusive SYSDSN enqueue on each data set while it is actually moving it, so each data set is not available while it is being moved, but is immediately available as soon as it is moved. FDRMOVE offers a Dynamic Allocation exit to prevent dynamic allocation from failing if a job needs a data set while it is being moved. With the FDRMOVE Dynamic Allocation exit installed, failed dynamic allocations are monitored and if it is found that the failure is caused by a data set that is actively being moved by FDRMOVE, this dynamic allocation is intercepted and delayed. This delay is comparable to a recall of an archived data set when a task requires a data set that was archived. See Dynamic Exit Installation Procedure for details on installing the exit and the options available for this exit. This exit works for both MOVE and FASTMOVE processes, but since the FASTMOVE process is moving data sets with “Instant” technology, the “window” of contention is less for FASTMOVE.
The MOVE job consists of a simple PGM=FDRMOVE step, invoking the MOVE function. Unlike FASTMOVE, no other jobs are required. You may also be able to improve performance (more volumes processed concurrently) by running multiple MOVE jobs selecting different subsets of the data to be moved, they can use the same target volumes.
You can monitor the progress of MOVE with the console “F movejob,STATUS” command or the FDRMOVE ISPF panel. See MODIFY Status Command.
MOVE Examples
Here are a number of examples of the FDRMOVE MOVE function. All examples in this section are found in the JCL library installed with FDRPAS. The member names are PA32503x.
Consolidate DASD Example
This is an example of a MOVE to consolidate (60) 3390-9 input volumes to (22) 3390-27 output volumes.
The default of MAXTASKS=8 allows eight input volumes to be processed concurrently using internal subtasks. All data sets on the input volumes are moved immediately if they are not active (SYSDSN enqueue). Active data sets are retried at 15-second intervals; as soon as they become inactive, they are moved.
FDRMOVE terminates automatically if all selected data sets have been moved. However, if some data sets never become inactive, STOPINACTIVE=480 causes FDRMOVE to automatically terminate if it has been idle (not moving data sets) for a cumulative time of 480 minutes (8 hours).
//FDRMOVE EXEC PGM=FDRMOVE,REGION=0M,TIME=1440//STEPLIB DD DISP=SHR,DSN=fdrpas.loadlib//SYSPRINT DD SYSOUT=*//FDRSUMM DD SYSOUT=*//SYSUDUMP DD SYSOUT=*//SYSIN DD * MOVE TYPE=DSF,DISABLENEW=YES,STOPINACTIVE=480 SELECT ALLDSN,VOL=IN0001,NVOL=(OUT001,OUT002,…,OUT022) SELECT ALLDSN,VOL=IN0002,NVOL=(OUT001,OUT002,…,OUT022) SELECT ALLDSN,VOL=IN0003,NVOL=(OUT001,OUT002,…,OUT022) … SELECT ALLDSN,VOL=IN0059,NVOL=(OUT001,OUT002,…,OUT022) SELECT ALLDSN,VOL=IN0060,NVOL=(OUT001,OUT002,…,OUT022)/*
The NVOL= list specifies (22) 3390-27 volumes. FDRMOVE round-robins (rotate) the volumes in the NVOL list for each ALLDSN statement. Data sets from IN0001 go to OUT001, IN0002 goes to OUT002, and so on, and IN0023 goes to OUT001, IN0024 goes to OUT002, and so on. Although the contents of the input volumes would usually fit on 20 output volumes, two extra target volumes are provided to handle very full volumes and activity on the target volumes by other jobs.
Consolidate Storage Group Example
This is an example of a MOVE to consolidate the 3390-9 input volumes in an SMS storage group to 3390-27 output volumes in the same storage group, but in a different control unit. The user has previously added all new volumes in the target control unit to the same SMS storage group.
FDRMOVE terminates automatically if all selected data sets have been moved. DISABLENEW=YES sets all input volumes to DISNEW status so that new allocations go to the output control unit.
//FDRMOVE EXEC PGM=FDRMOVE,REGION=0M,TIME=1440//STEPLIB DD DISP=SHR,DSN=fdrpas.loadlib//SYSPRINT DD SYSOUT=*//FDRSUMM DD SYSOUT=*//SYSUDUMP DD SYSOUT=*//SYSIN DD * MOVE TYPE=DSF,DISABLENEW=YES SELECT ALLDSN,CUID=12345,STORGRP=DB2APPL, NEWCUID=54321,NEWSTORGRP=DB2APPL/*
The CUID= operand specifies the serial number of the source control unit and the NEWCUID= operand specifies the serial number of the target control unit. FDRMOVE round-robins (rotate) the volumes in the target control unit for each of the ALLDSN statements that are internally generated.
If a different SMS storage group is specified for NEWSTORGRP=, change the SELECT statement above to:
SELECT ALLDSN,STORGRP=DB2APPL,NEWSTORGRP=DB2APPL2
Limit By Size Example
If you are concerned that large data sets may be unavailable for many minutes while they are being moved, this example shows how to limit MOVE to data sets of 1500 tracks (100 cylinders) or less. A FASTMOVE step can be used to quickly move the larger data sets that remain. See the notes in the first example about NVOL=. If any of the data sets being moved may be dynamically allocated by a job during the move process, it is recommended installing the FDRMOVE Dynamic Allocation exit.
//FDRMOVE EXEC PGM=FDRMOVE,REGION=0M,TIME=1440//STEPLIB DD DISP=SHR,DSN=fdrpas.loadlib//SYSPRINT DD SYSOUT=*//FDRSUMM DD SYSOUT=*//SYSUDUMP DD SYSOUT=*//SYSIN DD * MOVE TYPE=DSF,DISABLENEW=YES EXCLUDE ALLDSN,SIZE=1500 EXCLUDE DATA SETS > 100 CYLINDERS SELECT ALLDSN,VOL=IN0001,NVOL=(OUT001,OUT002,OUT003) SELECT ALLDSN,VOL=IN0002,NVOL=(OUT001,OUT002,OUT003)/*
Select From Catalog Example
This is an example of a MOVE that selects data sets on specific input volumes by selecting them from the system catalogs. The cataloged data sets selected reside on (30) 3390-3 volumes. They are copied to (11) 3390-9 volumes (this assumes that the input volumes are fairly full with DB2 data; if not, you may be able to use fewer output volumes). FDRMOVE automatically round-robins the NVOL= list for each source volume selected.
If you are unsure how many input volumes are involved, change MOVE to SIMMOVE. The FDR346 message shows how many volumes the CATDSN= selected.
//FDRMOVE EXEC PGM=FDRMOVE,REGION=0M,TIME=1440//STEPLIB DD DISP=SHR,DSN=fdrpas.loadlib//SYSPRINT DD SYSOUT=*//FDRSUMM DD SYSOUT=*//SYSUDUMP DD SYSOUT=*//SYSIN DD * MOVE TYPE=DSF SELECT CATDSN=DB2.**,NVOL=(OUT001,…,OUT011)/*
Sample MOVE Output
These are extracts from the output of an FDRMOVE MOVE step. Data sets that are not active (no SYSDSN enqueue exists for the data set) are moved immediately. The data sets that get the enqueue failure are remembered; they are retried at intervals and as soon as they are no longer active, they are moved.
The inactive data sets are immediately moved to their new volume.
FDR001 FDR PLUG AND SWAP DATA SET - FDRMOVE VER. 05.04/xxR - INNOVATION DATA PROCESSING |
FDR303 CARD IMAGE -- MOVE TYPE=DSF |
FDR333 CARD IMAGE -- EXCLUDE TEMP UNMOVABLE TABLE |
FDR303 CARD IMAGE -- S CATDSN=DB2.**,NVOL=(OUT001,OUT002,OUT003,OUT004 ,…) |
FDR346 FILTER SELECTED 60 VOLUMES IN 0.43 SECS |
FDR256 --- REPORT FROM SYSPRIN1 --- |
FDR007 STARTING TIME OF DATA SET MOVE -- 11.26.40 -- IN=D#IN0001 |
FDR314 FDR SCRATCHED DSN=DB2.MOVE039.VIN0001.PS.ONETRK.A0005 FROM VOL=IN0001 |
FDR311 FDR MOVED DSN=DB2.MOVE039.VIN0001.PS.ONETRK.A0005 ALLOCATED CATALOGED |
FDR311 ON VOLSER=OUT001 UNIT=3390-27 (IN0001) |
FDR314 FDR SCRATCHED DSN=DB2.MOVE039.VIN0001.PS.ONETRK.A0004 FROM VOL=IN0001 |
FDR311 FDR MOVED DSN=DB2.MOVE039.VIN0001.PS.ONETRK.A0004 ALLOCATED CATALOGED |
FDR311 ON VOLSER=OUT001 UNIT=3390-27 (IN0001) |
FDR007 ENDING TIME OF DATA SET MOVE -- 11.26.40 -- IN=D#IN0001 |
A console STATUS request or ISPF panel (see FDRMOVE Console Commands and ISPF Interface) shows the active data sets. FDRMOVE tests the enqueue status of each data set at intervals.
FDR184 -- MOVE STATUS REPORT -- |
FDR184 VOL=IN0002 AWAITING MOVE FROM IBM76421 TO EMC00547 356 DATASETS TO MOVE |
FDR184 |---FOR ACTIVE DSN=DB2.MOVE039.MV.KSDS.CLUSTER 1 JOBS(DB2PROD) |
FDR184 |---FOR ACTIVE DSN=DB2.MOVE039.VIN0002.KSDS.A0001.CLUSTER 2 JOBS(MOVE039Q,MOVE039E) |
FDR184 |---FOR ACTIVE DSN=DB2.MOVE039.VIN0002.PO.A0001 2 JOBS(MOVE039Q,MOVE039E) |
FDR184 |---FOR ACTIVE DSN=DB2.MOVE039.VIN0002.PS.A0001 2 JOBS(MOVE039Q,MOVE039E) |
FDR184 |---FOR ACTIVE DSN=DB2.MOVE039.VIN0002.PS.A0002 1 JOBS(DB2PROD) |
FDR184 |---FOR ACTIVE DSN=DB2.MOVE039.VIN0002.PS.A0004 1 JOBS(DB2PROD) |
FDR184 VOL=IN0003 AWAITING MOVE FROM IBM76421 TO EMC00547 4 DATASETS TO MOVE |
FDR184 |---FOR ACTIVE DSN=DB2.MOVE039.VIN0003.KSDS.A0002.CLUSTER 1 JOBS(DB2PROD) |
FDR184 |---FOR ACTIVE DSN=DB2.MOVE039.VIN0003.PO.A0002 1 JOBS(DB2PROD) |
FDR184 |---FOR ACTIVE DSN=DB2.MOVE039.VIN0003.PS.A0001 2 JOBS(MOVE039Q,MOVE039E) |
FDR184 |---FOR ACTIVE DSN=DB2.MOVE039.VIN0003.PS.A0002 1 JOBS(DB2PROD) |
FDR184 FDR MOVED 615 DATASETS/COMPONENTS SUCCESSFULLY |
FDR184 MOVE STATUS 650 ACTIVE DATASETS 0 AWAITING TRANSIT 0 MOVING TO TRANSIT 0 IN TRANSIT STATION |
FDR265 MODIFY COMMAND COMPLETED - STATUS |
When data sets become free, they are moved.
FDR314 FDR SCRATCHED DSN=DB2.MOVE039.VIN0002.PS.A0004 FROM VOL=IN0002 |
FDR311 FDR MOVED DSN=DB2.MOVE039.VIN0002.PS.A0004 ALLOCATED CATALOGED |
FDR311 ON VOLSER=SY3100 UNIT=3390-27 (IN0002) |
FDR314 FDR SCRATCHED DSN=DB2.MOVE039.VIN0002.PS.A0002 FROM VOL=IN0002 |
FDR311 FDR MOVED DSN=DB2.MOVE039.VIN0002.PS.A0002 ALLOCATED CATALOGED |
FDR311 ON VOLSER=SY3100 UNIT=3390-27 (IN0002) |
FDR007 ENDING TIME OF DATA SET MOVE -- 11.28.08 -- IN=D#SH20C0 |
When FDRMOVE has moved all selected data sets, it terminates.
FDR184 FDR MOVED 129 DATASETS/COMPONENTS SUCCESSFULLY |
FDR999 FDR SUCCESSFULLY COMPLETED |
Move Within the Same Storage Group Example
Move all data sets from smaller devices to 3390-27 in the same SMS storage group. Since the data set's source and target are in the same SMS storage group, the STORGRP= and NEWSTORGRP= operands cannot both be specified. In this case, FDREPORT is used to obtain the volume information and generate VOL= and NVOL= operands from the SMS storage group that can be used by FDRMOVE.
//FDREPORT EXEC PGM=FDREPORT,REGION=0M//STEPLIB DD DISP=SHR,DSN=fdrpas.loadlib//SYSPRINT DD SYSOUT=*//ABRMAP DD SYSOUT=*//SYSUDUMP DD SYSOUT=*//FDRLIB DD *)PREFIX SELECT ALLDSN,VOL=@VLVOLSER#,)ENDPREFIX)CONTVALUES | |,|,| NVOL=(<VLVOLSER>)/*//ALTMASK DD UNIT=SYSALLDA,SPACE=(TRK,(10,10))//SYSPUNCH DD SYSOUT=*//SYSIN DD * DEFAULT SUMDEV=UNIQUE XSELECT VLSMSSTG=PROD* PRINT DATATYPE=VOLDATA CANCEL SELECT XSELECT VLSMSSTG=PROD*,VLDEVTYP=3390-27 PUNCH ECHO PRINT DATATYPE=VOLDATA,RPTYPE=SELPCH,PCHDD=ALTMASK CANCEL SELECT DEFAULT FIELDPREFIX=@,FIELDSUFFIX=# XEXCLUDE VLDEVTYP=3390-27 XSELECT VLSMSSTG=PROD*,VLDEVTYP=(3390-2,3390-3) PUNCH FDRLIB=ALTMASK,ECHO PRINT DATATYPE=VOLDATA,RPTYPE=SELPCH/*
This is an example of the output that would be generated on the SYSPUNCH by this FDREPORT job:
SELECT ALLDSN,VOL=SYSLB6, |
NVOL=(VTS017,VTS018,VTS019,VTS020,VTS021,VTS022,VTS023,VTS024,VTS025, |
VTS026,VTS027,VTS028,VTS029,VTS030,VTS031,VTS032,SYTS45,SYTS46,SYTS47, |
SYTS48) |
SELECT ALLDSN,VOL=SYSLB2, |
NVOL=(VTS017,VTS018,VTS019,VTS020,VTS021,VTS022,VTS023,VTS024,VTS025, |
VTS026,VTS027,VTS028,VTS029,VTS030,VTS031,VTS032,SYTS45,SYTS46,SYTS47, |
SYTS48) |
SELECT ALLDSN,VOL=IDPLB6, |
NVOL=(VTS017,VTS018,VTS019,VTS020,VTS021,VTS022,VTS023,VTS024,VTS025, |
VTS026,VTS027,VTS028,VTS029,VTS030,VTS031,VTS032,SYTS45,SYTS46,SYTS47, |
SYTS48) |
SELECT ALLDSN,VOL=SYSLB3, |
NVOL=(VTS017,VTS018,VTS019,VTS020,VTS021,VTS022,VTS023,VTS024,VTS025, |
VTS026,VTS027,VTS028,VTS029,VTS030,VTS031,VTS032,SYTS45,SYTS46,SYTS47, |
SYTS48) |
… |
A console STATUS request or ISPF panel (see FDRMOVE Console Commands and ISPF Interface) shows the active data sets. FDRMOVE tests the enqueue status of each data set at intervals.
FDR184 -- MOVE STATUS REPORT -- |
FDR184 VOL=IN0002 AWAITING MOVE FROM IBM76421 TO EMC00547 356 DATASETS TO MOVE |
FDR184 |---FOR ACTIVE DSN=DB2.MOVE039.MV.KSDS.CLUSTER 1 JOBS(DB2PROD) |
FDR184 |---FOR ACTIVE DSN=DB2.MOVE039.VIN0002.KSDS.A0001.CLUSTER 2 JOBS(MOVE039Q,MOVE039E) |
FDR184 |---FOR ACTIVE DSN=DB2.MOVE039.VIN0002.PO.A0001 2 JOBS(MOVE039Q,MOVE039E) |
FDR184 |---FOR ACTIVE DSN=DB2.MOVE039.VIN0002.PS.A0001 2 JOBS(MOVE039Q,MOVE039E) |
FDR184 |---FOR ACTIVE DSN=DB2.MOVE039.VIN0002.PS.A0002 1 JOBS(DB2PROD) |
FDR184 |---FOR ACTIVE DSN=DB2.MOVE039.VIN0002.PS.A0004 1 JOBS(DB2PROD) |
FDR184 VOL=IN0003 AWAITING MOVE FROM IBM76421 TO EMC00547 4 DATASETS TO MOVE |
FDR184 |---FOR ACTIVE DSN=DB2.MOVE039.VIN0003.KSDS.A0002.CLUSTER 1 JOBS(DB2PROD) |
FDR184 |---FOR ACTIVE DSN=DB2.MOVE039.VIN0003.PO.A0002 1 JOBS(DB2PROD) |
FDR184 |---FOR ACTIVE DSN=DB2.MOVE039.VIN0003.PS.A0001 2 JOBS(MOVE039Q,MOVE039E) |
FDR184 |---FOR ACTIVE DSN=DB2.MOVE039.VIN0003.PS.A0002 1 JOBS(DB2PROD) |
FDR184 FDR MOVED 615 DATASETS/COMPONENTS SUCCESSFULLY |
FDR184 MOVE STATUS 650 ACTIVE DATASETS 0 AWAITING TRANSIT 0 MOVING TO TRANSIT 0 IN TRANSIT STATION |
FDR265 MODIFY COMMAND COMPLETED - STATUS |
When data sets become free, they are moved.
FDR314 FDR SCRATCHED DSN=DB2.MOVE039.VIN0002.PS.A0004 FROM VOL=IN0002 |
FDR311 FDR MOVED DSN=DB2.MOVE039.VIN0002.PS.A0004 ALLOCATED CATALOGED |
FDR311 ON VOLSER=SY3100 UNIT=3390-27 (IN0002) |
FDR314 FDR SCRATCHED DSN=DB2.MOVE039.VIN0002.PS.A0002 FROM VOL=IN0002 |
FDR311 FDR MOVED DSN=DB2.MOVE039.VIN0002.PS.A0002 ALLOCATED CATALOGED |
FDR311 ON VOLSER=SY3100 UNIT=3390-27 (IN0002) |
FDR007 ENDING TIME OF DATA SET MOVE -- 11.28.08 -- IN=D#SH20C0 |
When FDRMOVE has moved all selected data sets, it terminates.
FDR184 FDR MOVED 129 DATASETS/COMPONENTS SUCCESSFULLY |
FDR999 FDR SUCCESSFULLY COMPLETED |
Move Within the Same Storage Group Example
Move all data sets from smaller devices to 3390-27 in the same SMS storage group. Since the data set's source and target are in the same SMS storage group, the STORGRP= and NEWSTORGRP= operands cannot both be specified. In this case, FDREPORT is used to obtain the volume information and generate VOL= and NVOL= operands from the SMS storage group that can be used by FDRMOVE.
//FDREPORT EXEC PGM=FDREPORT,REGION=0M//STEPLIB DD DISP=SHR,DSN=fdrpas.loadlib//SYSPRINT DD SYSOUT=*//ABRMAP DD SYSOUT=*//SYSUDUMP DD SYSOUT=*//FDRLIB DD *)PREFIX SELECT ALLDSN,VOL=@VLVOLSER#,)ENDPREFIX)CONTVALUES | |,|,| NVOL=(<VLVOLSER>)/*//ALTMASK DD UNIT=SYSALLDA,SPACE=(TRK,(10,10))//SYSPUNCH DD SYSOUT=*//SYSIN DD * DEFAULT SUMDEV=UNIQUE XSELECT VLSMSSTG=PROD* PRINT DATATYPE=VOLDATA CANCEL SELECT XSELECT VLSMSSTG=PROD*,VLDEVTYP=3390-27 PUNCH ECHO PRINT DATATYPE=VOLDATA,RPTYPE=SELPCH,PCHDD=ALTMASK CANCEL SELECT DEFAULT FIELDPREFIX=@,FIELDSUFFIX=# XEXCLUDE VLDEVTYP=3390-27 XSELECT VLSMSSTG=PROD*,VLDEVTYP=(3390-2,3390-3) PUNCH FDRLIB=ALTMASK,ECHO PRINT DATATYPE=VOLDATA,RPTYPE=SELPCH/*
This is an example of the output that would be generated on the SYSPUNCH by this FDREPORT job:
SELECT ALLDSN,VOL=SYSLB6, |
NVOL=(VTS017,VTS018,VTS019,VTS020,VTS021,VTS022,VTS023,VTS024,VTS025, |
VTS026,VTS027,VTS028,VTS029,VTS030,VTS031,VTS032,SYTS45,SYTS46,SYTS47, |
SYTS48) |
SELECT ALLDSN,VOL=SYSLB2, |
NVOL=(VTS017,VTS018,VTS019,VTS020,VTS021,VTS022,VTS023,VTS024,VTS025, |
VTS026,VTS027,VTS028,VTS029,VTS030,VTS031,VTS032,SYTS45,SYTS46,SYTS47, |
SYTS48) |
SELECT ALLDSN,VOL=IDPLB6, |
NVOL=(VTS017,VTS018,VTS019,VTS020,VTS021,VTS022,VTS023,VTS024,VTS025, |
VTS026,VTS027,VTS028,VTS029,VTS030,VTS031,VTS032,SYTS45,SYTS46,SYTS47, |
SYTS48) |
SELECT ALLDSN,VOL=SYSLB3, |
NVOL=(VTS017,VTS018,VTS019,VTS020,VTS021,VTS022,VTS023,VTS024,VTS025, |
VTS026,VTS027,VTS028,VTS029,VTS030,VTS031,VTS032,SYTS45,SYTS46,SYTS47, |
SYTS48) |
… |