Changing system symbols

System symbols can be changed, added, or deleted by the SETLOAD xx,IEASYM command (see z/OS MVS System Commands for full details) and can be changed or added by the IEASYMU2 program. Updated symbols cannot be transported to other systems and therefor may not be usable, for example, for job JCL interpretation or automatic restart manager (ARM) processing. Update symbols with care. If you are not careful in how you update symbols, you could end up with different tasks using different values for a symbol you have changed. For example, if you have a long-running REXX exec, it could obtain the value of a symbol when it starts, and then continue to use that value thereafter. So even though you have updated the value of the symbol, that REXX exec will continue to use the old value. One safe use of updated symbols is for symbols that are used only in catalog aliases.

When you update symbols, the entire system symbol table is rebuilt, and the old system symbol table remains in storage; this storage is never freed, for system integrity reasons. As a result, you can avoid wasting common storage if you do a group of updates together instead of doing individual updates. The system symbol table is in subpool 245 (ESQA) and can be as large as 57088 bytes. The size depends upon the number of symbols that you have defined. In general, the number of bytes in the table can be calculated as the sum of:
  • 4
  • Number_Of_Symbols multiplied by 16
  • Length of every symbol name (including the leading ampersand and trailing period)
  • Length of the value for every symbol
The size of the current system symbol table can be viewed by the DISPLAY SYMBOLS,SUMMARY command. An example of the command output is:
SY1  IEA994I STATIC SYSTEM SYMBOL INFO   
SYMBOLS DEFINED: 12                      
CURRENT TABLE SIZE: 344 BYTES            
MAX TABLE SIZE: 57088 BYTES   

Also, z/OS® V2R1 provides CHECK(IBMSUP,SUP_SYMBOL_TABLE_SIZE) as part of the IBM® Health Checker for z/OS to let you view the current size and to let you set a threshold so that you are alerted if the current size approaches the maximum size too closely.

The IEASYMU2 program is provided in SYS1.LINKLIB in z/OS V2R1 as a replacement for the IEASYMUP program, which had been provided only by OBJ in SYS1.SAMPLIB and with documentation only in the IBM Redbook SG24-5451. As of z/OS V2R1, IEASYMUP must not be used. If the IEASYMUP OBJ provided in SYS1.SAMPLIB is re-linked and then executed, it will indicate that you must use either the new SETLOAD xx,IEASYM command or the IEASYMU2 program. Do not use a pre-z/OS V2R1 IEASYMUP on a z/OS V2R1 system.

IBM recommends that you not use both the IEASYMU2 program and the SETLOAD xx,IEASYM command unless you do so intentionally and carefully. Updates made by the IEASYMU2 program are temporary and will be lost if you subsequently issue the SETLOAD xx,IEASYM command unless you have made corresponding updates in the appropriate IEASYMxx parmlib members. You could use RACF® profiles to enforce that either IEASYMU2 or SETLOAD xx,IEASYM not be used. The SETLOAD xx,IEASYM command is protected by the MVS™.SETLOAD.IEASYM entity in the OPERCMDS class; the IEASYMU2 program is protected by IEASYMUP.symbolname entities in the FACILITY class.

The IEASYMU2 program must be invoked in problem state. To execute the IEASYMU2 program, run the following JCL (noting that IEASYMU2 will be in the LNKLST so no joblib or steplib should be used):
//IEASYMU2 JOB ...
//IEASYMU2 EXEC PGM=IEASYMU2,PARM='...'
The input parameter is specified using the PARM keyword on the EXEC card, in the format:
PARM=′SYMNAME1=VALUE1 SYMNAME2=VALUE2 ...SYMNAMEN=VALUEN′
where:
  • All updates by IEASYMU2 are controlled by RACF facility class entity IEASYMUP.symbolname (without the leading ampersand and trailing period). If the security product does not grant UPDATE access to the requester for every symbol requested by the job, the job does not complete successfully and the symbol table is not updated.
  • The name of each SymnameN should not contain the leading & or the trailing ..
  • The symname is not thoroughly checked as a valid symbol as in IEASYMxx parmlib processing or SETLOAD xx,IEASYM command processing.
  • The first symname=value specification must begin at the first character of the parameter. Each symname=value specification must be separated from the preceding one by exactly one blank.
  • There must be no trailing blanks at the end of the parm string.
  • The value must not have blanks.
  • No translation to uppercase is done by the processing, so be careful to put everything in uppercase as needed.
  • You can change the values of symbols (including the length).
  • You can add new symbols.
  • You cannot have an & as part of the symbol name
  • You can use symbolics in defining the value if you invoke this as a started task or started job. In this case, the symbols are resolved by the system before IEASYMU2 runs.
  • When there are symbolics used in defining the value that are not resolved by the system before IEASYMU2 runs (perhaps because you ran this as a batch job):
    • They must be resolvable by the system symbol table that existed before this running of IEASYMU2.
    • The resolved value must be no longer than the initial unresolved value.
    • The input parameter area can be modified by the IEASYMU2 processing.
  • Start of changeThe specified symbol name must be no longer than 16 characters (as it does not contain the leading & or the trailing .). End of change
  • You cannot specify the system-defined symbols SYSPLEX, SYSNAME, SYSCLONE, SYSR1, SYSALVL, SYSOSLVL.
  • The specified value must be no longer than the specified symbol name plus one unless the sybol name ends with an underscore, in which case the value must be no longer than 44.
  • Less syntax checking of operands might be done for the IEASYMU2 program than is done for the SETLOAD xx,IEASYM command.
  • If the parameter string exceeds 100 bytes (or even if it does not), you can use the PARMDD (also known as LONGPARM) support of z/OS V2R1 to specify the parameters within the DD identified by using PARMDD=ddname on the EXEC PGM= statement of the JCL. Care must be taken if using PARMDD, due to the PARMDD rule of stripping off all trailing blanks on a given line. Thus:
    • The first symname=value pair must start in column 1 of the first line
    • Do not split a symname=value pair across lines (primarily for clarity)
    • When continuing onto a second or subsequent line, begin that line with the symname=value pairs starting in column 2
    • For example, (the first line of the example is not part of your input; it is just used for showing the starting column)
      1--------------------------------
      SYMNAME1=VALUE1 SYMNAME2=VALUE2
       SYMNAME3=VALUE3
       SYMNAME4=VALUE4 SYMNAME5=VALUE5
  • You cannot provide more than 255 input symbols
  • The resulting system symbol table must not exceed 57088 bytes.
  • Output messages are written by WTO with routing code 11 and MCSFlag indicating hardcopy-only.
  • As with the SETLOAD xx,IEASYM command, a change to the system symbol table results in sending ENF signal 73 and also rerunning CHECK(IBMSUP,SUP_SYMBOL_TABLE_SIZE).
  • Messages IEASYMU01I, IEASYMU02I, IEASYMU03I, and IEASYMU04I might be issued.

IEASYMU2 return codes

In the return code descriptions in Table 1, xxxxxx identifies which input symbol is the source of the error (000001 corresponds to the first input symbol, and so on).
Table 1. IEASYMU2 return codes
Return code Explanation
0 Success
00000008 Missing parameter.

No parameters were provided. Correct the input.

xxxxxx0C Symbol name contains ampersand

The symbol name has an ampersand; this is not allowed. Correct the input.

xxxxxx10 Bad symbol name length

Start of changeA symbol name length is not in the range 1-16. Correct the input.End of change

xxxxxx14 Bad symbol value length

A symbol value length is longer than the symbol name length plus one (when the name does not end with an underscore) or 44 (when the name does end with an underscore). Correct the input.

00010018 Too many symbols

More than 255 input symbols were specified. Correct the input.

xxxxxx1C Reserved symbol

An attempt to define or change a reserved symbol (one of the symbols defined by z/OS - SYSPLEX, SYSNAME, SYSCLONE, SYSR1, SYSALVL, SYSOSLVL). Correct the input.

xxxxxx20 RACF denied access

RACF denied access to this symbol. Correct the input or contact the security administrator to gain access.

xxxxxx24 Symbol value contains ampersand after substitution

The symbol value still has an ampersand after all symbol substitution has been done; this is not allowed. Correct the input.

xxxxxx28 Too much symbol data

The resulting symbol table would exceed the maximum symbol table size. Correct the input.

xxxxxx2C Bad symbol value length due to a substitution

The symbol value specification contained a symbol or symbols and the resolved symbol value was longer than the symbol value specification - this is not allowed.

xxxxxx30 Underscore conflict
The symbol violated one of the following rules:
  • An existing symbol cannot be a substring of a new symbol if the next character of the new symbol is an underscore.
  • A new symbol cannot be a substring of an existing symbol if the next character of the existing symbol is an underscore.
00000FFF Improper release

The IEASYMU2 program cannot be used on this release of z/OS. Use IEASYMU2 on z/OS V2R1 or later.