The Ultimate Solution to Simplify Your Data Center
TSO (Time Sharing Option) and ISPF (Interactive System Productivity Facility) Feature and Tips
- How do I get my TSO session cancelled after a TCP/IP disconnect?
- When I get the message “data set in use”, how do I tell who has it?
- When a batch Job is waiting for a data set
- How do I get rid of all those underlines?
- How do I allocate my CLIST library?
- How do I turn the PFkey help information on and off?
- What are the smallest and the largest records that be edited.
- What is the difference between LOG and LIST?
- Putting the command line at the top of the screen
- How to I show the column indicator?
- How to have up to 8 splits on your screen?
- How does TSO handle timeouts?
- What are the features of NWR’s TOOL utility?
- How do I run REXX or CLISTs as Batch Jobs?
- How does IOF decide who can see which Jobs?
- How can I save the printed output of my jobs to a data set?
- How can I copy all or part of my job to a printer?
- How to recover a lost data set
CANCELING A TSO SESSION IN IOF
When you receive the message:
IKJ56425I LOGON rejected, UserId iiuuu already logged on to system NWR1 ACF82905 ACF2, DUPLICATE USERID, YOUR LOGONID IS ALREADY IN USE ACF82904 ACF2, SESSION TERMINATED.
You can call Customer Support at the NWRDC to have your TSO session canceled, or you can get someone with a logonid that is in the same security group and subgroup as yours to cancel your TSO session.
To cancel a running TSO session, enter into IOF, type the logonid in the JOBNAMES field and hit "enter". On the IOF Job List Menu, cancel the logonids by placing a 'c' in the line command field.
EXAMPLE:
| ----------------------- IOF Job List Menu ------------(3)-------------- COMMAND ===> SCROLL ===> CURSOR ------------------------- Running Jobs -------------------------------- ---JOBNAME--JOBID--ACT-STAT--USER NAME----------------CPU-------I/O---- c 1 NSLSB T28189 LSBURGESS :02 6.20 -------------------------- Output Jobs -------------------------------- JOBNAME--JOBID--ACT-STATE--USER NAME----------DEST/DEVICE--------RECS-- _ 2 NXLSBDP J01064 NWR _ 3 NXLSBJOB J28150 NWR |
Data Set in Use (Who Has It?)
When you get the message "dataset in use", hit PF1 and you will get a short message "dataset in use by another TSO user". However, if you press the PF1/PF13 key again, you will get a longer message, this time you will get the user ID of a person or jobname of a job that has the dataset.
If that doesn't give you enough information, call Customer Support and we will use our tools to locate the dataset to determine the logon IDs or tasks using a dataset.
TMUSER: How to find why your batch job has been delayed
If you have a batch job that has data set “dependencies” (and what batch job doesn’t) it can get delayed by your DISP=OLD designations. It can get delayed by something else’s DISP=OLD designations. Of course, DISP=NEW can also cause the same type of delay.
NWR utilizes a product called ThruPut Manager whose goal in life is to oversee the job mix. As part that effort, it handles data set disposition conflicts.
If the contention has been caused by a TSO user, ThruPut Manager will start sending them messages asking that they free the data set they are holding.
ThruPut Manager can be asked to identify the job or task that is preventing your job from running.
Let’s get started.
So, you are looking at the main IOF screen titled “Job List Menu”. You have one or more jobs in the “Input Jobs” section that you think aught to run.
- In the TSO “COMMAND =>” area, type TMUSER and hit Enter. This is a request to invoke the “ThruPut Manager User” interface.
- The screen title should change to “TM/User Display Services” and a window should open on the right side of the screen titled “Job List Display”.
- The letters “’DC” should appear on the same line as your job in question. The DC stands for Data Set Contention. (If “DC” does not show up on the same line as your delayed job, something else is keeping it from running. Perhaps the initiators are busy, or the specified job class is not yet active.)
- Tab or click your way to the”DC” itself; not the underscore to its left.
- With your cursor on the D or the C, hit Enter.
- A “DCS Display” box should appear. That box will identify the Data Set Name that has caused the contention. There may me more than one data set listed.
- Tab down to the Data Set Name and hit Enter.
- The “Holder Information” box should appear. That box will identify any jobs or tasks that are causing your job to be delayed.
- Hit PF3 three times to exit ThruPut Manager and return to IOF.
Underlines on the Panels
From the ISPF Primary Option Menu panel, move the cursor by using either the arrow keys or the left mouse button on the word Options at the top of the panel. Press the ENTER key or click on the right mouse buttom to pull down a menu. Type '2' to select CUA Attributes... and hit ENTER. When you enter the CUA Attribute Change Utility, there will be 5 pages of Panel Element types. Look for USCORE in the highlight column and overtype USCORE with NONE. When changes are made, exit with PF3.
Allocating YOUR CLIST Library
If you want to execute a command "TSO XX", where XX is a member of a CLIST library, do the following: Look in the AUTO member of your profile II.UUU.PROFILE and verify that you are NOT allocating the CLIST library there.
Select 0 Settings from the Information Center panel, then 4 Applications then 1 LIBDEF. Under CLIST=, type your CLIST library name in single quotes. PF3 back to Information Center panel.
Select 3 OPTIONS. Under "User Allocations" type YES. PF3 back to Information Center Panel and select 1 PDF.
Turning Off PFSHOW
On ISPF command line, type PFSHOW OFF.
Smallest and Largest Length Records to Edit
For fixed length records; the SHORTEST is 10 and the LARGEST is 255.
For variable length; the SHORTEST is 14 and the LARGEST is 259.
Difference Between Log and List
The log data set 'userid.SPFLOGn.LIST' is an audit trail of all the functions you performed while in ISPF. The list data set 'userid.SPFn.LIST' contains anything you printed from your ISPF session.
Putting the Command Line at the Top of the Screen
To get the command line back to the top of the screen, select (4) Display from the ISPF parameter options (0). Type 'ASIS" instead of "BOTTOM'.
Showing the Scale or Column Indicators When Editing
To get the column numbers (or scale) to appear at the top of the screen, position your cursor in the sequence number on the first line and type COLS, then press ENTER. To remove the scale line, type the line command D to the left of the scale line.
Have Up to 8 Splits on Your Screen
From the ISPF command line, type 'SPLIT NEW nnnn' where nnnn is the name you will give the 'split'. You will only see two splits at a time, but you can 'split' up to eight times.
Then type 'SWAP LIST' on the command line to view a list of your split sessions. You may then select a 'split' from the list.
The ring of 8 split screens can also be navigated via the 'SWAP NEXT' and the 'SWAP PREV' commands.
Setting a Time-Out Limit by Logon ID
An institution's security manager may set a time-out by logon ID. The time-out limit is 30 minutes. The actual number of minutes is not flexible. Either the indicator is 'on' and set to 30 minutes OR the indicator is 'off' and no time-out is set.
Tool Utility
"Tool" is the in-house utility that interfaces with TSO/ISPF. Certain features such as CUT/Paste and PDSupdate enhance the ISPF Editor. Tool commands are entered on the COMMAND Line.
| TOOL MAIL userid (where userid is the ACF2 logonID of the person to whom you are sending the message) sends mail to another NWRDC TSO User. Begin by editing a member that contains the message that you want to send. On the command line, type: TOOL MAIL userid, and press ENTER. In the upper right-hand corner, you will see a status of "MESSAGE SENT." |
| TOOL PRINT sends current edits session’s data to the printer of your choice. |
| TOOL CUT copies some or all of the current edit session’s data to a clipboard. The line commands C and CC determine the lines copied. |
| TOOL PASTE copies the current clipboard to your current edit session. The line command A or B determine the paste location. |
NOTE: SPIFFY has an enhanced copy and paste capability
Running REXX Programs or CLISTs as Batch Jobs
You can run a REXX program or Clist as a batch job. Instead of waiting at a terminal for your job to run, you can use the terminal to prepare a job containing the commands and data you would have entered at the terminal. In this case, you are using the facilities of TSO/E exactly as if you had submitted the commands individually at the terminal.
JCL for Command Execution
You may execute the program IKJEFT01 or the PROC IKJBATCH. IKJBATCH is necessary if the Clist or REXX uses ISPF datasets. If you are not using ISPF panels, messages or tables, then using IKJEFT01 is all that is necessary. The following JCL statements are required for executing commands in the background. Other statements can be used, but are not required.
| //jobname JOB operands //stepname EXEC PGM=IKJEFT01,PARM='command' //SYSTSPRT DD //SYSTSIN DD |
PARM= is optional and can be used to supply the first (or only) command to be executed. This is used most often when you only execute one command in the step.
SYSTSPRT DD Statement
The SYSTSPRT DD statement is used to control the output from your background job. By specifying different operands on this statement, you can have the output listed on a system printer, placed in a specified data set for later use, or held in a work data set so you can look at it using the OUTPUT command.
SYSTSIN DD Statement
The SYSTSIN DD statement is used to specify that the data to follow consists of executable commands and/or subcommands. For example, to indicate to the system that all data following this statement is to be used as input, until the system encounters an input delimiter, such as the characters /* or the DLM operand, specify:
//SYSTSIN DD *
If any of the input statements start with the characters //, use the DD DATA statement instead.
To indicate to the system that all data following this statement is to be used as input, including statements that start with the characters //, until an input delimiter (/* or DLM) is found, specify:
//SYSTSIN DD DATA
To indicate to the system that all the input data can be found in data set prefix.INPUT.DATA, specify:
//SYSTSIN DD DSNAME=prefix.INPUT.DATA
The SYSTSIN and SYSTSPRT DD statements can refer to a sequential data set or a member of a partitioned data set.
You cannot refer to concatenated data sets on the SYSTSIN DD statement. Each command or subcommand must begin on a separate statement.
When executing the PROC IKJBATCH, the required JCL is:
| //jobname JOB operands //stepname EXEC IKJBATCH //SYSIN DD .......... |
The SYSIN DD statement: See information on SYSTSIN above for SYSIN.
IKJBATCH Examples
Execute REXX/CLIST program.
| //jobname JOB operands //* //STEP01 EXEC PGM=IKJEFT01 //SYSTSPRT DD SYSOUT=A //SYSTSIN DD * Statement one Statement two ... Statement n |
Execute REXX/CLIST member (XAMPLJOB) from library, prefix.LIB.CLIST.
Allocate REXX/CLIST lib to DD SYSPROC.
Concatenate libraries ISPF.USER.CLIST and SYS1.CMDLIB if your CLIST/REXX uses NWRDC CLISTs or commands, (i.e., CLIST:A@FILE, or command:BYE)
| //jobname JOB operands //* //STEP01 EXEC PGM=IKJEFT01,PARM='%XAMPLJOB' //SYSTSPRT DD SYSOUT=H //SYSPROC DD DSN=prefix.LIB.CLIST,DISP=SHR // DD DSN=ISPF.USER.CLIST,DISP=SHR // DD DSN=SYS1.CMDLIB,DISP=SHR //SYSTSIN DD DUMMY |
===========================================================
Execute REXX program (REXXPGM) from library, prefix.REXX.EXEC. Pass two ARGS to REXX program. In this example, the REXX program is expecting two dataset names to be passed. Allocate REXX library to DD SYSPROC.
| //jobname JOB operands //* //STEP1 EXEC PGM=IKJEFT01, // PARM=('%CLISTPGM','''prefix.DSNTIN''','''prefix.DSNTOUT''') //SYSPROC DD DSN=prefix.REXX.EXEC,DISP=SHR //SYSTSPRT DD SYSOUT=A //SYSTSIN DD DUMMY |
Execute CLIST member (XAMPLJOB) from library, prefix.CLIST.LIB. Allocate CLIST library to DD SYSPROC.
| //jobname JOB operands //* //STEP01 EXEC IKJBATCH //SYSPROC DD DSN=prefix.CLIST.LIB,DISP=SHR //* //SYSIN DD * %XAMPLJOB |
=====================================================================
THE PROC IKJBATCH (Use this if ISPF datasets are needed).
| //IKJAUTO PROC //NWRISPF EXEC PGM=IKJEFT01,DYNAMNBR=200 //*TEPLIB DD DISP=SHR,DSN=ISPF.USER.LOAD //SYSPROC DD DISP=SHR,DSN=ISPF.USER.CLIST //SYSUADS DD DISP=SHR,DSN=SYS1.UADS //SYSLBC DD DISP=SHR,DSN=SYS1.BRODCAST //SYSHELP DD DISP=SHR,DSN=SYS1.HELP //* //* WORK DATASETS FOR ISPF //ISPLST1 DD DISP=NEW,UNIT=VIODEV,SPACE=(CYL,(1,3)), // DCB=(LRECL=121,BLKSIZE=1210,RECFM=FBA) //ISPLST2 DD DISP=NEW,UNIT=VIODEV,SPACE=(CYL,(1,3)), // DCB=(LRECL=121,BLKSIZE=1210,RECFM=FBA) //ISPCTL0 DD DISP=NEW,UNIT=VIODEV,SPACE=(CYL,(1,5)), // DCB=(LRECL=80,BLKSIZE=3120,RECFM=FB) //ISPCTL1 DD DISP=NEW,UNIT=VIODEV,SPACE=(CYL,(1,5)), // DCB=(LRECL=80,BLKSIZE=3120,RECFM=FB) //ISPCTL2 DD DISP=NEW,UNIT=VIODEV,SPACE=(CYL,(1,5)), // DCB=(LRECL=80,BLKSIZE=3120,RECFM=FB) //ISPWRK1 DD DISP=NEW,UNIT=VIODEV,SPACE=(CYL,(1,3)), // DCB=(LRECL=256,BLKSIZE=2560,RECFM=FB) //ISPWRK2 DD DISP=NEW,UNIT=VIODEV,SPACE=(CYL,(1,3)), // DCB=(LRECL=256,BLKSIZE=2560,RECFM=FB) //* //* PANEL LIBS FOR ISPF //ISPPLIB DD DISP=SHR,DSN=ISPF.USER.PLIB //* MSG. LIBS FOR ISPF //ISPMLIB DD DISP=SHR,DSN=ISPF.USER.MLIB //* SKEL. LIBS FOR ISPF //ISPSLIB DD DISP=SHR,DSN=ISPF.USER.SLIB //* TABL. LIBS FOR ISPF //ISPTLIB DD DISP=SHR,DSN=ISPF.USER.TLIB //* TABL. LIBS FOR ISPF UPDATE //ISPTABL DD DISP=SHR,DSN=ISPF.USER.TLIB //SYSPRINT DD SYSOUT=A //SYSTSPRT DD SYSOUT=A //SYSTSIN DD DDNAME=SYSIN |
JES Spooled Output and IOF Access Security
The access to spooled output via IOF (TSO) is controlled by ACF2 security.
First, three preliminary tests are performed:
- If the jobname begins with the logon ID of the IOF user, full access is allowed.
- If the job was run at NWRDC with the logon ID of the IOF user, full access is allowed.
- If a sysout has an external writer name equal to the IOF user logon ID, full access to the sysout is allowed.
If none of the above tests are met, then job access is governed by whether or not the job was run at NWRDC.
For jobs run at NWRDC, JES generates a "dataset name" like the following for each piece of spooled output:
"$JES.iii$JES.secgrp.ssubgrp.logonid"
where:
- iii is the 3 character institution code,
- secgrp is the 4 character security group,
- ssubgrp is the 4 character security subgroup, and
- logonid is the logon ID, all coming from the logon ID which ran the job.
This generated dataset name is then tested against the ACF2 iii$JES rule.
The result of that test determines whether access is allowed.
For jobs NOT run at NWRDC, JES generates a "dataset name" for each piece of spooled output like:
"$JES.$RMTnnnn.jesnodeid.jobname"
where:
- nnnn is the remote ID to which the job is routed,
- jesnodeid is the JES nodeID where the job ran, and
- jobname is the jobname.
This generated dataset name is then tested against the ACF2 iii$nnnn rule which corresponds to that remote ID.
The result of that test determines whether access is allowed.
In either case, the important concept is that for JES spooled output, a predictable generated "dataset name" is tested against the appropriate rule, just like ACF2 tests access for any dataset.
One other note: within the rule itself, the ACF2 access levels have the following meanings as they pertain to JES spooled output:
| ACF2, authority | Allows IOF user to |
| EXEC | View |
| READ | Route |
| WRITE | Cancel |
| ALLOC | Change jobclass before execution |
Unload To Data Set (UD)
UD is an IOF line command.
With this utility, you can save the entire output or just selected portions to a dataset. The only thing you need to decide is are you snapping to a PDS or a sequential file. If you want the data you are sending to be written to a PDS – allocate the PDS before you enter the UD command. The most common allocation parameters are RECFM=VBA,LRECL=255,BLOCKSIZE=3600. If it is a sequential dataset – the UD command will allocate it for you.
Here are the steps to send the entire output to a dataset; this is especially useful if you want to keep a copy of your JCL.
- Type UD on the command line next to the job in IOF and hit enter. (A dialog box will appear to the right of the job).
- Type in the dataset name
- Hit enter
- Here are the steps to send selected output to a dataset.
- Type S on the command line next to the job in IOF and hit enter.
- Type UD on the command line next to the DDNAME that you want to write to a dataset
- Type in the dataset name
- Hit enter
How NWR uses the UD command.
We establish PDS’s for the retention of our Compile-for-production COBOL and LINKEDIT listings. The member name is the name of the program. The DSN identifies the application.
We establish PDS’s for the retention of the output of the batch jobs that install a purchased or upgraded product. The DSN identifies the product; the member name is the job number. A manually kept install log associates the job number with the install step.
US is another IOF line command.
This command will snap the indicated item to a SYSOUT dataset. There will be a prompt asking for the appropriate destination, copies and more.
Data Set Recovery
From ISPF Option 6 issue the following command
HLIST DATASET('xx.xxxx.xxxxx') BCDS
Lists the number of backups available for recovery
HRECOVER 'xx.xxxx.xxxxx' newname('xx.xxx.xxxxx.xxx') gen(0)
Recovers data set to ‘newname’ and the most current
backup gen(0)
