Showing posts with label IBM. Show all posts
Showing posts with label IBM. Show all posts

Friday, December 17, 2010

Basic Framework of JCL

So, you’ve got the gist of the concept behind JCL, all the JCL that you going to write from hereon, maybe for the next 10-20 years, would be composed of three main statements :

//name JOB parameters...
//name EXEC parameters...
//name DD parameters...
Each of this JCL Statements have a label – a symbolic name assigned to them. Its like naming kids. Well, there could be so many boys in your area, but how do distinguish them? Of course, by their names.

In the same way, a JCL may contain a bunch of DD Statements, one for Input file, one for the output file, one for the error file. How do you tell them apart, by naming them. As a good practice, we always give names to all our JCL Statements. Names kinda help you to refer back to these statements in the future. You want to point out a particular JCL Statement to your friend, just spell out its name.

But, notice carefully, each label(name) is preceded with two slashes //. The two slashes are a JCL Statement’s signature. They indicate that the statement is a JCL Statement(one of JOB, EXEC, DD). Every JCL Statement wear the two slashes //. A naked statement without // won’t be treated as a JCL Statement.

Now, every JOB, EXEC and DD Statement has got these whole lot of parameters. What you’ll be learning throughout these tutorials is mostly the parameters. Parameters add stuff and meaning to the JCL Statement. 

Now, let me give you a booster, that’s going to help you organise the way you think about this JCL.

- JCL is made up of mainly JOB, EXEC and DD.
- JOB is easy to learn and use.
- EXEC is easy and fun to use.
- DD Statements take three forms
   1. DD Statements to read a file.(easy)
   2. DD Statements to write to the logs.(easy)
   3. DD Statements to create a new file(hard!); you’d have to learn parameters such as DISP, UNIT, DCB, SPACE and several others to code this.

Have a good look at this chart :

Image99[1]

Monday, April 6, 2009

Social networking and friends of friends

Like so many people, I’m on Facebook and Twitter, I’m on LinkedIn and Plaxo, and I belong to other networking communities and groups – like the new Eddolls group at eddolls.forumotion.com. However, I’ve only just come across FOAF files and the principle behind them – which is what I want to talk about today.

FOAF stands for Friend Of A Friend. It seems like a decentralized way of building a network. Rather than all joining Facebook – for example – and sharing information that way, we all create a FOAF file, put it on our Web site, and a distributed social network is created.

According to Wikipedia, FOAF is a descriptive vocabulary expressed using RDF (Resource Description Framework) and OWL (Web Ontology Language). Wikipedia goes on to suggest that computers may use these FOAF profiles to find, for example, all the people living in Europe, or to list all the people that both you and a friend of yours know. And the FOAF file does this by defining relationships between people. Each profile has a unique identifier (which could be a person’s e-mail addresses, a Jabber ID, or a URI of the homepage or weblog of the person), which is used when defining these relationships – again, thank you Wiki.

I went to www.ldodds.com/foaf/foaf-a-matic and used their FOAF-a-matic to create my first FOAF file. That was a fairly painless procedure, and I produced a file that I could copy and paste. Here’s part of it:


There followed the code for my friends, listing their names and e-mail addresses.

On the same site, they included a suggestion to use the HTML Link tag to point to FOAF descriptions:


According to Edd Dumbill, Editor and publisher, xmlhack.com, back in June 2002 FOAF has the potential to become an important tool in managing communities. In addition to providing simple directory services, you could use information from FOAF in many ways. For example:

  • Augment e-mail filtering by prioritizing mail from trusted colleagues
  • Provide assistance to new entrants in a community
  • Locate people with interests similar to yours.

If you’re one of those people who think it’s not what you know that’s important, it’s who you know, then FOAF files are definitely for you.

IBM's Anti-trust Suit

Is IBM trying to kill competition?
Its been a long-standing debate, if Internation Business Machines(IBM) has survived, simply because of the lack of competition. High cost of Mainframe computers, geeky unfriendly and old to work with, are deterrent factors for the bigblue.

In the 90's IBM failed to ride the new wave of the home desktop PC, and Microsoft took the competitive advantage. The battle between Microsoft and IBM still wages on.

A mushroom company Platform Solutions, developed software that mimicked IBM Mainframes on standard servers, Big Blue tried to fight back, but in vain. Finally, they simply tried to acquire the company for $150 million in July this year. After that, Platform Solutions is nowhere to be seen, vanished in thin air.

IBM still faces stiff competition from Biggies like Microsoft and Google. T3 Technologies, a reseller of Platform's products, has filed a complaint against them to the regulators in European Commission.

IBM is now negotiating to buy Sun Microsystems for $7 billion. We can only keep our fingers crossed. IBM has always charged astronomical prices for its so-called 'innovative' products. Its surprising, that amount of Mainframe processing power sold every year is declining.

Basic Concepts of Job control language JCL - Tutorial 03

Q. How do we write Output to disk/tape in JCL?
A. Unlike writing output to a dataset, disk/tape are direct Access(DASD) devices. Let us study the JCL that will write the output to the disk.



//JOB1JOB(A123),'STUDENZONE S',
//CLASS=A,PRTY=6
//STEP1EXECPGM=PROGRAM1
//INPUT1DDDSN=INFILE,DISP=SHR
//DISK1DDDSN=DISK.OUTPUT,
//DISP=(NEW,CATLG,DELETE),
//UNIT=DISK,
//SPACE=(TRK,(1,1),RLSE),
//DCB=(RECFM=FB,LRECL=40,BLKSIZE=400)
//TAPE1DDDSN=TAPE.OUTPUT,
//DISP=(NEW,CATLG,DELETE),
//UNIT=TAPE,
//DCB=(RECFM=FB,LRECL=40,BLKSIZE=400)

Let us recollect that all JCL statements basically have 3 broad divisions
//NAME OPERATION OPERANDS

1) All JCL statements begin with two forward slashes //.
2) NAME gives a name to the job, step or ddname.
3) OPERANDS can be positional parameters or keyword parameters.

Let us now see what the DSN(Dataset Name) is written, if you want to write the output of your program(in the JOB) to the Disk. Here the output will be written to a dataset called DISK.OUTPUT.

DISP(Disposition of the Dataset) -
Disposition of the dataset is used to tell the MVS OS, what is the current statusof the data set, what to do with the dataset if the JOB is successful, and what action to take if the JOB is unsuccessful.
DISP(current-status,normal-disposition,abnormal-disposition)

Current-status: The current-status specifies, whether the data-set pre-exists, or it has to be created newly, whether the jobs have exclusive access to it,or multiple jobs can share it.

Normal-disposition : It tells what to do, upon normal execution of the job. The data-set can be saved or deleted.

Abnormal-disposition : It tells what to do, if the JOB terminates with errors(Abnormally Ends - ABENDS). Either the dataset can be saved or deleted.
 DISP(NEW,CATLG,DELETE)
NEW, CATLG and DELETE are positional sub-parameters. They must appear in the same order.

NEW : This tells the MVS OS, the status of the dataset at the start of the JOB. It indicates that the dataset DISK.OUTPUT has to be creatednewly.

CATLG : Upon successful execution of the JOB, the dataset must be added to the System Catalog.

DELETE : Upon unsuccessful execution of the JOB, the dataset must be deleted.

UNIT Parameter :
This is used to identify the physical device on which output data-set is to be placed. During OS(MVS) installation(a process called SYSGEN), the system programmers will have assigned a symbolic name to each physical device.

SPACE
Parameter :

To create the output dataset, we need to first tell the MVS OS. The OS is a memory guagrd. It acts as a watchdog, guarding, protecting the memory. If you want to store the output dataset in computer memory, you must first ask the MVS OS for it. Only when the OS grants your request, then you can go ahead and store data.

The OS is a miser. Even if you want a single byte of memory, you must first ask the MVS OS for it. It does not give any bytes for free.

You must tell the MVS OS, how many bytes of memory space you need to store your data. You do this by writing the SPACE parameter.
SPACE(unit-of-space,(primary,secondary),release)

SPACE(TRK,(1,1),RLSE)

TRK indicates that the space being requested is in Tracks. Since Primary = 1, the MVS OS will initially allocate(reserve) 1 track of disk space, to store the output Dataset. If the size of output dataset exceeds 1 track, (and you run out of space), the MVS OS will allocate 1 additional track of memory space. If your program finds this space also insufficient, it will ABEND.

After successful execution of the job, any space not utilized by the job must be successfully released.

DCB Parameter :
DCB stands for Data Control Block. DCB will tell the MVS OS, the organisation of the dataset. A data-set may have all fixed length records, or the records may be of varying length. You must tell the MVS OS, the length of each record. This should match the record length as specified in the program. Also, a set of records form a block. MVS allocates memory in Blocks. You must specify the Block Size.

Input  -->     COBOL Program-->        Output
Dataset                              Dataset
LRECL=50    INPUT-REC PICTURE X(50)    LRECL=40
           DISK-REC  PICTURE X(40)

DCB=(RECFM=FB,LRECL=40,BLKSIZE=400)

RECFM = FB
It tells the MVS OS, that each record in the output data set, will be of fixed length. If the records are going to be of variable length, we must write RECFM=VB

LRECL=40
It tells the MVS OS, that each record is of length 40 bytes. Since, records are fixed length, all records have the same length = 40 Bytes. If RECFM=VB, then it tells the MVS OS, that the average length of the records is 40 bytes.

BLKSIZE=400
It tells the OS, that on the disk(direct access device), the size of the block will be 400 bytes. Thus, 1 block will at most store 10 records. If RECFM=FB, then BLKSIZE must be multiple of LCRECL. e.g. Block Size 4000 = 10 times x Record Length LRECL (40)

What is a Mainframe Computer?

A Mainframe computer is used in large business organisations for processing huge volumes of data e.g. census(population count), consumer statistics, banks and other financial institutions. Mainframe computers are manufactured by the organisation International Business Machines (IBM).

Large international banks like American Express, Citibank have millions of account holders. Thus, they generate a lot of business data - Available Account Balance, Withdrawal, Deposits, Interest Accrued. To process such bulk data, generate the statement of accounts, mainframe computer systems are used.

A Mainframe computer system is not meant to run tasks or programs fast. Instead, a Mainframe computer has a huge throughput, capable of handling many jobs and have high reliability and availability. A mainframe computer system has a plethora of features that enable to keep it up and running for years together. The time for which a computer system is up is called uptime. Thus, Long Uptimes are a feature of Mainframe Computer Systems. Mainframe vendors take pride in saying and boasting about the long uptimes of their computer systems. Mainframe computer systems are characterised by Reliability, Availability and Serviceability (RAS). Reliability of a computer system means those features that help to avoid and detect faults. Availability is a measure of the percentage of timefor which the system is available during it entire lifetime. Serviceability means different methods that help in diagnosing the fault.