|
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
|
|