Go to LeighWeb Home Page            

Back To LeighWeb Mainframe Utilities Page

View the documentation associated with this module

/* REXX ***************************************************************/
/* UTILITY: COPYDB                                                    */
/* AUTHOR: DAVID LEIGH                                                */
/* FUNCTION: THIS UTILITY ALLOWS THE USER TO SPECIFY SOURCE AND       */
/*           TARGET DATABASES (ACROSS SUBSYSTEMS) AND A TIMESTAMP     */
/*           RANGE.  IT THEN USES THIS INFORMATION TO CONSTRUCT JCL   */
/*           WHICH WILL INVOKE DSN1COPY WITH SYSXLAT CARDS TO COPY    */
/*           IMAGE COPIES OF THE SOURCE DATABASES INTO THE TARGET     */
/*           DATABASE.                                                */
/**********************************************************************/

ADDRESS ISPEXEC
"CONTROL ERRORS RETURN"

/**********************************************************************/
/* GET THE JOBCARD INFO                                               */
/**********************************************************************/
"SELECT PGM(USERINFO) PARM("SYSVAR(SYSUID)")"
IF POS('D@',SYSVAR(SYSUID)) = 1 THEN
  DO
    JCLASS  = 'S'
    J2CLASS = 'S'
  END
ELSE
  DO
    JCLASS  = '1,TIME=(1,00)'
    J2CLASS = 'C,TIME=(5,00)'
  END

/**********************************************************************/
/* MAIN PROCESSING AND DISPLAY LOOP                                   */
/**********************************************************************/
DO WHILE CREATJCL ¬= 'Y'
  "DISPLAY PANEL(COPYDB)"
  IF RC = 8 THEN EXIT
  /********************************************************************/
  /* VERIFY THE SOURCE DATABASE AND POP UP A SELECTION LIST IF        */
  /* NECESSARY.                                                       */
  /********************************************************************/
  "TBCREATE TEMPTABL NOWRITE REPLACE KEYS(POPFIELD)"
  DB2SSID = SSSID
  SQLQUERY =            "SELECT A.NAME"
  SQLQUERY = SQLQUERY   "  FROM SYSIBM.SYSDATABASE A"
  IF POS('%',SDBNAME) > 0 THEN
    SQLQUERY = SQLQUERY " WHERE A.NAME LIKE '"SDBNAME"'"
  ELSE
    SQLQUERY = SQLQUERY " WHERE A.NAME = '"SDBNAME"'"
  SQLQUERY = SQLQUERY   " ORDER BY A.NAME"
  ADDRESS LINK "REXXSQL"
  SQLRC = RC
  IF _NROWS = 0 THEN
    DO
      ZEDLMSG = 'NO SOURCE DATABASE FOUND IN 'SSSID' BY THAT NAME'
      "SETMSG MSG(UTLZ001W)"
      ITERATE
    END
  IF SQLRC <> 0 THEN
    DO
      ZEDLMSG = 'BAD SQLCODE VERIFYING SOURCE DATABASE:' SQLRC
      "SETMSG MSG(UTLZ001W)"
      ITERATE
    END
  DO I = 1 TO _NROWS
    POPFIELD = STRIP(NAME.I)
    "TBADD TEMPTABL"
  END
  IF _NROWS > 1 THEN
    DO
      "TBTOP TEMPTABL"
      ZTDSELS = ''
      "ADDPOP ROW(1) COLUMN(44)"
      DO WHILE ZTDSELS ¬= 1 & RC < 8
        ZEDLMSG = 'SELECT 1 VALID SOURCE DATABASE'
        "TBDISPL TEMPTABL PANEL(CPYDBPOP)",
                         "AUTOSEL(YES) MSG(UTLZ000)"
      END
      IF ZTDSELS = 0 THEN
        DO
          SDBNAME = ''
          CREATJCL = 'N'
          "REMPOP ALL"
          ZEDLMSG = 'YOU STILL NEED A SOURCE DATABASE'
          "SETMSG MSG(UTLZ001W)"
          ITERATE
        END
      "REMPOP ALL"
    END
  SDBNAME = POPFIELD
  /********************************************************************/
  /* VERIFY THE TARGET DATABASE AND POP UP A SELECTION LIST IF        */
  /* NECESSARY.                                                       */
  /********************************************************************/
  "TBCREATE TEMPTABL NOWRITE REPLACE KEYS(POPFIELD)"
  DB2SSID = TSSID
  SQLQUERY =            "SELECT A.NAME"
  SQLQUERY = SQLQUERY   "  FROM SYSIBM.SYSDATABASE A"
  IF POS('%',TDBNAME) > 0 THEN
    SQLQUERY = SQLQUERY " WHERE A.NAME LIKE '"TDBNAME"'"
  ELSE
    SQLQUERY = SQLQUERY " WHERE A.NAME = '"TDBNAME"'"
  SQLQUERY = SQLQUERY   " ORDER BY A.NAME"
  ADDRESS LINK "REXXSQL"
  SQLRC = RC
  IF _NROWS = 0 THEN
    DO
      ZEDLMSG = 'NO TARGET DATABASE FOUND IN 'TSSID' BY THAT NAME'
      "SETMSG MSG(UTLZ001W)"
      ITERATE
    END
  IF SQLRC < 0 THEN
    DO
      ZEDLMSG = 'BAD SQLCODE VERIFYING TARGET DATABASE:' SQLRC
      "SETMSG MSG(UTLZ001W)"
      ITERATE
    END
  DO I = 1 TO _NROWS
    POPFIELD = STRIP(NAME.I)
    "TBADD TEMPTABL"
  END
  IF _NROWS > 1 THEN
    DO
      "TBTOP TEMPTABL"
      ZTDSELS = ''
      "ADDPOP ROW(1) COLUMN(44)"
      DO WHILE ZTDSELS ¬= 1 & RC < 8
        ZEDLMSG = 'SELECT 1 VALID TARGET DATABASE'
        "TBDISPL TEMPTABL PANEL(CPYDBPOP)",
                         "AUTOSEL(YES) MSG(UTLZ000)"
      END
      IF ZTDSELS = 0 THEN
        DO
          TDBNAME = ''
          CREATJCL = 'N'
          "REMPOP ALL"
          ZEDLMSG = 'YOU STILL NEED A TARGET DATABASE'
          "SETMSG MSG(UTLZ001W)"
          ITERATE
        END
      "REMPOP ALL"
    END
  TDBNAME = POPFIELD
  /********************************************************************/
  /* POPUP A SELECTION LIST FOR "FROM" TIMESTAMP IF GIVEN A PARTIAL   */
  /********************************************************************/
  SYSCRETR = STRIP(SYSCRETR)
  IF FTSYYYY = '' ¦,
     FTSMM   = '' ¦,
     FTSDD   = '' ¦,
     FTSHH   = '' ¦,
     FTSMN   = '' ¦,
     FTSSS   = '' ¦,
     FTSMLSS = '' THEN
    DO
      IF FTSYYYY = '' THEN FTSYYYY = '0001'


      IF FTSMM   = '' THEN FTSMM   = '01'
      IF FTSDD   = '' THEN FTSDD   = '01'
      IF FTSHH   = '' THEN FTSHH   = '00'
      IF FTSMN   = '' THEN FTSMN   = '00'
      IF FTSSS   = '' THEN FTSSS   = '00'
      IF FTSMLSS = '' THEN FTSMLSS = '000000'
      FTMESTMP = FTSYYYY"-" ¦¦,
                 FTSMM"-" ¦¦,
                 FTSDD"-" ¦¦,
                 FTSHH"." ¦¦,
                 FTSMN"." ¦¦,
                 FTSSS"." ¦¦,
                 FTSMLSS
      "TBCREATE TEMPTABL NOWRITE REPLACE KEYS(POPFIELD)"
      DB2SSID = SSSID
      SQLQUERY =            "SELECT TSNAME, CHAR(TIMESTAMP) AS TSTAMP"
      SQLQUERY = SQLQUERY   "  FROM "SYSCRETR".SYSCOPY"
      SQLQUERY = SQLQUERY   " WHERE DBNAME = '"SDBNAME"'"
      SQLQUERY = SQLQUERY   "   AND TSNAME LIKE '"STSNAME"'"
      SQLQUERY = SQLQUERY   "   AND ICTYPE = 'F'"
      SQLQUERY = SQLQUERY   "   AND ICBACKUP = '  '"
      SQLQUERY = SQLQUERY   "   AND TIMESTAMP >= '"FTMESTMP"'"
      SQLQUERY = SQLQUERY   " ORDER BY TSTAMP"
      ADDRESS LINK "REXXSQL"
      SQLRC = RC
      IF SQLRC = 100 THEN
        DO
          ZEDLMSG = 'NO TIMESTAMP >=' FTMESTMP 'IN 'SSSID' SYSCOPY'
          "SETMSG MSG(UTLZ001W)"
          ITERATE
        END
      IF SQLRC < 0 THEN
        DO
          ZEDLMSG = 'BAD SQLCODE VERIFYING "FROM" TIMESTAMP"' SQLRC
          "SETMSG MSG(UTLZ001W)"
          ITERATE
        END
      DO I = 1 TO _NROWS
        POPFIELD = SUBSTR(STRIP(TSNAME.I)"        ",1,8),
                          STRIP(TSTAMP.I)
        "TBADD TEMPTABL"
      END
      IF _NROWS > 1 THEN
        DO
          "TBTOP TEMPTABL"
          ZTDSELS = ''
          "ADDPOP ROW(1) COLUMN(34)"
          DO WHILE ZTDSELS ¬= 1 & RC < 8
            ZEDLMSG = 'SELECT 1 "FROM" TIMESTAMP ROW'
            "TBDISPL TEMPTABL PANEL(CPYDBPO2)",
                             "AUTOSEL(YES) MSG(UTLZ000)"
          END
          IF ZTDSELS = 0 THEN
            DO
              FTSYYYY = ''
              FTSMM   = ''
              FTSDD   = ''
              FTSHH   = ''
              FTSMN   = ''
              FTSSS   = ''
              FTSMLSS = ''
              CREATJCL = 'N'
              "REMPOP ALL"
              ZEDLMSG = 'YOU STILL NEED A "FROM" TIMESTAMP'
              "SETMSG MSG(UTLZ001W)"
              ITERATE
            END
          "REMPOP ALL"
        END
      PARSE UPPER VAR POPFIELD TSNAME FTMESTMP
      PARSE UPPER VAR FTMESTMP FTSYYYY '-',
                               FTSMM   '-',
                               FTSDD   '-',
                               FTSHH   '.',
                               FTSMN   '.',
                               FTSSS   '.',
                               FTSMLSS .
  END
  FTMESTMP = FTSYYYY"-" ¦¦,
             FTSMM"-" ¦¦,
             FTSDD"-" ¦¦,
             FTSHH"." ¦¦,
             FTSMN"." ¦¦,
             FTSSS"." ¦¦,
             FTSMLSS
  /********************************************************************/
  /* POPUP A SELECTION LIST FOR "TO" TIMESTAMP IF GIVEN A PARTIAL ONE */
  /********************************************************************/
  IF TTSYYYY = '' ¦,
     TTSMM   = '' ¦,
     TTSDD   = '' ¦,
     TTSHH   = '' ¦,
     TTSMN   = '' ¦,
     TTSSS   = '' ¦,
     TTSMLSS = '' THEN
    DO
      IF TTSYYYY = '' THEN TTSYYYY = '0001'
      IF TTSMM   = '' THEN TTSMM   = '01'
      IF TTSDD   = '' THEN TTSDD   = '01'
      IF TTSHH   = '' THEN TTSHH   = '00'
      IF TTSMN   = '' THEN TTSMN   = '00'
      IF TTSSS   = '' THEN TTSSS   = '00'
      IF TTSMLSS = '' THEN TTSMLSS = '000000'
      TTMESTMP = TTSYYYY"-" ¦¦,
                 TTSMM"-" ¦¦,
                 TTSDD"-" ¦¦,
                 TTSHH"." ¦¦,
                 TTSMN"." ¦¦,
                 TTSSS"." ¦¦,
                 TTSMLSS
      "TBCREATE TEMPTABL NOWRITE REPLACE KEYS(POPFIELD)"
      DB2SSID = SSSID
      SQLQUERY =            "SELECT TSNAME, CHAR(TIMESTAMP) AS TSTAMP"
      SQLQUERY = SQLQUERY   "  FROM "SYSCRETR".SYSCOPY"
      SQLQUERY = SQLQUERY   " WHERE DBNAME = '"SDBNAME"'"
      SQLQUERY = SQLQUERY   "   AND TSNAME LIKE '"STSNAME"'"
      SQLQUERY = SQLQUERY   "   AND ICTYPE = 'F'"
      SQLQUERY = SQLQUERY   "   AND ICBACKUP = '  '"
      SQLQUERY = SQLQUERY   "   AND TIMESTAMP >= '"TTMESTMP"'"
      SQLQUERY = SQLQUERY   " ORDER BY TSTAMP"
      ADDRESS LINK "REXXSQL"
      SQLRC = RC
      IF SQLRC = 100 THEN
        DO
          ZEDLMSG = 'NO TIMESTAMP >=' TTMESTMP 'IN 'SSSID' SYSCOPY'
          "SETMSG MSG(UTLZ001W)"
          ITERATE
        END
      IF SQLRC < 0 THEN
        DO
          ZEDLMSG = 'BAD SQLCODE VERIFYING "TO" TIMESTAMP"' SQLRC
          "SETMSG MSG(UTLZ001W)"
          ITERATE
        END
      DO I = 1 TO _NROWS
        POPFIELD = SUBSTR(STRIP(TSNAME.I)"        ",1,8),
                          STRIP(TSTAMP.I)
        "TBADD TEMPTABL"
      END
      IF _NROWS > 1 THEN
        DO
          "TBTOP TEMPTABL"
          ZTDSELS = ''
          "ADDPOP ROW(1) COLUMN(34)"
          DO WHILE ZTDSELS ¬= 1 & RC < 8
            ZEDLMSG = 'SELECT 1 "TO" TIMESTAMP ROW'
            "TBDISPL TEMPTABL PANEL(CPYDBPO2)",
                             "AUTOSEL(YES) MSG(UTLZ000)"
          END
          IF ZTDSELS = 0 THEN
            DO
              TTSYYYY = ''
              TTSMM   = ''
              TTSDD   = ''
              TTSHH   = ''
              TTSMN   = ''
              TTSSS   = ''
              TTSMLSS = ''
              CREATJCL = 'N'
              "REMPOP ALL"
              ZEDLMSG = 'YOU STILL NEED A "TO" TIMESTAMP'
              "SETMSG MSG(UTLZ001W)"
              ITERATE
            END
          "REMPOP ALL"
        END
      PARSE UPPER VAR POPFIELD TSNAME TTMESTMP
      PARSE UPPER VAR TTMESTMP TTSYYYY '-',
                               TTSMM   '-',
                               TTSDD   '-',
                               TTSHH   '.',
                               TTSMN   '.',
                               TTSSS   '.',
                               TTSMLSS .
  END
  TTMESTMP = TTSYYYY"-" ¦¦,
             TTSMM"-" ¦¦,
             TTSDD"-" ¦¦,
             TTSHH"." ¦¦,
             TTSMN"." ¦¦,
             TTSSS"." ¦¦,
             TTSMLSS
END

/**********************************************************************/
/* OK, NOW WE'VE GOT THE APPROPRIATE PARAMETERS TO PASS TO THE NEXT   */
/* STEP, WHICH IS RUN IN BATCH.  THE FOLLOWING CODE CREATES A FILE TO */
/* HOLD THE JCL AND THEN CREATES THE JCL.  IF THE USER REQUESTS TO    */
/* "REVIEW" THE JCL, THEY ARE TAKEN INTO AN EDIT SESSION AND THE JOB  */
/* IS *NOT* SUBMITTED.  OTHERWISE THE JOB IS SUBMITTED AUTOMATICALLY. */
/**********************************************************************/
TEMPFILE = SYSVAR(SYSUID) ¦¦ '.TEMP.COPYDB.JCL'
ADDRESS TSO
DUMMY = OUTTRAP('NULL.')
"FREE DD(ISPFILE)"
"DELETE '"TEMPFILE"'"
"ALLOCATE DD(ISPFILE) DSN('"TEMPFILE"')" ,
                     "NEW CATALOG" ,
                     "UNIT(SYSDA) VOLUME(WRK$$$)" ,
                     "SPACE(1,1) TRACKS RELEASE" ,
                     "RECFM(F B) LRECL(80) DSORG(PS)"
DROP NULL.

ADDRESS ISPEXEC
"FTOPEN"
"FTINCL COPYDB"
SAVERC = RC
"FTCLOSE"
ADDRESS TSO "FREE DD(ISPFILE)"

IF SAVERC > 0 THEN
    DO
        ZEDLMSG = 'FILE TAILORING OF THE "COPYDB" SKELETON FAILED',
                  'WITH RC =' SAVERC
        "SETMSG MSG(UTLZ001W)"
        "EDIT DATASET('"TEMPFILE"')"
    END
ELSE IF JCLREVEW = 'Y' THEN
    DO
        ZEDLMSG = 'YOU MUST SUBMIT THIS JCL YOURSELF'
        "SETMSG MSG(UTLZ000W)"
        "EDIT DATASET('"TEMPFILE"')"
    END
ELSE
    DO
        ADDRESS TSO "SUBMIT '"TEMPFILE"'"
        ZEDLMSG = 'COPYDB JOB SUBMITTED'
        "SETMSG MSG(UTLZ000W)"
    END

EXIT SAVERC