Joined: 26 Apr 2004 Posts: 4652 Location: Raleigh, NC, USA
I don't quite understand the difference conceptually between the two scenarios. Using either method, you will have to create and catalog approximately 1100 datasets. As long as your process relies on retrieving the backup by explicit dataset name, then I see no difference one way or the other, other than:
In order to create a dataset with the name
P.#060308.SYSOUT.DATA
you will need to use a program that will dynamically allocate the dataset with the appropriate date-stamp value, or use some other process (a job scheduler perhaps) that can date-stamp the dataset name.
If you go with the GDG's, that process won't be necessary.
then, everytime you want a new backup you can catalog a new dataset with the (+1) generation. You will continue to catalog datasets from G0001V00 all the way to G9999V00. After G9999V00, the generation data group will roll back around to G0001V00. Now, keep in mind that only the last 255 generations (LIMIT(255)) are considered to be part of the generation data group, and can be accessed by their relative address (i.e. using (0), (-1), (-2), etc.). For the datasets that roll out of the generation data group, they will have to be access by their specific dataset name (i.e. 'MY.GDG.G0001V00').
As far as your other question, here are some options:
Quote:
Enabling System Date and/or Time Stamps In JCL
Section 1. Using Job Schedulers
CA7 Example:
Say you want your JCL to look like this if todays date was 11/7/03:
Section 3. Using a program to create and submit the JCL.
/* REXX to capture the current date and save it in an INCLUDE group */
Drop jcl. /* clear STEM */
jcl.0 = 1 /* plug in record count. */
jcl.1 = "// SET DATE="D20||DATE('J') /* create SET statement */
jcl.1 = LEFT(jcl.1,80) /* Pad to 80 bytes, and */
"EXECIO 1 DISKW DATEDD (FINIS STEM jcl." /* Output to library */
Exit 0 /* quit with COND CODE = 0 */
Time stamp method
This solution could be used when multiple versions of a data set are to be created through out the day, and both date and time are to form part of the data set name. It requires two steps, the first creates the data set, and the second renames the data set replacing a particular node with the date and time. The issue not dealt with directly here is one of co-ordination to ensure that two jobs do not attempt to create data sets with the same time stamp. If an installation runs with the standard JES2 default of NOT allowing concurrent execution of jobs with duplicate names, it provides some assistance.
Sample REXX Routine to rename the data set
/* REXX to rename a data set to include current date as part of the
data set name. */
Parse Arg odsn onode /* Obtain parameters
odsn = existing dsn
onode = date location */
tod = TIME('N') /* Get Time of Day */
Parse var tod hh ':' mm ':' ss /* Remove the semi-colons */
lnode = LENGTH(onode) /* Get length of node */
lodsn = LENGTH(odsn) /* Get length of dsname */
start = POS(onode,odsn) /* Find onode */
more = POS('.',odsn,start) /* Anything after onode */
ndsn = SUBSTR(odsn,1,start-1)||'D20'||DATE('J')||'.T'||hh||mm||ss
If more > 0 Then ndsn = ndsn||SUBSTR(odsn,more)
x = MSG('OFF') /* Suppress messages */
"RENAME '"odsn"' '"ndsn"' " /* Rename the data set */
If rc ?= 0 Then Do /* Check for success */
Say "Rename Error"
Exit rc
End
Exit 0 /* quit with COND CODE = 0 */
//*
/*JOBPARM ROOM=SOP,LINES=9999
//*
//STEP0001 EXEC PGM=IEFBR14
##DD1
// DISP=(,CATLG,DELETE),UNIT=SYSDA,SPACE=(CYL,(1,1)),
// RECFM=FB,LRECL=80
//*
//STEP0002 EXEC PGM=IEBGENER
//SYSUT1 DD DATA
TEST RECORD 01 OF 10
TEST RECORD 02 OF 10
TEST RECORD 03 OF 10
TEST RECORD 04 OF 10
TEST RECORD 05 OF 10
TEST RECORD 06 OF 10
TEST RECORD 07 OF 10
TEST RECORD 08 OF 10
TEST RECORD 09 OF 10
TEST RECORD 10 OF 10
/*
##SYSUT2
// DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSIN DD DUMMY
//*
Next, I created the JCL that follows. I am using DFSORT to:
first, generate a sequential number for each record so that they can be kept in order.
then, I separate the JCL into two datasets - one with everything minus the ## records, and one with just the ## records, with the ## replaced by //, the data 'DD DSN=', and a dataset, with the SORT function DATE3 supplying the current Julian date.
lastly, the two sets of JCL are concatenated back together, using the sequence numbers to retain the proper order, with the resulting concatenated file going to the Internal Reader for submission. I'm sure it could use some tweaking here and there, but here goes nothing:
Joined: 09 Mar 2006 Posts: 14 Location: The Netherlands
Hi,
I'm surprised that superk didn't mention OPC (Operation Planning & Control; the IBM scheduler, nowadays also know as TWS: Tivoli Workload Scheduler). being an OPC-user myself, I automatically assume everybody uses it ! Not so, apparently!
Anyway; if you do use OPC, the answer to setting the date-variable is extremely easy! For instance, like this:
- //*%OPC SCAN tells opc it must scan the jcl for variables to resolve.
- &OYMD1 is is a predefined OPC variable, which resolves to the input arrival date of the application this job is in, in yymmdd-format.
- Before submit, OPC resolves the variables it can /must resolve.
- the actual JCL that's submitted is:
Joined: 09 Mar 2006 Posts: 14 Location: The Netherlands
Hi superk,
What do you mean with O/P? the OPC people?
anyway, I'm not saying that you shouldn't use GDG's, but their are alternatives! Use whatever suits you (and your installation) best!
One obvious advantage of using a date-stamp is that the datasetname tells you when the dataset was created. A GDG-qualifier like G0001V00 doesn't really tell you much, does it?...