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:

  1. Concurrent image copies can not be used with DSN1COPY or DSN1PRNT
  2. You MUST have security clearance (read access) to the DB2 VSAM dataset

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

//*-------------------------------------------------------------------------