how to backup system

发表于:2007-06-08来源:作者:点击数: 标签:
howtobackupsystem AS/400全系统备份需要在专属模式(restrictivestate)下及需要在中控台(console) 上执行备份指令才能完成,由于专属模式下,所有的使用者作业及所有子系统均已被停止 ,只有系统作业及从中控台进入系统(SignOn)的线上实时作业可以正常

how to backup system

AS/400 全系统备份需要在专属模式(restrictive state)下及需要在中控台(console)
上执行备份指令才能完成,由于专属模式下,所有的使用者作业及所有子系统均已被停止
,只有系统作业及从中控台进入系统(SignOn)的线上实时作业可以正常执行,所以我们
可以利用中控台上的线上实时作业(interactive job)自动执行全系统备份作业。
做法是:
1:从中控台进入系统(SignOn),执行下列的指令,在程序中会从讯息队列
  (message queue)中读取讯息,讯息队列若没有讯息时,程序会等待有讯息时才读取,并判断是否执行全系统备份作业。
2:于排程作业中设定某时间传送讯息至讯息队列,以激活或终止备份作业。


File  : QCLSRC
Member: FULSAVC
Type  : CLP
Usage : 
       1. 新增讯息队列 SAVSYSMSGQ: Yourlib - 指定您自己的 Library

          CRTMSGQ MSGQ(Yourlib/SAVSYSMSGQ) TEXT('Message Queue for Unattended full save')

    2. 修改程序中 Yourlib - 指定您自己的 Library 及 console DSP01 --指定您自己的 console 名称
          CRTCLPGM FULSAVC
          CRTCMD   CMD(FULSAV) PGM(Yourlib/FULSAVC)

       3. 新增自动工作排程传送激活备份讯息 Yourlib - 指定您自己的 Library
          此范例指定,此作业于每个星期天 16:55 执行:

          ADDJOBSCDE JOB(BIGSAV) CMD(SNDMSG MSG('STRSAVSYS') TOMSGQ(Yourlib/SAVSYSMSGQ))
         FRQ(*WEEKLY) SCDDATE(*NONE) SCDDAY(*SUN) SCDTIME('16:55:00') JOBQ(QGPL/QBASE)
         USER(QSECOFR) TEXT('Send a message to start full system save.')

          如果要取消份作业,上述指令 CMD 参数更改如下:
          SNDMSG MSG( 'ENDSAVSYS'  TOMSGQ( Yourlib/SAVSYSMSGQ)

       4. 于星期五下班前,从 Console Sign On 进入系统,于命令列输入 FULSAV,系统即进入等待上述激活备份讯息
          当每个星期天 16:55 时间到达时,系统会收到讯息判断是否激活备份作业。

       附注:
          由于资料量及磁带容量与磁带机设备不同,所以有可能需要一卷以上的磁带做备份,若由于设备不足,您还是
          要由人工换磁带。使用此范例前,请先测试无问题后,在正式实施。



*  *****************************************************************        */
/*  *                                                               *        */
/*  *                                                               *        */
/*  *  TITLE........: Weekly Savsys & Full Nonsys Save (FULSAVC)    *        */
/*  *                                                               *        */
/*  *                                                               *        */
/*  *****************************************************************        */
/*  *                                                               *        */
/*  *  To run an unattended SAVSYS, you can add a job scheduler     *        */
/*  *  entry as follows:                                            *        */
/*  *                                                               *        */
/*  *     SNDMSG MSG( 'STRSAVSYS'  TOMSGQ( Yourlib/SAVSYSMSGQ)     *        */
/*  *                                                               *        */
/*  *  Specify the date and time you want the message to be sent.   *        */
/*  *  You should call this program from the console, and when the  *        */
/*  *  job scheduler sends the message the program will continue    *        */
/*  *  and perform the SAVSYS & full *NONSYS save followed by IPL.  *        */
/*  *                                                               *        */
/*  * Note that by sending message ENDSAVSYS you can cause this     *        */
/*  * program to end without performing the SAVSYS etc.             *        */
/*  *                                                               *        */
/*  *****************************************************************        */
            PGM

/*  *****************************************************************        */
/*  Declare Program Variables                                       *        */
/*  *****************************************************************        */

   DCL        VAR(&MSG)   TYPE(*CHAR) LEN(9)            /* Message          */
   DCL        VAR(&JOB)   TYPE(*CHAR) LEN(10)           /* This Job         */
   DCL        VAR(&COUNT) TYPE(*DEC)  LEN(4 0) value(0) /* Retry            */


/*  *****************************************************************        */
/*  Main Processing                                                 *        */
/*  *****************************************************************        */

/*    Allocate the message queue to this job so it has exclusive   '         */
/*    use of the message queue so we can receive and remove       '          */
/*    messages from the queue. If we're unable to obtain the      '          */
/*    exclusive lock, then another job is using the queue and      '         */
/*    this job will cancel.                                        '         */
            ALCOBJ     OBJ((Yourlib/SAVSYSMSGQ *MSGQ *EXCL)) WAIT(0)
            MONMSG     MSGID(CPF0000) EXEC(SNDPGMMSG MSGID(CPF9897) +
                         MSGF(QCPFMSG) MSGDTA('Unable to allocate +
                         SAVSYS message queue.') TOUSR(*SYSOPR) +
                         MSGTYPE(*ESCAPE))

/*    Make sure that we are running on DSP01 (The Console)'                  */
/*    If we're not, this job will end when we do ENDSBS *ALL *IMMED!         */
            RTVJOBA    JOB(&JOB)
            IF         COND(&JOB *NE 'DSP01     ') THEN(SNDPGMMSG +
                         MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA('DO +
                         IT ON THE CORRECT SCREEN YOU MUPPET!!!!') +
                         MSGTYPE(*ESCAPE))

/*    Remove any old messages from message queue                             */
            RMVMSG     MSGQ(Yourlib/SAVSYSMSGQ) CLEAR(*ALL)

/*    Change this job's message queues to *Hold so we don't get any.         */
            CHGJOB     LOGCLPGM(*YES) BRKMSG(*NOTIFY)
            CHGMSGQ    MSGQ(*USRPRF) DLVRY(*HOLD)
            MONMSG     MSGID(CPF2451)
            CHGMSGQ    MSGQ(*WRKSTN) DLVRY(*NOTIFY)


/*    Receive messages in the queue. WAIT(*MAX) tells the system             */
/*    to wait for a message forever if no messages are in the                */
/*    queue. Once the message is received, it will be removed.               */

Loop:

            SNDPGMMSG  MSGID(CPF989 MSGF(QSYS/QCPFMSG) +
                         MSGDTA('Waiting for somebody to tell me +
                         to start save of entire system........') +
                         TOPGMQ(*EXT) MSGTYPE(*STATUS)
            CHGJOB     STSMSG(*NONE)
            RCVMSG     MSGQ(Yourlib/SAVSYSMSGQ) MSGTYPE(*ANY) +
                         WAIT(*MAX) RMV(*YES) MSG(&MSG)
            CHGJOB     STSMSG(*SYSVAL)

/*    If the message is neither STRSAVSYS or ENDSAVSYS, ignore               */
            IF         COND((&MSG *NE 'STRSAVSYS') *AND (&MSG *NE +
                         'ENDSAVSYS')) THEN(GOTO CMDLBL(LOOP))

/*    If the message is STRSAVSYS, continue with Saves                       */
            IF         COND(&MSG *EQ 'STRSAVSYS') THEN(DO)

/*    Send Start of wait Message to Qsysopr                                  */
            SNDPGMMSG  MSG(SAVSYS starting in 5 mins.) +
                         TOMSGQ(*SYSOPR)

/*    Send message to all users telling them to sign off                     */
            SNDPGMMSG  +                                              
                       MSG('                                       -
     ****** The Backups for tonight will start in 5 minutes...   +     
                     Please sign off the AS/400 +                 
                     Immediately.        *******') TOUSR(*ALLACT) 

/*  Delay job for next five minutes                                          */
            SNDPGMMSG  MSGID(CPF989 MSGF(QSYS/QCPFMSG) +
                         MSGDTA('Waiting for five minutes while  +
                         users sign off........................') +
                         TOPGMQ(*EXT) MSGTYPE(*STATUS)
            CHGJOB     STSMSG(*NONE)
            DLYJOB     DLY(300)
            CHGJOB     STSMSG(*SYSVAL)


/*    End all the subsystems                                                 */
Loop3:       SNDPGMMSG  MSGID(CPF989 MSGF(QSYS/QCPFMSG) +
                         MSGDTA('Ending all the subsystems.....') +
                         TOPGMQ(*EXT) MSGTYPE(*STATUS)
            CHGJOB     STSMSG(*NONE)



            ENDSBS     SBS(*ALL) OPTION(*IMMED)

/*  Delay job for next four minutes                                          */
            CHGJOB     STSMSG(*SYSVAL)
            SNDPGMMSG  MSGID(CPF989 MSGF(QSYS/QCPFMSG) +
                         MSGDTA('Waiting for four minutes while  +
                         Subsystems are ended..................') +
                         TOPGMQ(*EXT) MSGTYPE(*STATUS)
            CHGJOB     STSMSG(*NONE)
            DLYJOB     DLY(240)

/*    Start SAVSYS                                                           */
            CHGJOB     STSMSG(*SYSVAL)
            SNDPGMMSG  MSGID(CPF989 MSGF(QSYS/QCPFMSG) +
                         MSGDTA('Saving the system (SAVSYS)... +
                         ......................................') +
                         TOPGMQ(*EXT) MSGTYPE(*STATUS)
            CHGJOB     STSMSG(*NONE)
/*  Loop 2 tries to do a savsys.  If the system is not yet in                */
/*  restricted state, a count is incremented, and the program waits          */
/*  another two minutes and tries again.                                     */
LOOP2:      SAVSYS     DEV(TAP03) ENDOPT(*LEAVE) OUTPUT(*PRINT) +
                         CLEAR(*ALL)
            MONMSG     MSGID(CPF3785) EXEC(DO)
              CHGVAR     VAR(&COUNT) value(&COUNT + 1)

/*  If we have retried 12 times (24 minutes), NYCOMSGR is started and        */
/*  a message is sent to QSYSOPR to be paged out.  The program then          */
/*  loops to LOOP3 to attempt Endsbs *all *immed again.                      */
              IF         COND(&COUNT *GE 12) THEN(DO)
                STRSBS     SBSD(NYCOMSGR)
                DLYJOB     DLY(120)
                SNDMSG     MSG('The system wont go down on me!!') +
                             TOUSR(*SYSOPR)
                GOTO       CMDLBL(LOOP3)
              ENDDO

              DLYJOB     DLY(120)
              GOTO       CMDLBL(LOOP2)
            ENDDO

            CHGJOB     STSMSG(*SYSVAL)

/*    Start SAVLIB *NONSYS                                                   */
            SNDPGMMSG  MSGID(CPF989 MSGF(QSYS/QCPFMSG) +
                         MSGDTA('Saving all the user libraries +
                         (SAVLIB *NONSYS).....................') +
                         TOPGMQ(*EXT) MSGTYPE(*STATUS)
            CHGJOB     STSMSG(*NONE)
            SAVLIB     LIB(*NONSYS) DEV(TAP03) ENDOPT(*LEAVE) +
                         CLEAR(*AFTER) ACCPTH(*YES) OUTPUT(*PRINT)
            MONMSG     MSGID(CPF3777) EXEC(SNDMSG MSG('Not All +
                         objects Saved On Sunday Night!!!! Look at +
                         log of job DSP01') TOMSGQ(GSKELTON +
                         ACUSWORTH JBARRY DCOLAM DSTEER))
            CHGJOB     STSMSG(*SYSVAL)

/*    Start SAVDLO                                                           */
            SNDPGMMSG  MSGID(CPF989 MSGF(QSYS/QCPFMSG) +
                         MSGDTA('Saving all Document libraries +
                         (SAVDLO DLO(*ALL)....................') +
                         TOPGMQ(*EXT) MSGTYPE(*STATUS)
            CHGJOB     STSMSG(*NONE)
            SAVDLO     DLO(*ALL) FLR(*ANY) DEV(TAP03) +
                         ENDOPT(*LEAVE) OUTPUT(*PRINT) CLEAR(*AFTER)
            CHGJOB     STSMSG(*SYSVAL)

/*    Start save of all directory objects                                    */
            SNDPGMMSG  MSGID(CPF989 MSGF(QSYS/QCPFMSG) +
                         MSGDTA('Saving all Directory objects (SAV +
                         OBJ((''/*'')......................') +
                         TOPGMQ(*EXT) MSGTYPE(*STATUS)
            CHGJOB     STSMSG(*NONE)
            SAV        DEV('/QSYS.LIB/TAP03.DEVD') OBJ(('/*') +
                         ('/QSYS.LIB' *OMIT) ('/QDLS' *OMIT)) +
                         OUTPUT(*PRINT) ENDOPT(*UNLOAD) +
                         UPDHST(*YES) CLEAR(*AFTER)
            CHGJOB     STSMSG(*SYSVAL)

/*    Apply PTFs permanently                                                 */
            SNDPGMMSG  MSGID(CPF989 MSGF(QSYS/QCPFMSG) +
                         MSGDTA('Applying PTFs.................... +
                         ..................................') +
                         TOPGMQ(*EXT) MSGTYPE(*STATUS)
            CHGJOB     STSMSG(*NONE)
            APYPTF     LICPGM(*ALL) APY(*PERM) DELAYED(*YES)
            MONMSG     MSGID(CPF3660)
            CHGJOB     STSMSG(*SYSVAL)


/*    Power Down the System                                                  */
            SNDPGMMSG  MSGID(CPF989 MSGF(QSYS/QCPFMSG) +
                         MSGDTA('Powering down the system......... +
                         ..................................') +
                         TOPGMQ(*EXT) MSGTYPE(*STATUS)
            CHGJOB     STSMSG(*NONE)
            PWRDWNSYS  OPTION(*IMMED) RESTART(*YES)
            CHGJOB     STSMSG(*SYSVAL)

            ENDDO

/*    The program would not normally get to this point.  If it does,         */
/*    it is because the message 'ENDSAVSYS' has been received.               */
/*    The job will now sign off for security.                                */

            SIGNOFF    LOG(*LIST)

            ENDPGM
/*  *****************************************************************        */

 pcas400 回复于:2003-07-13 07:45:25
精华

原文转自:http://www.ltesting.net