View Only
  • 1.  Need an example of a OPS/MVS Rule for dealing with CICS SOS Condition

    Posted Feb 22, 2017 04:39 PM

    Does anybody have an example of a rule on how to deal with a CICS region undergoing a short of storage condition? I am looking for a rule that get triggered by DFHSM0131. Should message DFHSM0132 pops up within 15 seconds saying that the SOS condition has been relieved, then we return and do nothing. My issue has been trying to getting the rule to pause and wait the 15 secs. Thanks in advance for your input.

  • 2.  Re: Need an example of a OPS/MVS Rule for dealing with CICS SOS Condition

    Posted Feb 23, 2017 07:03 AM

    How about starting with something like this and building other automation around it?


    In msg rule for DFHSM0131 do 2 things. 

        Set an unique Dynamic TOD rule to run in 15 seconds and take the action you want if SOS is not relieved (maybe this runs a REXX exec?)

        Set a global (ie: GLVJOBID.DFHSM0131) and set its value to the name of the DYNTOD rule you created. Have the termination step of the DYNTOD delete the global.


    Msg rule for DFHSM0132

        Get GLVJOBID.DFHSM0131 and if there is a value set, it must be the DYNTOD RULE name.  DISABLE the DYNTOD RULE.  



  • 3.  Re: Need an example of a OPS/MVS Rule for dealing with CICS SOS Condition

    Posted Feb 23, 2017 10:31 AM

    Hi Sal,


    Thanks for your quick response. I am a novice to OPS and appreciate all of your help. I did realize I was going to have to set up a global to see if we were already kicked off. Any tips on how I can create a timer to pop at 15 secs and then I can check that global setting?


    Best regards,


    L. Tom Chen

    Systems Maintenance Services, Inc.



    (626) 840-8983



  • 4.  Re: Need an example of a OPS/MVS Rule for dealing with CICS SOS Condition

    Posted Feb 24, 2017 02:44 PM

    Let me know if you want to discuss offline.                            
    Here is an example of some code - you must TEST IT!!!! I DID NOT TEST!
    This only kicks off the 15 sec timer to run your rexx and sets         
    a global with the name of the rule for the 2nd rule to utilize.        
    To make sure your dynamic rule always a a unique name, I have included
    a DYNCNT function.  If 2 regions go SOS at same time, and you dont     
    use a unique dynamic rule name, they will step on each other.          
    DYNCNT is one way to do this.                                          
    Code like this would go into your message rule for SOS:                
     create your own 'myrexx' to run if the timer pops at 15 seconds       
     Watch you QUOTES in building the dynamic rules - they are tricky


    myglobal = 'GLVJOBID.CICSSOS'  /*call whatever you want*/               
    dynname  = 'ABC'DYNCNT()  /* ABC is example - use any 3 or less chars*/
    CALL OPSCLEDQ             /*clear external data queue*/                 
    QUEUE  ")TOD *+15 SECONDS"                                              
    QUEUE  ")PROC"                                                          
    QUEUE  "ADDRESS OSF 'OI myrexx'"                          
    QUEUE  ")TERM"                                                          
    QUEUE  "xx = OPSVALUE('"myglobal"','R'")"                      
    QUEUE  "RETURN"                                                         
    ADDRESS "AOF" "ENABLE *DYNAMIC."dynname                                 
    xx = OPSVALUE(myglobal,'U',dynname) /*dynname in global*/               


     /* So that you generate a unique DYNAMIC rule when necessary*/         
    /* MAKE SURE   YOUR DYNRULE PREFIX IS 3 CHARS OR LESS                 */
    /* EXAMPLE  : XX = DYNCNT()  - RETURNS A NUMBER (1 - 99998)           */
    /* If you think 99999 is too small for your shop, you need to adjust  */
    /*  to avoid collisions. But it shortens your prefix.                 */
      glob    = 'GLVTEMP1.DYNCNT'                                           
      cnt     = OPSVALUE(glob,'A',1)                                        
      IF cnt >= '99999' THEN                                                
         xx = OPSVALUE(glob,'U',0) /*reset*/