Using Concurrent Copy in DB2
Concurrent copy allows the user to backup their DB2 tablespace and indexspace (version 6 for indexspace) with less down time. Once the logical copy has completed the table is available for updates. To get the time savings, you MUST backup multiple tablespace into a single dataset.
Restrictions:
JCL Example for Concurrent Copy
//DB2UTIL EXEC DSNUPROC,SYSTEM=DBT1,
// LIB='D0977.DB2.DBT1.DSNLOAD'
//SYSCOPY DD DSN=D9747.DB2.IC.DCO88001,
// MGMTCLAS=TESTMGM,
// SPACE=(CYL,(50,1),RLSE),
// DISP=(,CATLG,DELETE)
//RECCOPY DD DSN=D9747.DB2.REC.DCO88001,
// MGMTCLAS=TESTMGM,
// SPACE=(CYL,(50,1),RLSE),
// DISP=(,CATLG,DELETE)
//FILTERDD DD DSN=&&TEMP,DISP=(,DELETE),
// UNIT=(SYSDA,1),
// SPACE=(CYL,(1,1))
//SYSIN DD *
COPY
TABLESPACE DCO88001.SCO88001 DSNUM ALL
TABLESPACE DCO88001.SCO88002 DSNUM ALL
COPYDDN (SYSCOPY) FILTERDDN(FILTERDD)
RECOVERYDDN (RECCOPY)
CONCURRENT
SHRLEVEL REFERENCE
Sample Output from Concurrent Copy
DSNU000I DSNUGUTC - OUTPUT START FOR UTILITY, UTILID = XB3GDH.XB3DBT1
DSNU050I DSNUGUTC - COPY TABLESPACE DCO88001.SCO88001 DSNUM ALL TABLESPACE DCO88001.SCO88002 DSNUM ALL COPYDDN(SY
SCOPY) FILTERDDN(FILTERDD) RECOVERYDDN(RECCOPY) CONCURRENT SHRLEVEL REFERENCE
DSNU421I DSNUBBCM START OF DFSMS MESSAGES
PAGE 0001 5695-DF175 DFSMSDSS V1R5.0 DATA SET SERVICES 2002.017 12:06
ADR030I (SCH)-PRIME(01), DCB VALUES HAVE BEEN MODIFIED FOR SYSPRINT
PARALLEL
ADR101I (R/I)-RI01 (01), TASKID 001 HAS BEEN ASSIGNED TO COMMAND 'PARALLEL'
DUM OPT(3) DATAS(FILT(FILTERDD)) -
CAN CONC SHA TOL(ENQF) WAIT(0,0) -
OUTDD(SYSCOPY,RECCOPY)
ADR101I (R/I)-RI01 (01), TASKID 002 HAS BEEN ASSIGNED TO COMMAND 'DUM '
ADR109I (R/I)-RI01 (01), 2002.017 12:06:52 INITIAL SCAN OF USER CONTROL STATEMENTS COMPLETED.
ADR014I (SCH)-DSSU (02), 2002.017 12:06:52 ALL PREVIOUSLY SCHEDULED TASKS COMPLETED. PARALLEL MODE NOW IN EFFECT
ADR050I (002)-PRIME(01), DFSMSDSS INVOKED VIA APPLICATION INTERFACE
ADR016I (002)-PRIME(01), RACF LOGGING OPTION IN EFFECT FOR THIS TASK
ADR006I (002)-STEND(01), 2002.017 12:06:52 EXECUTION BEGINS
ADR411W (002)-DTDSC(04), DATA SET V9747.DSNDBC.DCO88001.SCO88001.I0001.A001 IN CATALOG ICAT.D0976 ON VOLUME SMD154 WAS
NOT SERIALIZED ON REQUEST
ADR411W (002)-DTDSC(04), DATA SET V9747.DSNDBC.DCO88001.SCO88002.I0001.A001 IN CATALOG ICAT.D0976 ON VOLUME SMD910 WAS
NOT SERIALIZED ON REQUEST
ADR801I (002)-DTDSC(01), DATA SET FILTERING IS COMPLETE. 2 OF 2 DATA SETS WERE SELECTED: 0 FAILED SERIALIZATION AND 0
FAILED FOR OTHER REASONS.
ADR734I (002)-DTDSC(01), 2002.017 12:07:05 CONCURRENT COPY INITIALIZATION SUCCESSFUL FOR 2 OF 2 SELECTED DATA SE
SERIALIZATION FOR THIS DATA IS RELEASED IF DFSMSDSS HELD IT. THE INTERMEDIATE RETURN CO
0004.
ADR454I (002)-DTDSC(01), THE FOLLOWING DATA SETS WERE SUCCESSFULLY PROCESSED
CLUSTER NAME V9747.DSNDBC.DCO88001.SCO88001.I0001.A001
CATALOG NAME ICAT.D0976
COMPONENT NAME V9747.DSNDBD.DCO88001.SCO88001.I0001.A001
CLUSTER NAME V9747.DSNDBC.DCO88001.SCO88002.I0001.A001
CATALOG NAME ICAT.D0976
COMPONENT NAME V9747.DSNDBD.DCO88001.SCO88002.I0001.A001
ADR006I (002)-STEND(02), 2002.017 12:07:06 EXECUTION ENDS
ADR013I (002)-CLTSK(01), 2002.017 12:07:07 TASK COMPLETED WITH RETURN CODE 0004
ADR012I (SCH)-DSSU (01), 2002.017 12:07:07 DFSMSDSS PROCESSING COMPLETE. HIGHEST RETURN CODE IS 0004 FROM:
TASK 002
DSNU422I DSNUBBCM END OF DFSMS MESSAGE
DSNU413I # DSNUBARI CONCURRENT COPY SUCCESSFUL FOR TABLESPACE DCO88001.SCO88001
DSNU413I # DSNUBARI CONCURRENT COPY SUCCESSFUL FOR TABLESPACE DCO88001.SCO88002
DSNU401I DSNUBBCR CONCURRENT COPY COMPLETE, ELAPSED TIME=00:00:15
DSNU010I DSNUGBAC - UTILITY EXECUTION COMPLETE, HIGHEST RETURN CODE=0
Once message ADR734I (002)-DTDSC(01), 2002.017 12:07:05 CONCURRENT COPY INITIALIZATION SUCCESSFULL is issued, the logical copy has completed and you may begin
updating your tables.
After the physical copy has completed, control is returned back to DB2, where DB2 will insert
a row into SYSIBM.SYSCOPY with STYPE of C and ICTYPE of F.
DSN1COPY can not be used for basic recovery. RECOVER TOCOPY MUST BE used for basic
Recovery.
JCL example for Basic Recovery
//STEP01 EXEC DSNUPROC,SYSTEM='DBT1',
// LIB='D0977.DB2.DBT1.DSNLOAD'
//SORTLIB DD DISP=SHR,DSN=SYS1.SORTLIB
//SORTOUT DD UNIT=WORK,SPACE=(4000,(20,20),,,ROUND)
//SORTWK01 DD UNIT=WORK,SPACE=(4000,(20,20),,,ROUND)
//SORTWK02 DD UNIT=WORK,SPACE=(4000,(20,20),,,ROUND)
//SORTWK03 DD UNIT=WORK,SPACE=(4000,(20,20),,,ROUND)
//SORTWK04 DD UNIT=WORK,SPACE=(4000,(20,20),,,ROUND)
//SYSUT1 DD UNIT=WORK,SPACE=(4000,(50,50),,,ROUND)
//SYSIN DD *
RECOVER TABLESPACE DCO88001.SCO88001
TOCOPY D9747.DB2.IC011702.DCO88001
Sample Output from Basic Recovery
DSNU000I DSNUGUTC - OUTPUT START FOR UTILITY, UTILID = XB3DB2.XB3DBT1
DSNU050I DSNUGUTC - RECOVER TABLESPACE DCO88001.SCO88001 TOCOPY D9747.DB2.IC011702.DCO88001
DSNU515I DSNUCBAL - THE IMAGE COPY DATA SET D9747.DB2.IC011702.DCO88001 WITH DATE=020117 AND TIME=120707
IS PARTICIPATING IN RECOVERY.
DSNU421I DSNUCBUI START OF DFSMS MESSAGES
PAGE 0001 5695-DF175 DFSMSDSS V1R5.0 DATA SET SERVICES 2002.018 10:00
ADR030I (SCH)-PRIME(01), DCB VALUES HAVE BEEN MODIFIED FOR SYSPRINT
RESTORE DATASET(INCL(V9747.DSNDBC.DCO88001.SCO88001.I0001.A0%%)) -
INDD(SYS00001) CANCE DYNALLOC REPLACE SHARE TOL(ENQF) WAIT(0,0)
ADR101I (R/I)-RI01 (01), TASKID 001 HAS BEEN ASSIGNED TO COMMAND 'RESTORE '
ADR109I (R/I)-RI01 (01), 2002.018 10:00:43 INITIAL SCAN OF USER CONTROL STATEMENTS COMPLETED.
ADR050I (001)-PRIME(01), DFSMSDSS INVOKED VIA APPLICATION INTERFACE
ADR016I (001)-PRIME(01), RACF LOGGING OPTION IN EFFECT FOR THIS TASK
ADR006I (001)-STEND(01), 2002.018 10:00:43 EXECUTION BEGINS
ADR780I (001)-TDDS (01), THE INPUT DUMP DATA SET BEING PROCESSED IS IN LOGICAL DATA SET FORMAT AND WAS CREATED BY
DFSMSDSS VERSION 1 RELEASE 5 MODIFICATION LEVEL 0
ADR442I (001)-FRLBO(01), DATA SET V9747.DSNDBC.DCO88001.SCO88001.I0001.A001 PREALLOCATED, IN CATALOG ICAT.D0976, ON
VOLUME(S): SMD112
ADR489I (001)-TDLOG(02), CLUSTER V9747.DSNDBC.DCO88001.SCO88001.I0001.A001 WAS RESTORED
CATALOG ICAT.D0976
COMPONENT V9747.DSNDBD.DCO88001.SCO88001.I0001.A001
ADR454I (001)-TDLOG(01), THE FOLLOWING DATA SETS WERE SUCCESSFULLY PROCESSED
V9747.DSNDBC.DCO88001.SCO88001.I0001.A001
ADR006I (001)-STEND(02), 2002.018 10:00:45 EXECUTION ENDS
ADR013I (001)-CLTSK(01), 2002.018 10:00:46 TASK COMPLETED WITH RETURN CODE 0000
ADR012I (SCH)-DSSU (01), 2002.018 10:00:46 DFSMSDSS PROCESSING COMPLETE. HIGHEST RETURN CODE IS 0000
DSNU422I DSNUCBMD END OF DFSMS MESSAGE
DSNU566I DSNUCBMD RESTORE FROM DATA SET D9747.DB2.IC011702.DCO88001 COMPLETED,
ELAPSED TIME=00:00:14
DSNU557I # DSNUCARS - INDEX= DBAADMIN.TCO88001 IS IN RECOVERY PENDING
DSNU557I # DSNUCARS - INDEX= DBAADMIN.TCO81WGE IS IN RECOVERY PENDING
DSNU558I # DSNUCARS - ALL INDEXES OF TABLESPACE= SCO88001 ARE IN RECOVERY PENDING
DSNU500I DSNUCBDR - RECOVERY COMPLETE, ELAPSED TIME=00:00:16
DSNU010I DSNUGBAC - UTILITY EXECUTION COMPLETE, HIGHEST RETURN CODE=4
Since DSN1COPY can not be run directly against concurrent image copies, you must restore the
concurrent image copy to a temporary dataset prior to running DSN1COPY to translate the identifiers.
Use ADRDSSU to restore concurrent image copy dataset to an temporary dataset to be feed into
DSN1COPY for object id translation.
JCL example for rebuilding test tables from production concurrent image copies
//*----------------------------------------------------------------------
//STEP01 EXEC PGM=ADRDSSU
//SYSPRINT DD SYSOUT=*
//TAPE1 DD DSN=D9747.DB2.IC02DBP3.DCO88001,DISP=SHR
//SYSIN DD *
RESTORE INDDNAME(TAPE1) -
REPLACE -
DATASET(INCLUDE(V0744.DSNDBC.DCO88001.SCO88002.I0001.A001)) -
RENAME(V0744.**,D0000.**)
//*----------------------------------------------------------------------
//STEP02 EXEC PGM=IKJEFT01
//STEPLIB DD DSN=D0977.DB2.DBT1.DSNLOAD,DISP=SHR
//SYSTSPRT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTSIN DD *
DSN SYSTEM(DBT1)
-STOP DATABASE(DCO88001) SPACENAM(SCO88002)
END
//*----------------------------------------------------------------------
//STEP03 EXEC PGM=DSN1COPY,PARM='FULLCOPY,OBIDXLAT,RESET'
//STEPLIB DD DSN=D0977.DB2.DBT1.DSNLOAD,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSUT1 DD DSN=D0000.DSNDBC.DCO88001.SCO88002.I0001.A001,DISP=SHR
//SYSUT2 DD DSN=V9747.DSNDBC.DCO88001.SCO88002.I0001.A001,DISP=SHR
/*
//*THE INFO AT SYSXLAT IS GATHERED FROM UDSN1 & UDSN2
//SYSXLAT DD *
0257,0262 SOURCE COL 1-4 OLD DBID, TARGET COL 6-9 NEW DBID
0009,0004 PSID, PSID,
0011,0010 OBID OBID
//*----------------------------------------------------------------------
//STEP04 EXEC PGM=IKJEFT01
//STEPLIB DD DSN=D0977.DB2.DBT1.DSNLOAD,DISP=SHR
//SYSTSPRT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTSIN DD *
DSN SYSTEM(DBT1)
-START DATABASE(DCO88001) SPACENAM(SCO88002) ACCESS(RW)
END
//*----------------------------------------------------------------------
//STEP05 EXEC DSNUPROC,SYSTEM='DBT1',
// LIB='D0977.DB2.DBT1.DSNLOAD'
//SORTLIB DD DISP=SHR,DSN=SYS1.SORTLIB
//SORTOUT DD UNIT=WORK,SPACE=(CYL,(20,20),,,ROUND)
//SORTWK01 DD UNIT=WORK,SPACE=(CYL,(20,20),,,ROUND)
//SORTWK02 DD UNIT=WORK,SPACE=(CYL,(20,20),,,ROUND)
//SORTWK03 DD UNIT=WORK,SPACE=(CYL,(20,20),,,ROUND)
//SORTWK04 DD UNIT=WORK,SPACE=(CYL,(20,20),,,ROUND)
//DSNTRACE DD SYSOUT=*
//SYSUT1 DD UNIT=WORK,SPACE=(CYL,(50,50),,,ROUND)
//SYSREC DD UNIT=WORK,SPACE=(CYL,(200,200),,,ROUND)
//SYSIN DD *
REBUILD INDEX(ALL) TABLESPACE DCO88001.SCO88002
//*---------------------------------------------------------------------
//STEP06 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSIN DD *
DELETE 'D0000.DSNDBC.DCO88001.SCO88002.I0001.A001'
//*---------------------------------------------------------------------
In order to run DSN1PRNT on a concurrent image copy, you MUST restore the concurrent image copy
to an temporary dataset.
JCL example for DSN1PRNT to obtain DB2 identifiers
//STEP01 EXEC PGM=ADRDSSU
//SYSPRINT DD SYSOUT=*
//TAPE1 DD DSN=D9747.DB2.IC011702.DCO88001,DISP=SHR
//SYSIN DD *
RESTORE INDDNAME(TAPE1) -
REPLACE -
DATASET(INCLUDE(V9747.DSNDBC.DCO88001.SCO88002.I0001.A001)) -
RENAME(V9747.**,D0000.**)
//*----------------------------------------------------------------------
//STEP01 EXEC PGM=DSN1PRNT,PARM='PRINT,FORMAT'
//STEPLIB DD DSN=D0977.DB2.DBT1.DSNLOAD,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSUT1 DD DSN=D0000.DSNDBC.DCO88001.SCO88002.I0001.A001,DISP=SHR
//SYSUT2 DD DUMMY
//*-------------------------------------------------------------------------