IBM Support

MCH2804 - CL Source to Change the Ownership of an Object

Troubleshooting


Problem

To write a CL program to change the ownership of an object, follow the instructions in this document.

Resolving The Problem

A user profile can own a limited number of objects (approximately 10,000,000 at R540 and approximately 50,000,000 at R610 and above). When this limit is exhausted, no more objects can be owned by the user profile. An attempt to make the profile an owner of additional objects results in message MCH2804 - Tried to go larger than storage limit for object &1. If a user profile contains too many owned objects, there is no easy way to remove objects from the profile (particular when dealing with more than a million objects). The iSeries provides a mechanism using the following commands to change the owner of an object:

CHGOBJOWN
CHGOWN
WRKOBJOWN


These commands require manual intervention. However, a CL program can be created to change object ownership. Following is the source for the CL program. The source was taken from an OS/400 source file. This source can be pasted into an OS/400 source file using the WRKPDM command. Comments residing the source explains the setup for the program and requirements for running.

 
Caution: This is a sample program and was created and tested "as-is." The IBM Rochester Support Center does not provide direct support on this program.


0001.00 /*********************************************************************/      
0002.00 /* Q##CHGOWN IS A TEST PROGRAM THAT MAY BE USED TO CHANGE AN         */      
0003.00 /* OBJECT'S OWNERSHIP. THIS SOURCE CODE HAS NOT BEEN APPROVED BY IBM */      
0004.00 /* FOR SOURCE CODE HAS NOT BEEN APPROVED BY IBM FOR GENERAL          */      
0005.00 /* DISTRIBUTION.                                                     */      
0006.00 /*  THE PROGRAM IS CALLED WITH THE FOLLOWING PARAMETERS:             */      
0007.00 /*                                                                   */      
0008.00 /*  A.NAME OF THE USER PROFILE THAT CONTAINS OBJECT OWNERSHIP        */      
0009.00 /*  B.NAME OF USER PROFILE THAT IS TO RECEIVE OBJECT OWNERSHIP.      */      
0010.00 /*  C.NUMBER OF OBJECTS WHOSE AUTHORITY WILL BE CHANGED.             */      
0011.00 /*                                                                   */      
0012.00 /* CRTCLPGM REQUIREMENTS:                                            */      

0013.00 /*                                                                   */      
0014.00 /*  THE SOURCE FOR THIS PROGRAM CONTAINS A DCLF COMMAND WHICH        */      
0015.00 /*  REFERENCES FILE (QGPL/Q##CHGOWN).                                */      
0016.00 /*                                                                   */      
0017.00 /*  THIS OUTFILE MUST EXIST IN QGPL BEFORE THE PROGRAM WILL          */      
0018.00 /*  COMPILE WITHOUT ERRORS. THE FILE MAY BE CREATED VIA THE          */      
0019.00 /*  FOLLOWING:                                                       */      

0020.00 /*                                                                   */          
0021.00 /*  DSPUSRPRF USRPRF(QPGMR)  TYPE(*OBJOWN) OUTPUT(*OUTFILE)          */          
0022.00 /*     OUTFILE(QGPL/Q##CHGOWN)                                       */          
0023.00 /*                                                                   */          
0024.00 /*THIS PROGRAM DOES THE FOLLOWING:                                   */          
0025.00 /*                                                                   */          
0026.00 /*  A.CREATES USER PROFILE NAMED Q##CHGOWN IF DOES NOT EXIST.        */          
0027.00 /*    THIS PROFILE IS USED TO GENERATE OUTFILE REFERENCED IN STEP B. */          
0028.00 /*                                                                   */          
0029.00 /*  B.CREATES DATA BASE FILE Q##CHGOWN IF IT DOES NOT EXIST. THIS    */          
0030.00 /*    FILE IS USED TO COLLECT A LIST OF ALL OBJECTS OWNED BY A       */          
0031.00 /*    USER PROFILE. THIS IS DONE VIA THE FOLLOWING COMMAND:          */          

0032.00 /*                                                                   */          
0033.00 /*    DSPUSRPRF USRPRF(Q##CHGOWN) TYPE(*OBJOWN) OUTPUT(*OUTFILE) +   */          
0034.00 /*       OUTFILE(QGPL/Q##CHGOWN).                                   */            
0035.00 /*                                                                   */          
0036.00 /*  C.SETS MAXIMUM NUMBER OF RECORDS FOR FILE Q##CHGOWN TO *NOMAX.   */          
0037.00 /*                                                                   */          
0038.00 /*  D.CREATES MESSAGE FILE QGPL/Q##CHGOWN IF IT DOES NOT EXIST.     */            
0039.00 /*                                                                   */        

0040.00 /*  E.DISPLAYS OBJECTS OWNED BY USER PROFILE TO AN OUTFILE           */    
0041.00 /*                                                                   */    
0042.00 /*    DSPUSRPRF USRPRF(**********) TYPE(*OBJOWN) OUTPUT(*OUTFILE) +  */    
0043.00 /*       OUTFILE(QTEMP/USRPRFOWN)                                    */    
0044.00 /*                                                                   */    
0045.00 /*  F.CHANGES OBJECT OWNERSHIP FOR THE REQUESTED NUMBER OF OBJECTS. */    
0046.00 /*    THE PROGRAM AT THIS POINT DOES NOT PROVIDE A MEANS FOR         */    
0047.00 /*    SELECTING WHICH OBJECTS TO CHANGE. SELECTION IS BASED ON       */    
0048.00 /*    ORDINAL POSITION IN THE DATA BASE FILE.                       */      
0049.00 /*                                                                   */    
0050.00 /*  G.GENERATES MESSAGES INDICATING THE NUMBER OF OWNED OBJECTS AND  */    
0051.00 /*    THE NUMBER OF OBJECTS WHOES OWNERSHIP IS TRANSFERRED.          */    
0052.00 /*                                                                   */    

0053.00 /*  H.DELETES ALL OBJECTS CREATED BY THIS PROGRAM EXCEPT             */    
0054.00 /*    MESSAGE FILE QGPL/Q##CHGOWN.                                   */    
0055.00 /*                                                                   */    
0056.00 /*PROGRAM ACTIVATION                                                 */    
0057.00 /*                                                                   */    
0058.00 /*  THIS PROGRAM MAY BE ACTIVATED VIA A CALL WITH THE FOLLOWING      */    
0059.00 /*   PARAMETERS:                                                     */  

0060.00 /*                                                                   */      
0061.00 /*    CALL   QGPL/Q##CHGOWN   (FROM_PRF   TO_PRF  NUM_TO_CHG)        */      
0062.00 /*                                                                   */      
0063.00 /*       "NOTE" NUM_TO_CHG MUST NOT BE INCLOSED IN QUOTES. IF        */      
0064.00 /*        NUM_TO_CHG IS ZERO THE PROGRAM WILL PROVIDE THE NUMBER     */      
0065.00 /*        OBJECTS OWNED BY THE FROM_PRF WITHOUT CHANGING OBJECT      */      
0066.00 /*        OWNERSHIP.                                                 */      
0067.00 /*                                                                   */      
0068.00 /* THE FOLLOWING ARE INSTRUCTION FOR OBTAINING OBJECT OWNERSHIP AND  */      
0069.00 /* AUTHORIZATION INFORMATION FROM A USER PROFILE USING STRSST.       */      
0070.00 /*                                                                   */      
0071.00 /*    A.STRSST                                                       */      

0072.00 /*    B.OPTION 1 - START A SERVICE FUNCTION                          */      
0073.00 /*    C.OPTION 4 - DISPLAY/ALTER/DUMP                                */      
0074.00 /*    D.OPTION 1 - DISPLAY ALTER STORAGE                             */      
0075.00 /*    E.OPTION 1 - MACHINE INTERFACE (MI) OBJECT                     */      
0076.00 /*    F.OPTION 8 - USER PROFILE (08)                                 */      
0077.00 /*    G.OPTION 1 - FIND BY OBJECT NAME                               */      
0078.00 /*    H.ENTER THE NAME OF THE USER PROFILE TO BE CHANGED.            */      
0079.00 /*    I.PRESS ENTER. THEN PRESS AGAIN TO CONTINUE.                   */    

0080.00 /*    J.THE USER PROFILE IS DISPLAYED. PAGE DOWN TO CONTROL ADDRESS  */    
0081.00 /*      0130. RECORD THE CONTENTS ACCORDINGLY:                       */    
0082.00 /*                                                                   */    
0083.00 /*      0130    XXXXXXXX XXXXXXXX      XXXXXXXX        XXXXXXXX      */    
0084.00 /*                                                                   */    
0085.00 /*              # OWNED  # AUTHORIZED  # OBJECTS       # FREE        */    
0086.00 /*              OBJECTS  OBJECTS       OWNED WHICH     ENTRIES       */    
0087.00 /*                                     OTHERS HAVE                   */    
0088.00 /*                                     BEEN AUTHORIZED               */    
0089.00 /*    K.SAVE THIS INFO FOR LATER, EXIT SST                           */    
0090.00 /*                                                                   */    
0091.00 /*                                                                   */    
0092.00 /*********************************************************************/    

0093.00                                                                            
0094.00 QSYS/PGM          PARM(&FRMUSRPRF  +                                      
0095.00                        &TOOWNUSRP  +                                      
0096.00                        &RVKOWNNUM)                                        
0097.00                                                                            
0098.00 DCLF       FILE(QGPL/Q##CHGOWN)   /*GET VARIABLE FIELD               */    
0099.00                                   /* NAMES FOR                       */    

0100.00                                    /*FILE CREATED BY DSPUSRPRF       */            
0101.00                                    /* TYPE(*OBJOWN)                  */            
0102.00                                                                                    
0103.00  /*                                                                  */            
0104.00  /********************************************************************/            
0105.00  /*                                                                  */            
0106.00  /*   DECLARE PARAMETER VARIABLES.                                   */            
0107.00  /*                                                                  */            
0108.00  /********************************************************************/            
0109.00  DCL &FRMUSRPRF    TYPE(*CHAR) LEN(10) /* REQUESTED FUNCTION         */            
0110.00  DCL &TOOWNUSRP    TYPE(*CHAR) LEN(10) /* PROGRAM CALLED BEFORE/AFTER*/            
0111.00  DCL &RVKOWNNUM    TYPE(*DEC)  LEN(15 5) /*NUMBER OF OBJECTS WHOSE   */            

0112.00                                          /* OWNERSHIP WILL BE CHANGED*/            
0113.00  /********************************************************************/            
0114.00  /*                                                                  */            
0115.00  /*   DECLARE LOCAL WORK VARIABLES                                   */            
0116.00  /*                                                                  */            
0117.00  /********************************************************************/            
0118.00                                                                                    
0119.00  DCL  &USRPRFCRT    TYPE(*DEC)  LEN(15 5) VALUE(0)                            

0120.00  DCL  &DBFILECRT    TYPE(*DEC)  LEN(15 5) VALUE(0)                        
0121.00  DCL  &OWN#TOCHG#   TYPE(*DEC)  LEN(15 5) VALUE(0)                        
0122.00  DCL  &USRPRFOWN#   TYPE(*DEC)  LEN(15 5) VALUE(0)                        
0123.00  DCL  &OWN#TOCHG    TYPE(*DEC)  LEN(15 5) VALUE(0)                        
0124.00  DCL  &MSGDTAAREA   TYPE(*CHAR) LEN(32)                                  
0125.00                                                                          
0126.00                                                                          
0127.00                                                                          
0128.00  /********************************************************************/  
0129.00  /*                                                                  */  
0130.00  /*   GET NUMBER OF OBJECTS WHOSE OWNERSHIP IS TO BE CHANGED         */  
0131.00  /*                                                                  */  
0132.00  /********************************************************************/  

0133.00                                                                          
0134.00  CHGVAR     VAR(&OWN#TOCHG) VALUE(&RVKOWNNUM)                            
0135.00                                                                          
0136.00  /********************************************************************/  
0137.00  /*                                                                  */  
0138.00  /* CREATE A MESSAGE FILE AND MESSAGE DESCRIPTION IN QTEMP           */  
0139.00  /*                                                                  */  
0140.00  /********************************************************************/    
0141.00                                                                            
0142.00   CRTMSGF MSGF(QTEMP/Q##CHGOWN)                                            
0143.00   MONMSG  MSGID(CPF0000)                                                    
0144.00                                                                            
0145.00   RMVMSGD    MSGID(USR3410) MSGF(QTEMP/Q##CHGOWN)                          
0146.00   MONMSG  MSGID(CPF0000)                                                    
0147.00                                                                            
0148.00   RMVMSGD    MSGID(USR3420) MSGF(QTEMP/Q##CHGOWN)                          
0149.00   MONMSG  MSGID(CPF0000)                                                    
0150.00                                                                            
0151.00   ADDMSGD                 MSGID(USR3410) MSGF(QTEMP/Q##CHGOWN) +            
0152.00                           MSG('User Profile &1 contained &2 +              

0153.00                           objects.') FMT((*CHAR 10) (*BIN 4))              
0154.00   MONMSG  MSGID(CPF0000)                                                    
0155.00                                                                            
0156.00              ADDMSGD    MSGID(USR3420) MSGF(QTEMP/Q##CHGOWN) +              
0157.00                           MSG('The ownership of &5 object/s were +          
0158.00                           transferred from user profile &1 to user +        
0159.00                           profile &2.') SECLVL('The total number of +                                                                                        

0160.00                           objectw whose ownership was to be +              
0161.00                           transferred was &4. The number of owned +        
0162.00                           objects in user profile &1 was &3. The +        
0163.00                           total number of object ownerships +              
0164.00                           transferred from user profile &1 to user +      
0165.00                           profile &2 was &5.') FMT((*CHAR 10) +            
0166.00                           (*CHAR 10) (*BIN 4) (*BIN 4) (*BIN 4))          
0167.00   MONMSG  MSGID(CPF0000)                                                  
0168.00                                                                            
0169.00  /********************************************************************/    
0170.00  /*                                                                  */    
0171.00  /* CREATE USER PROFILE Q##CHGOWN IF IT DOES NOT EXIST               */    
0172.00  /*                                                                  */    

0173.00  /********************************************************************/    
0174.00                                                                            
0175.00   CRTUSRPRF  USRPRF(Q##CHGOWN) TEXT('User Profile for +                    
0176.00                           program Q##CHGOWN')                              
0177.00   MONMSG MSGID(CPF0000) EXEC(CHGVAR &USRPRFCRT VALUE(&USRPRFCRT + 1))      
0178.00                                    
/*SET USER PROFILE NOT CREATED FLAG */  
0179.00                                                                              

0180.00  /********************************************************************/    
0181.00  /*                                                                  */    
0182.00  /* DETERMINE IF DATA BASE FILE QTEMP/Q##CHGOWN EXIST                */    
0183.00  /*                                                                  */    
0184.00  /********************************************************************/    
0185.00                                                                            
0186.00  
CRTPF FILE(QGPL/Q##CHGOWN) SIZE(*NOMAX)                               
0187.00   MONMSG MSGID(CPF0000) EXEC(CHGVAR &DBFILECRT VALUE(&DBFILECRT + 1))      
0188.00                                            
/*SET FILE DOES NOT EXIST FLAG*/     
0189.00                                                                            
0190.00  /********************************************************************/    
0191.00  /*                                                                  */    
0192.00  /* GENERATE OUTFILE FOR OWNED OBJECTS AND SET SIZE TO *NOMAX        */    

0193.00  /*                                                                  */    
0194.00  /********************************************************************/    
0195.00                                                                            
0196.00    DSPUSRPRF USRPRF(Q##CHGOWN) TYPE(*OBJOWN) OUTPUT(*OUTFILE) +            
0197.00       OUTFILE(QGPL/Q##CHGOWN)                                              
0198.00                                                                            
0199.00    CHGPF FILE(QGPL/Q##CHGOWN) SIZE(*NOMAX)                                    

0200.00                                                                          
0201.00  /********************************************************************/  
0202.00  /*                                                                  */  
0203.00  /* POPULATE OUTFILE WITH RECORDS FOR OBJECTS OWNED BY PROFILE       */  
0204.00  /*                                                                  */  
0205.00  /********************************************************************/  
0206.00                                                                          
0207.00    DSPUSRPRF USRPRF(&FRMUSRPRF) TYPE(*OBJOWN) OUTPUT(*OUTFILE) +        
0208.00       OUTFILE(QGPL/Q##CHGOWN)                                            
0209.00                                                                          
0210.00  /********************************************************************/  
0211.00  /*                                                                  */  
0212.00  /*   PROCESS INPUT USER PROFILE                                     */  

0213.00  /*                                                                  */  
0214.00  /********************************************************************/  
0215.00  READOWNREC:                                                            
0216.00    CHGVAR &USRPRFOWN# VALUE(&USRPRFOWN# + 1)                            
0217.00    RCVF                         /*READ A RECORD FROM THE FILE     */    
0218.00                                 /*  QGPL/USRPRFOWN                */    
0219.00    MONMSG  MSGID(CPF0000) EXEC(GOTO CMDLBL(SENDMESSAG))                  

0220.00    GOTO    CHGPRFOWN            /* CHANGE OBJECT OWNER IF REQUIRED*/  
0221.00                                                                        
0222.00  READNXTREC:                                                          
0223.00                                                                        
0224.00    GOTO    READOWNREC           /* GO READ NEXT RECORD            */  
0225.00                                                                        
0226.00                                                                        
0227.00  SENDMESSAG:                                                          
0228.00                                                                        
0229.00     CHGVAR  %SST(&MSGDTAAREA 1 10) VALUE(&FRMUSRPRF)                  
0230.00     CHGVAR  %BIN(&MSGDTAAREA 11 4) VALUE(&USRPRFOWN#)                  
0231.00                                                                        
0232.00                                                                        

0233.00     QSYS/SNDPGMMSG MSGID(USR3410) MSGF(QTEMP/Q##CHGOWN) +              
0234.00                           MSGDTA(&MSGDTAAREA) +                        
0235.00                           MSGTYPE(*COMP)                              
0236.00                                                                        
0237.00     CHGVAR  %SST(&MSGDTAAREA 11 10) VALUE(&TOOWNUSRP)                  
0238.00     CHGVAR  %BIN(&MSGDTAAREA 21 4) VALUE(&USRPRFOWN#)                  
0239.00     CHGVAR  %BIN(&MSGDTAAREA 25 4) VALUE(&RVKOWNNUM)                  

0240.00     CHGVAR  %BIN(&MSGDTAAREA 29 4) VALUE(&OWN#TOCHG#)                      
0241.00                                                                            
0242.00     QSYS/SNDPGMMSG MSGID(USR3420) MSGF(QTEMP/Q##CHGOWN) +                  
0243.00                           MSGDTA(&MSGDTAAREA) +                            
0244.00                           MSGTYPE(*COMP)                                  
0245.00                                                                            
0246.00  GOTO TERMINATE                                                      
0247.00                                                                            
0248.00  CHGPRFOWN:                                                                
0249.00  /********************************************************************/    
0250.00  /*                                                                  */    
0251.00  /*   CHANGE OBJECT OWNERSHIP BASED ON THE NUMBER OF OBJECTS WHOSE   */    
0252.00  /*    OWNERSHIP IS TO BE CHANGED. SEE VARIABLE &RVKOWNNUM.          */    

0253.00  /*                                                                  */    
0254.00  /********************************************************************/    
0255.00                                                                            
0256.00       QSYS/IF         COND(&OWN#TOCHG > 0) +                              
0257.00        THEN(QSYS/DO)                                                      
0258.00          CHGOBJOWN  OBJ(&OOLIB/&OOOBJ) OBJTYPE(&OOTYPE) +                  
0259.00                   NEWOWN(&TOOWNUSRP)                                      

0260.00          CHGVAR &OWN#TOCHG  VALUE(&OWN#TOCHG - 1) /* DECREMENT COUNT   */    
0261.00          CHGVAR &OWN#TOCHG# VALUE(&OWN#TOCHG# + 1) /* INCREMENT COUNT   */    
0262.00        QSYS/ENDDO                 /* *RSTCODE COMPLETE - EXIT          */    
0263.00                                                                              
0264.00      GOTO READNXTREC            /* RETURN TO CALLER                  */      
0265.00                                                                              
0266.00  TERMINATE:                                                                  
0267.00                                                                              
0268.00  /********************************************************************/      
0269.00  /*                                                                  */      
0270.00  /*   THAT"S ALL FOLKS. CLEAN UP AND RETURN TO THE ONE WHO CALLED.   */      
0271.00  /*                                                                  */      

0272.00  /********************************************************************/      
0273.00                                                                              
0274.00  /*DELETE USER PROFILE Q##CHGOWN IF CREATED BY THIS PROGRAM          */      
0275.00                                                                              
0276.00     QSYS/IF         COND(&USRPRFCRT > 0) +                                    
0277.00      THEN(QSYS/DO)                                                            
0278.00      DLTUSRPRF  USRPRF(Q##CHGOWN) OWNOBJOPT(*DLT)                            
0279.00      QSYS/ENDDO                 /*                                   */      

0280.00                                                                          
0281.00  /*DELETE DATA BASE FILE Q##CHGOWN IF CREATED BY THIS PROGRAM        */  
0282.00                                                                          
0283.00     QSYS/IF         COND(&DBFILECRT > 0) +                              
0284.00      THEN(QSYS/DO)                                                      
0285.00       DLTF       FILE(QGPL/Q##CHGOWN)                                    
0286.00      QSYS/ENDDO                 /*                                   */  
0287.00                                                                          
0288.00   ENDPGM                                                                
 

[{"Type":"MASTER","Line of Business":{"code":"LOB57","label":"Power"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SWG60","label":"IBM i"},"Platform":[{"code":"PF012","label":"IBM i"}],"Version":"6.1.0"}]

Historical Number

15510711

Document Information

Modified date:
21 September 2020

UID

nas8N1018102