Archive for category MVS
Move a dataset that is in Linklist to a different volume
Posted by Rui Miguel Feio in MVS on August 27th, 2009
Sometimes we come across the need of moving to a different volume a dataset that is in Linklist.
We must remember that moving a dataset does not change the list of datasets defined to the current concatenation in any way – the dataset name remains the same -. The system will continue to use the current Linklist set as is and will not rebuild the concatenation.
To make a change to any dataset (ex: move) that is part of an active linklist set, you have to first remove it from the linklist set. When it is no longer part of an active concatenation, then you can modify it as you like and then add it back in.
So, in order to move a Linklisted dataset to a different volume you would have to:
1. Define a new linklist set without the dataset you wish to recatalog.
2. Activate/implement it.
3. Move your dataset.
4. Define a linklist set with the dataset you’ve moved.
5. Activate/implement this new set.
Here’s an example of the commands you would use:
1. P LLA
2. SETPROG LNKLST,UNALLOCATE
3. Create a PROGT1 containing the LINKLIST members EXCEPT the one we want to move and rename LNKLST0x to LNKLST0x + 1
4. SET PROG=T1
5. SETPROG LNKLST,UPDATE,JOBNAME=*
6. Move the dataset into a different volume.
7. Create a PROGT2 containing the LINKLIST members INCLUDING the one we’ve moved to a different volume and increment the LNKLSTxx value (LNKLST0x + 1).
8. SET PROG=T2
9. S LLA,SUB=MSTR
10. SETPROG LNKLST,ALLOCATE
11. SETPROG LNKLST,UPDATE,JOBNAME=*
Here’s a practical example:
Current Linklist set: LNKLST00
Dataset name: SYS2.MOVE.EXAMPLE
Original volume: TST001
Destination volume: TST002
Current PROGxx: PROGT0
Commands:
- P LLA
- SETPROG LNKLST,UNALLOCATE
- Create a PROGT1 containing all the LINKLIST datasets with the exception of SYS2.MOVE.EXAMPLE, and rename all instances of LNKLST00 to LNKLST01.
- SET PROG=T1
- SETPROG LNKLST,UPDATE,JOBNAME=*
- Move dataset SYS2.MOVE.EXAMPLE from volume TST001 to volume TST002.
- Create a PROGT2 containing all the LINKLIST datasets including SYS2.MOVE.EXAMPLES and rename all instances of LNKLST01 to LNKLST02.
- SET PROG=T2
- S LLA,SUB=MSTR
- SETPROG LNKLST,ALLOCATE
- SETPROG LNKLST,UPDATE,JOBNAME=*
Linklist update – Why we need to stop LLA and unallocate the LNKLST
Posted by Rui Miguel Feio in MVS on August 26th, 2009
A couple of months ago I’ve written a post on how to dynamically update the Linklist but some questions have been risen on why we need to stop the LLA and unallocate the Linklist.
Each Linklist dataset has an ENQ from both XCFAS and LLA. An ENQ on a LNKLST dataset prevents that dataset from being altered as long as it is a member of an active LNKLST. So, in order to be able to make changes to the active Linklist you first need to remove those ENQs.
To be able to remove the LLA ENQs you need to stop the LLA. The only impact that stopping the LLA has in the system is loss of performance until you re-start the LLA.
As per the XCFAS ENQs to remove them you need to issue the SETPROG LNKLST UNALLOCATE command. Unallocate indicates that you want to undo all existing allocations obtained while processing active LNKLST sets.
Once you remove the ENQs you are then able to change the Linklist. Now, bear in mind that although you have removed the ENQs the modules are still in Linklist. No abend will come out of this.
Once you are finished with the Linklist changes, you then restart the LLA and ALLOCATE the Linklist.
The UPDATE command indicates that the system is to update an address space so that a specified job or jobs associated with that space can use the current LNKLST set. If the job is using another LNKLST set when the current LNKLST set is activated, it will continue to use the original LNKLST set until it completes operations. When the job completes and restarts, it then uses the datasets defined in the new currently active LNKLST set.
Displaying Page Dataset Information
Posted by Rui Miguel Feio in MVS on August 20th, 2009
As you may know, Page datasets are defined on the IEASYSxx member of the Parmlib but if you want to avoid the hassle of checking this member or if you would like to obtain more information about them, you can use the following MVS commands to display Page Dataset information:
1. Command: /D ASM
Displays information about the page data sets the system is currently using and the status of the PAGEDEL command.
Example:
RESPONSE=TST1
IEE200I 08.14.54 DISPLAY ASM 182
TYPE FULL STAT DEV DATASET NAME
PLPA 28% OK 8833 SYS1.TST1.PAGE.PLPA
COMMON 0% OK 863B SYS1.TST1.PAGE.COMMON
LOCAL 1% OK 880E SYS1.TST1.PAGE.LOCAL1
LOCAL 2% OK 880F SYS1.TST1.PAGE.LOCAL2
PAGEDEL COMMAND IS NOT ACTIVE
2. Command: /D ASM,PLPA
Displays information about the PLPA page data set.
Example:
RESPONSE=TST1
IEE200I 08.19.40 DISPLAY ASM 236
TYPE FULL STAT DEV DATASET NAME
PLPA 28% OK 8833 SYS1.TST1.PAGE.PLPA
VOLSER DEVTYP SIZE USED AVAIL ERRORS
TST1P1 3390 53,999 15,508 38,491 0
3. Command: /D ASM,LOCAL
Displays information about all local page data sets.
Example:
RESPONSE=TST1
IEE200I 08.23.00 DISPLAY ASM 264
TYPE FULL STAT DEV DATASET NAME
LOCAL 1% OK 880E SYS1.TST1.PAGE.LOCAL1
LOCAL 2% OK 880F SYS1.TST1.PAGE.LOCAL2
4. Command: /D ASM,COMMON
Displays information about the common page data set.
Example:
RESPONSE=TST1
IEE200I 08.28.25 DISPLAY ASM 305
TYPE FULL STAT DEV DATASET NAME
COMMON 0% OK 863B SYS1.TST1.PAGE.COMMON
VOLSER DEVTYP SIZE USED AVAIL ERRORS
TST1P0 3390 89,999 42 89,957 0
5. Command: /D ASM,PAGE=page_dataset_name
Displays information about page data sets.
Example:
page_dataset_name = SYS1.TST1.PAGE.LOCAL1
/D ASM,PAGE=SYS1.TST1.PAGE.LOCAL1
Returns:
RESPONSE=TST1
IEE200I 08.31.01 DISPLAY ASM 328
TYPE FULL STAT DEV DATASET NAME
LOCAL 1% OK 880E SYS1.TST1.PAGE.LOCAL1
VOLSER DEVTYP SIZE USED AVAIL ERRORS
TST1P2 3390 599,399 11,242 588,157 0
How to display the Linklist concatenation
Posted by Rui Miguel Feio in MVS on August 19th, 2009
Whoever works with mainframes knows that to be able to o know what the Linklist concatenation is is one of the most important things in the job.
There is a very simple MVS command for the effect:
D PROG,LNKLST
Here’s an example of what this command returns:
RESPONSE=TST1
CSV470I 12.29.52 LNKLST DISPLAY 888
LNKLST SET LNKLST01 LNKAUTH=LNKLST
ENTRY APF VOLUME DSNAME
1 A TST1R1 SYS2.LINKLIB
2 A TST1R1 SYS1.MIGLIB
3 A TST1R1 SYS1.CSSLIB
4 A TST1R1 SYS2.LINKLIB
5 A TST1R1 SYS1.LINKLIB
6 TST1R1 SYS1.SORTLIB
...
Explanation:
TST1 is the LPAR name
LNKLST01 indicates the Linklist set currently active and in use by the system
A indicates that the dataset is also in APF list
TST1R1 indicates the volume where the dataset is allocated
Note:
The Linklist concatenation is defined in the PROGxx member of the PARMLIB.
MVS command to change the state of an Exit routine
Posted by Rui Miguel Feio in MVS on August 19th, 2009
Sometimes we find it necessary either to inactivate an active exit routine or the other way around. In order to achieve this, we need to use the MVS command:
/SETPROG EXIT,MODIFY,EXITNAME=exit_name,MODNAME=mod_name,STATE=active_inactive
Example:
/SETPROG EXIT,MODIFY,EXITNAME=SYS.IEFACTRT,MODNAME=IEFACTRT,STATE=INACTIVE
Other parameters:
JOBNAME=jobname – The job(s) name(s) for which this exit routine is to get control. If some other job calls the exit, this exit routine does not get control. The default value is * which means all the jobs. The default for the MODIFY parameter is to leave the jobname unchanged.
MVS command to Add an Exit routine to an Exit
Posted by Rui Miguel Feio in MVS on August 19th, 2009
When you require to add an exit routine to an exit you may use the most simple form of the Add command:
/SETPROG EXIT,ADD,EXITNAME=exit_name,MODNAME=mod_name,DSNAME=dsname
Example:
exit_name = SYS.IEFACTRT
mod_name = IEFACTRT
dsname = SYS2.LINKLIB.TST1
/SETPROG EXIT,ADD,EXITNAME=SYS.IEFACTRT,MODNAME=IEFACTRT,DSNAME=SYS2.TST1.LINKLIB
Other parameters:
When adding an Exit routine to an Exit you may also have the need to use one or more of the following parameters:
STATE=active_inactive - Indicates the state of the exit routine. ACTIVE is the default value.
JOBNAME=jobname – The job(s) name(s) for which this exit routine is to get control. If some other job calls the exit, this exit routine does not get control. The default value is * which means all the jobs.
ABENDNUM=(n[,CONSEC]) – indicates that the exit routine is not to be given control after the n abends occur. CONSEC indicates that there must be n consecutive abends before the system stops giving control to the exit routine.
FIRST – Specifies that the system is to call the exit routine before all other exit routines associated with this exit, unless another exit routine, added after it, also specifies FIRST.
LAST - Specifies that the system is to call the exit routine after all other exit routines associated with this exit, unless other exit routines are added after it.
Examples:
/SETPROG EXIT,ADD,EX=SYS.IEFU83,MOD=CYN1FU83,DSN=CYN.SCYNAUTH,FIRST
/SETPROG EXIT,ADD,EX=SYS.IEFU83,MOD=CYN1FU83,DSN=CYN.SCYNAUTH,FIRST,STATE=INACTIVE
/SETPROG EXIT,ADD,EX=SYSSTC.IEFACTRT,MOD=IEFACTRT,ABENDNUM=(5)
/SETPROG EXIT,ADD,EX=SYSSTC.IEFACTRT,MOD=IEFACTRT,ABENDNUM=(5,CONSEC)
MVS commands to display Dynamic Exits
Posted by Rui Miguel Feio in MVS on August 17th, 2009
The following are some of the most common ways to display Exits and Exit Routines:
1. Display the names of all the Exits
/D PROG,EXIT,ALL
Example of what this command returns:
CSV460I 13.31.32 PROG,EXIT DISPLAY 941
EXIT DEF EXIT DEF EXIT DEF
SYSSTC.IEFACTRT E SYSSTC.IEFUJI E SYSSTC.IEFUJV E
SYS.IEFACTRT E SYS.IEFUJI E SYS.IEFUJV E
SYS.IEFU83 E SYS.IEFU84 E SYS.IEFU85 E
SYSSTC.IEFU83 E SYSSTC.IEFU84 E SYSSTC.IEFU85 E
...
2. Display the names of all exit routines associated with the named exit
/D PROG,EXIT,EXITNAME=exit_name
Example:
exit_name = SYS.IEFACTRT
/D PROG,EXIT,EXITNAME=SYS.IEFACTRT
Returns:
RESPONSE=TST1
CSV461I 14.15.02 PROG,EXIT DISPLAY 068
EXIT MODULE STATE MODULE STATE MODULE STATE
SYS.IEFACTRT IEFACTRT A STRBACTR A
3. Display the names of the exits with which the specified exit routine is associated
/D PROG,EXIT,MODNAME=mod_name
Example:
mod_name = IEFACTRT
/D PROG,EXIT,MODNAME=IEFACTRT
Returns:
RESPONSE=TST1
CSV462I 14.20.25 PROG,EXIT DISPLAY 906
MODULE IEFACTRT
EXIT(S) SYSSTC.IEFACTRT SYS.IEFACTRT
MVS command to Delete an Exit routine from an Exit
Posted by Rui Miguel Feio in MVS on August 17th, 2009
The following command deletes an exit routine from an exit:
/SETPROG EXIT,DELETE,EXITNAME=exit_name,MODNAME=mod_name,FORCE=yes_no
Example:
exit_name = SYSSTC.IEFACTRT
mod_name = IEFACTRT
/SETPROG EXIT,DELETE,EXITNAME=SYSSTC.IEFACTRT,MODNAME=IEFACTRT
Note:
FORCE = NO is the default value and therefore we don’t need to specify it. This changes the state of the exit routine to inactive and the system does not free the storage.
FORCE=YES frees the storage of the exit routine immediately and it should be used only if you are sure that no exit is running that exit routine.
How to check who’s allocating a device unit
Posted by Rui Miguel Feio in MVS on August 16th, 2009
Let’s say for instance that you have a DASD volume (TSTCT1) and you would like to know who’s using it (allocating it).
In order to do this we first need to know the unit address of said device:
/D U,VOL=volume_name
In our example:
/D U,VOL=TSTCT1
Result:
RESPONSE=TST1
IEE457I 09.53.10 UNIT STATUS 444
UNIT TYPE STATUS VOLSER VOLSTATE
7001 3390 A TSTCT1 PRIV/RSDNT
Note: In this case as we can see the unit address of TSTCT1 is 7001.
Once we know the unit address then we can check who’s allocating it by using the command:
/D U,,ALLOC,address,1
In our case:
/D U,,ALLOC,7001,1
Result:
RESPONSE=TST1
IEE106I 09.56.08 UNITS ALLOCATED 623
UNIT JOBNAME ASID JOBNAME ASID JOBNAME ASID JOBNAME ASID
7001 *MASTER* 0000 *MASTER* 0001 XCFAS 0006 OMVS 000E
7001 CATALOG 0023 LLA 0024 JES2 0028
Note:
We use “1″ in the end of the command so that we only get the display for the single device we’ve specified in the command.
How to check if an LPAR is part of a SYSPLEX?
Posted by Rui Miguel Feio in MVS on July 3rd, 2009
If you need to check if an LPAR is part of a SYSPLEX or the SYSPLEX name it belongs to simply issue the command: D XCF
Example:
D XCF
Returns:
RESPONSE=TST1
IXC334I 09.32.10 DISPLAY XCF 309
SYSPLEX TESTPLEX: TST1 TST2 TST3
Notes:
- the command was issued from LPAR TST1
- in red we can see the SYSPLEX name (TESTPLEX)
- in blue we can see that 3 LPARs (TST1, TST2 and TST3) are part of the SYSPLEX TESTPLEX