+ All Categories
Home > Documents > DB2 Basics

DB2 Basics

Date post: 22-May-2015
Category:
Upload: tess98
View: 1,710 times
Download: 1 times
Share this document with a friend
Popular Tags:
41
DB2 Basics DB2 - Database 2 is an IBM product. It is MVS’s relational database management system. It exists as one or more subsystem within MVS. DB2 Objects: Database, Table space, Table, Index Space, Index, Storage Group, View, Synonym, Alias STOGROUPS For DB2 Datasets, we have 2 options for storage allocation – 1. Storage Group 2. User-Defined Vsam Dataset allocation is performed by DB2 through IBM’s Data Facility Product (DFP) Max no of volumes per Stogroup is 133 (Ideally 3 or 4) and all volumes must be of same type – 3380, 3390, etc. CREATE STOGROUP TESTSG1 VOLUMES(‘VOL1’, ‘VOL2’,…) . Default STOGROUP is SYSDEFLT. It is created when DB2 is installed. This should be avoided. The underlying VSAM datasets are created and maintained by DB2 . Using User_Defined VSAM datasets 2 types of VSAM datasets can be used to represent DB2 Tablespaces and Indexspaces - ESDS AND LDS These are not used as plain VSAM datasets but DB2 uses VSAM Media Manager to access them. Also DB2 does additional formatting of the datasets because of which they cant be treated like Standard Vsam. DB2 can use LDS more efficiently as it has a 4k CI size and has no control information like ESDS. DEFINE CLUSTER – (NAME(vcat.dsndbc.ddddddd.ssssssss.I0001.Annn) – LINEAR – REUSE - VOLUMES(vol1,vol2,…) - CYLINDER(pri sec) – SHAREOPTIONS(3 3) ) - DATA - (NAME(vcat.dsndbd.ddddddd.ssssssss.I0001.Annn)) vcat represents an ICF catalog BUFFERPOOL Data is first read from a table which is in a VSAM dataset and is moved into a bufferpool and from there it is sent to the requester. 1
Transcript
Page 1: DB2 Basics

DB2 Basics

DB2 - Database 2 is an IBM product. It is MVS’s relational database management system. It exists as one or more subsystem within MVS.

DB2 Objects: Database, Table space, Table, Index Space, Index, Storage Group, View, Synonym, Alias

STOGROUPS For DB2 Datasets, we have 2 options for storage allocation –

1. Storage Group2. User-Defined Vsam

Dataset allocation is performed by DB2 through IBM’s Data Facility Product (DFP) Max no of volumes per Stogroup is 133 (Ideally 3 or 4) and all volumes must be of

same type – 3380, 3390, etc. CREATE STOGROUP TESTSG1

VOLUMES(‘VOL1’, ‘VOL2’,…) . Default STOGROUP is SYSDEFLT. It is created when DB2 is installed. This should be

avoided. The underlying VSAM datasets are created and maintained by DB2 .

Using User_Defined VSAM datasets 2 types of VSAM datasets can be used to represent DB2 Tablespaces and Indexspaces

- ESDS AND LDS

These are not used as plain VSAM datasets but DB2 uses VSAM Media Manager to access them. Also DB2 does additional formatting of the datasets because of which they cant be treated like Standard Vsam.

DB2 can use LDS more efficiently as it has a 4k CI size and has no control information like ESDS.

DEFINE CLUSTER –(NAME(vcat.dsndbc.ddddddd.ssssssss.I0001.Annn) – LINEAR – REUSE - VOLUMES(vol1,vol2,…) - CYLINDER(pri sec) – SHAREOPTIONS(3 3)) -

DATA - (NAME(vcat.dsndbd.ddddddd.ssssssss.I0001.Annn))

vcat represents an ICF catalog

BUFFERPOOLData is first read from a table which is in a VSAM dataset and is moved into a bufferpool and from there it is sent to the requester.There are totally 60 Bufferpool options – 50 4K Bufferpools (BP0 thru BP49) and 10 32K bufferpools – BP32K thru BP32K9.

1

Page 2: DB2 Basics

Database - The total collection of stored data is divied into a number of user databases and a few

system databases. It has a group of logically related Tablespaces and Indexspaces, which in turn contain

tables and indexes respectively. Database is the unit of START and STOP for the system administrator. Default Database is DSNDB04 which is created during installation. The parameters used for the creation are – STOGROUP - Default is SYSDEFLT

BUFFER POOL - Default is BP0 DBD is Database Descriptor – It is a control structure used by DB2 to manage the objects

which are under the control of a given database. Whenever any DB2 object in a database is created,altered or dropped, the DBD is modified

. The DBD contains a mapping of the tablespaces, tables and indexes defined in a database. An X lock is acquired on a DBD during the execution of the DDL. So it is better to Execute DDL when there is little or no activity.

CREATE DATABASE DATPRPDB STOGROUP D3DPSMS BUFFERPOOL BP3 INDEXBP BP4 CCSID EBCDIC;

Table Space –

Table space contains one or more tables. Index space contains exactly one index. A table and all of its indexes will be contained within a single database.

It is a dynamically extended collection of pages. Page is a block of physical storage and it is the unit of I/O. The pages are all of 4K size for index spaces and 32K or 4K for table spaces.

Table space is the unit of recovery and reorganization.

Types of table spaces –

Simple – can contain one or more tables. Here within a single page, records from more than one table can be interleaved. Disadvantages – Affects Concurrent access, data availability, space management

Partitioned – can contain exactly one table which is so huge that it cant be maintained as a single unit. So it is partitioned based on the value ranges of one or more columns in a table.

For this column or its combination, a clustering index must be defined. The key can be max 40 bytes . Columns in a partitioning index cannot be updated.

Each partition is independent of one another. Individual partitions can be associated with different storage groups.

To isolate specific data areas in dedicated datasets. To improve data availability To improve recoverability To encourage parallelism (Query Parallelism is breaking the data access for a

query into multiple I/O streams that is execute in parallel and which is useful in reducing the overall elapsed time)

For partitioned table space, individual partitions can be reorganized or recovered

Segmented –

2

Page 3: DB2 Basics

Can contain one or more tables. The table space is divided into segments. Each segment consists of n pages, where

n is a 4x be <= 64 and can contain records of only one table.

Advantages over Simple TS - o Concurrent access is possible as data in in different segmentso Handles free space more efficiently. o Mass delete is more efficient as data is deleted using the space map and

without reading it (unlike simple ts)o Space can be reclaimed from dropped tables immediately.

Parameters for Segmented TS are – SEGSIZE – denotes the no of pages assigned to a segment

Parameters for Partitioned TS are – NUMPARTS – no of partitions LARGE is used to allocate as much as 1TB of data in a tablespace and

No of partitions can be max 254. If not, max storage amount is 64 GB and max no of partitions is 64

LOCKSIZE – Denotes the type of locking for a particular tablespace.Options are TABLESPACE – Used when Shared access to multiple users is not required

or when the data is Read-OnlyTABLE – Applicable only for Segmented TS and when Shared access is not requiredPAGE - To facilitate shared access (i.e concurrency)ROW - To facilitate shared access to data which could be on the same page. Used only when Page Locks weren’t sufficient for concurrent access.ANY – Means Let DB2 decide for each case, starting from Page Lock

LOCKMAX – Max no of Row or Page level Lock for any one user in a tablespace.If this max is reached, the lock gets escalated to table or tablespace lock.

Values can be 0 -> lock escalation should never occurSYSTEM -> defaults to the system-wide value specified in DSNZPARMSInteger from 1 to 2,147,483,647

PRIQTY, SECQTY

PCTFREE – Denotes what % of each page should remain free for future inserts

FREEPAGE – Denotes the no of pages after which an empty page is available.These 2 are useful in reducing the frequency of reorganization, reducing contention and increasing the efficiency of insertion

MAXROWS – Max no of rows on a tablespace page. Dflt is 255

CREATE TABLESPACE ACTSACCT IN STEVDB01 NUMPARTS 32 (PART 1 USING STOGROUP STEVESG PRIQTY 252 SECQTY 252

3

Page 4: DB2 Basics

ERASE NO FREEPAGE 0 PCTFREE 0 TRACKMOD YES COMPRESS YES ,PART 2 USING STOGROUP STEVESG PRIQTY 252 SECQTY 252 ERASE NO FREEPAGE 0 PCTFREE 0

TRACKMOD YES COMPRESS YES , ………………. )BUFFERPOOL BP3 LOCKSIZE PAGE LOCKMAX 0 LOCKPART YES CLOSE YES CCSID EBCDIC;

CREATE TABLESPACE ACTSACCG IN TAC4DB01 USING STOGROUP D3DPSMS PRIQTY 2880 SECQTY 7220 ERASE NO FREEPAGE 0 PCTFREE 5 TRACKMOD NO SEGSIZE 64 BUFFERPOOL BP3 LOCKSIZE PAGE LOCKMAX 0 LOCKPART NO CLOSE YES COMPRESS YES CCSID EBCDIC;

DB2 DATA TYPES:

Numeric - Smallint - 2 byte (binary integer)Integer - 4 byte (")Decimal(p,q) - Packed Decimal; Total p digits and decimal q digits; (p+1) or (p+2)/2 bytes;p<54

4

Page 5: DB2 Basics

Float(p) - If p<22, single precision, 4 bytes, else double precision, 8 bytesNote: All have a DEFAULT value of 0

String - Character - String of n bytes (fixed) where n < 255Note: DEFAULT is blanksVarchar - String of n bytes (variable) where exact length is n+2, 2 for the actual length Max size < page size within the tablespac.Note: DEFAULT is a null string

Date/Time - Date - unsigned packed decimal in format yyyymmdd - 4 bytesTime - "" " hhmmss - 3 bytesTimestamp -same - yyyymmddhhmmssnnnnnn - 10 bytesNote: DEFAULT is CURRENT DATE/TIME/TIMESTAMP

Table – Table that is physically stored within a table space contains one or more stored records. There will be one stored record per row in the base table (the table that is visible to the

user). The stored record is a byte string containing

o A prefix denoting the internal system identifiero For each field, a length prefix denoting the actual length, followed by the actual

field value in a encoded form.o The stored records are internally addressed by RID – Record identifier – this

consists of the page number within the table space and a byte offset from the foot of the page. This in turn contains the byte offset from the top of the page. This way when the records are rearranged within a page, the RID wont change. Only the local offset at the foot of the page will change.

Special Registers:

They are Zero Argument built-in Scalar functions, which return a scalar value.

1. USER - Returns the primary Authorisation ID.

2. CURRENT SQLID - Returns the Current Authorisation ID - This could be primary Id or secondary ID assigned to a specific functional area.

3. CURRENT SERVER - Returns the ID of the current server (useful in Distributed Database mgmt)

4. CURRENT PACKAGESET - Returns ID of the collection that is currently in use.

5. CURRENT DATE/TIME/TIMESTAMP - Returns the Current Date/ Time /TimeStamp.

6. CURRENT TIMEZONE - Returns a time duration representing the displacement of the local time zone from Greenwich Mean Time.

CREATE TABLE DEPARTMENT(DEPTNO CHAR(3) NOT NULL,DEPTNAME VARCHAR(29) NOT NULL,MGRNO CHAR(6) ,ADMRDEPT CHAR(3) NOT NULL WITH DEFAULT '200',LOCATION CHAR(16) NOT NULL WITH DEFAULT ,PRIMARY KEY(DEPTNO) )-----IN <DATABASE>.<TABLESPACE> (The default is used if not specified)

5

Page 6: DB2 Basics

;

Note:Table can also be created as

CREATE TABLE DUPDEPT1 LIKE DEPARTMENT;CREATE TABLE DUPDEPT2 LIKE DEPARTMENT(DEPT_PHONE CHAR(10));

CREATE TABLE EMPLOYEE(EMPNO CHAR(6) NOT NULL,FNAME VARCHAR(12) NOT NULL,LNAME VARCHAR(15) NOT NULL,WORKDEPT CHAR(3) ,PHONENO CHAR(7) ,HIREDATE DATE,JOB CHAR(8),SEX CHAR(1),DOB DATE,SALARY DECIMAL(9,2) ,BONUS DECIMAL(9,2) ,COMM DECIMAL(9,2) ,PRIMARY KEY(EMPNO))WITH RESTRICT ON DROP --> this will avoid table from getting dropped.;

ALTER TABLE:

ALTER TABLE EMPLOYEE ADD TAX DECIMAL(9,2) ;

And this command is also used to add or drop constraint - primary/foreign keys/check

Types of Constraints:

(1)Check Constraint: -->Used to enforce specific restriction on the values of a column. This will be checked for every update/insert .-->Can use condition operators,between,in,like,null and can have multiple condtions combined using 'and' / 'or'-->CONSTRAINT PHONE_CHK CHECK (PHONENO >= '0000000' AND PHONENO <= '9999999') The 2nd operand can be another column. But they shd be of same data type as first.-->Advantages:

(1)The basic business rules which need to be applied can be done at the database level. And this can save additional programming in applications which modify that data.(2)It ensures consitency and data integrity - as it avoids bypassing of rules by adhoc data modification as the rules are applied everytime data is modified

-->Watch out the following- (these is not checked) (1)If the conditions coded contradict each other,

like check(Phoneno > '1000000' and phoneno < '0999999')(2)If the conditions coded contradict the defaults (3)redundant conditions are allowed - this cud impact performance

(2)Referential Integrity:-->Means of enuring data integrity between related tables using a parent-child relationship The one with Primary key is parent. The one with foreign key is child table.

-->Alter Table EMPLOYEE Foreign Key Fkey1 (workdept)

6

Page 7: DB2 Basics

References Department ON DELETE CASCADE

Alter Table EMPLOYEE Foreign Key Fkey2 (workdept) References Department ON DELETE RESTRICT

Alter Table DEPARTMENT Foreign Key Fkey3 (ADMRDEPT) References Department ON DELETE CASCADE --> A self referencing constraint shd always use 'ON DELETE CASCADE'

Alter Table DEPARTMENT Foreign Key Fkey4 (MGRNO) References Employee ON DELETE SET NULL

Note; The same constraint when enforced through the application, it consumes more resources

(3) Primary Key is a unique identifier for each row in a table. It can be made of one or more columns.These columns can never be NULL.Note:A table can be defined without a primary key. But it is available for use only if the uniqueness is enforced by defining a UNIQUE INDEX on the same columns.

Other unique keys in the table are called alternate keys. To enforce them also, we need unique indexes. They also cant be NULL.Defined as UNIQUE(<COLUMN>) or <column> char(3) NOT NULL UNIQUE

Other Integrity Constraints:(1) Checking of Data types(2) Checking NOT NULL(3) Based on unique index on columns not defined as primary key/ alternate key.

Index Space - There is always a one-to-one correspondence between index and index space. Index space

is automatically created when we create an index. They can be partitioned if the index it contains is a clustering index for a partitioned table

space. Others are simple. It is the unit of recovery and reorganization. For partitioned Index space, individual

partitions can be reorganized or recovered.

Index – Index defines the logical ordering imposed on the stored data. They are defined on one column or a combination of columns. Useful for fast sequential access of the indexed data. For each distinct value of the index, the pointers, i.e, the RIDs

Of all the stored records that have that value are stored.

7

Page 8: DB2 Basics

Index Scan is used when an exhaustive search is to be done based on the index value. This is based on the sequence in which the indexed values are stored.

Table space scan is based on the physical sequence of the records. Clustering Index – is one for which the records are physically maintained in the sequence

defined by the index. The index controls the physical placement of the indexed recs.

CREATE UNIQUE INDEX SACM2.ACICACCT ON SACM2.ACTBACCT (ACCT_ID ASC ) CLUSTER (PART 1 VALUES('4384340002425997') USING STOGROUP DUDTSMS PRIQTY 25200 SECQTY 7200 ERASE NO FREEPAGE 31 PCTFREE 15 ,PART 2 VALUES('4851270009632812') USING STOGROUP DUDTSMS PRIQTY 25200 SECQTY 7200 ERASE NO FREEPAGE 31 PCTFREE 15 )

BUFFERPOOL BP4 CLOSE YES;

CREATE UNIQUE INDEX RACA.ACI1SPAA ON RACA.ACTBSPAA (ACCT_ID ASC ) USING STOGROUP D2DPSMS PRIQTY 360000 SECQTY 131068 ERASE NO FREEPAGE 0 PCTFREE 10 BUFFERPOOL BP4 CLOSE YES PIECESIZE 2097152 K;

VIEWS

-> Views are virtual tables based on one or more base tables.

-> When data in the base table changes, these changes are also reflected in the view.

-> The view is executed only when it is accessed

->They must be defined for a specific use and for one of the following advantages they provide –

To provide row and column level security By limiting the select items to the columns to which the user should have access and/or by limiting the rows by using proper conditions in WHERE clause.

To ensure optimal accessBy using join criteria and by using indexed columns in predicates

To ensure same calculation

8

Page 9: DB2 Basics

By using data derivation formulas in the select list To Mask complexity of a query from DB2 beginners To Support Domains

Note:Domain refers to a valid range of values that a column can contain. The Table CHECK Constraint is used to create the domains.The WITH CHECK OPTION is used to ensure that the data modification using

Update/Insert conforms to the WHERE conditions specified in the view definition.This option is of 2 types-WITH CASCADED CHECK OPTION – The check option is applied to the current view

and all the views it accesses regardless of whether it is specified or not.WITH LOCAL CHECK OPTION – The check option is applied to the views where it is

Specified. To rename the columns so that the user can understand them better.

-> In a View with Joins Functions Distinct Group By and HavingCannot do Insert/ Update /Delete

In a View with Derived Data Constants Without columns that don’t have default valueCannot do Insert

CREATE VIEW HIGH_PAID_EMP(EMP_NO, EMP_FIRST_NAME, EMP_LAST_NAME, DEPT, JOB, SALARY)

ASSELECT EMPNO,FNAME,LNAME,WORKDEPT,JOB, SALARY FROM EMPWHERE SALARY > 75000

WITH CHECK OPTION

SYNONYMS An alternative private name for a table or a view It can be used only by its creator. It cannot refer to a remote table. When a table/view is dropped, all synonyms defined on it are also dropped

CREATE SYNONYM TESTSYS FOR <CREATOR>.<TABLENAM>

ALIASES An alternative private name for a table or a view It can be used by everyone. It can refer to a remote table. When a table/view is dropped, all aliases defined on it are also dropped It provides a useful level of indirection between application programs and the data

tables.

CREATE ALIAS TESTALS FOR <CREATOR>.<TABLENAM>

9

Page 10: DB2 Basics

SQL – Structured Query Language

It is the standard query language used by many Relational database products like – DB2, Oracle, Sybase,etc. Features of SQL ( or sequel) –

It is a high level language as compared to procedural languages- because it provides a greater degree of abstraction . In procedural languages, we process record by record – we specify what data is to be accessed and how to access them.Sql on the other hand requires that that programmer specify only what is needed, but cannot specify how to retrieve them. The optimal instructions for data navigation (called the access path) is determined by the database itself.

Sql is not only a query language – but it is also used to define data structures, insert, modify, delete data and control access to the data. The language is common to the different users – like DBAs, application programmers, etc.

All database operations using Sql are at Set-Level unlike record level processing using flat files. This includes querying a table and the result is in the form of a subset of the original table. Similarly, updates and deletes also can be done at set level.

Based on Functionality, Sql can be classified into 3 Categories -

2) Data Definition Language(DDL) – Creates and maintains physical data structures using CREATE, ALTER and DROP verbs.

3) Data Manipulation Language(DML) – Accesses and Modifies Data using INSERT, SELECT, UPDATE and DELETE.

4) Data Control Language(DCL) – Control Data Security using GRANT and REVOKE.

Based on the type of usage, Sql can be classified into 2 Categories - 1) Static Sql – It is embedded in an application program written in a high level

Language like Cobol. 2) Dynamic Sql – It could be embedded in an application program where it will be

Constructed at run-time. Or it could be executed online at a terminal.

Rules for Sql – 1) Every Query must access atleast one object and select atleast item.

2) The items selected can be one or more columns from a table, a literal, special Register, an expression result, an embedded select that returns a single row.

2) The object accessed can be a table, a view, alias or full select.

Examples:

1) Getting the the maximum average salary and the dept that has that value.

FETCH FIRST n rows – to limit the fetch to n rows Correlation name – altername name used for a FROM object in a query (AS …)

This can be referred to in the where clause, having clause, etc Rename – alternate name used for a Selected item. (AS …).

This can be used only in Order by. While creating tables, we specify for every column if it can hold null value or not.

A Null value simply means the value is not known or in other words not defined. The presence of null value for a column in any row is identified using – ‘IS (NOT) NULL’.The presence of null value could impact the result of a query in many ways –

10

Page 11: DB2 Basics

It could impact the result of functions like Avg which ignores null values in a row. So this is not same as actual Avg.So when we query items which can have undefined values, we need to locate the NULL values using IS (NOT) NULL.

SQL Predicates – these are conditions used to identify desired rows in a query. The conditions can be True, False or Unknown .

Basic Predicate – a simple comparison of 2 values.Where Expression1 (OP) Expression2

Quantified Predicate – compares 1 or more values with a collection of values (from a fullselect)Where Expression1 (OP) Some/Any/All (full select) (single/multi value)

Between Predicate – compares a value in a range of values Where Expression1 between Start-value and End-value

IN Predicate - – compares 1 or more values with a list of values (multi value comparison is always with the result of a fullselect)

LIKE Predicate – to do partial check on strings – ‘%’ is used for skipping a string of any length‘_’ is used for skipping a single byte

NULL Predicate – checks for NULL values To check if the value of an expression is NULL or not

Defining and Using Temporary tables – WITH expression Temporary table provides data that will be fixed for the duration of the SQL. An uncorrelated subquery is in this sense, same. But a correlated subquery is resolved multiple times per sql statement.

We can define a temp table. Query from that temp table or join that temp table

with a real table.We can also use temp table to insert data into real tables.Wherever we use a temp table, we can use a full select in its place

Use of CAST:It is used to convert one data type to another – likeCAST(col as <new data type>)E.g:CAST(salary as INTEGER) where sal is decimalCAST(job as CHAR(3)) Padding with blanks or truncation will occur depending on the case.

VALUES : This is used to define a set of rows and columns which will be assigned to a view or a temporary table. This data can be treated as though it were an ordinary table except that updates cant be performed.

Create View view 1 (col1,col2,col3)Values ((c11,c12,c13),(c21,c22,c23)…)

With Temp1(col1,col2,col3) as Values ((c11,c12,c13),(c21,c22,c23)…)

CASE :

11

Page 12: DB2 Basics

This enables conditional processing within an sql statement.They work in 2 ways – (1)one where every condition in WHEN clause is independently checked (2)where every WHEN checks for equality against a common expression.

It can be used in the list of select items Select Dept, Project_id,

Case LOB When ‘F’ Then ‘Financial’

When ‘R’ Then ‘Retail’ When ‘I’ Then ‘Insurance’

Else ‘Others’ End as BusinessFrom Project

It can be used in the where clauseSelect Dept, Project_id From Project

Where Case

When Salary between 0 and 999 Then Salary +25 When Salary >1000 Then Salary +50 When Salary >2000 Then Salary + 100 When Salary >1000 Then Salary +100

End Is greater than Netpay

It can be used inside a functionSelect Sales_mgr,Max(Case Month when 1 then Sales_Amt else null end) as JanMax(Case Month when 2 then Sales_Amt else null end) as Feb………….Max(Case Month when 12 then Sales_Amt else null end) as DecFrom Sales where year=2001

It can be used to set different values in a SET clause in a UPDATE statement. (and can also be nested) .Update ProjectSet Salary = Case Designation

When ‘Associate’ then 1000When ‘Senior Associate’ then

Case RoleWhen ‘tl’ then 2000When ‘pl’ then 3000Else nullend

Else nullEnd

It can be used to avoid a divide by 0 error.

Select c1,c2,c3 from Table1Where (Case c2

When 0 then NullElse c1/c2End as c3)

Functions:They are of 2 types –

(1) One that acts on a particular column in all the rows that got selected. (Column fn)

(2) One that acts on one row at a time. (Scalar fn)

12

Page 13: DB2 Basics

Func (All/Distinct expression)1) Avg – gets the avg value of a set of numeric values which are not Null.2) Max – gets the maximum value of a set of values.3) Min – gets the minimum value of a set of values.4) Sum – gets the sum of numeric values which are not null.Note: All the 4 return Null when no matching rows are found.5) Count – Count (*) -Gets a count of matching rows

Count (All/Distinct expression) – gets a count of rows with non-null value for the expression. It returns 0 when no rows satisfy a Where clause It returns 0 rows when used with a Groupby

6) Count_Big – Similar to count – used when the count is too large

Scalar Functions:1) Abs - To get the absolute value of a number (Both decimal and double will return

double)2) Ascii – To get the ascii value of the leftmost character in the input string.3) Ceil – To get the next smallest ingeter value >= input4) Char – It acts differently depending on the type of input.

If input is char, then it acts similar to substr – Char(str1,3) – First 3 charsIf input is date/time, it converts into char string of diff formats – Char(DOB,USA/EUR)If input is numeric, it conversts to left justified char string. Note: DIGITS – it is similar to chat – it gives equivalent char string for numeric input

5) Chr – It returns the ascii value for input in the range 0 to 255. 6) Coalesce – It is a synonym for Value – It returns the first non-null value in a list of

compatible input values. Coalesce(c1,c2,c3). 7) Concat – It is used to concatenate 2 strings – It can be used as str1 || str 2 or as str1

concat str2 or as Concat(str1,str2).8) Date – This will convert to char string into equivalent date

If the input represents a valid date/timestamp – it is coverted as it isIf the input is 7 bytes long – it is assumes as yyyynnn – julian and converted.If input is numeric – it is considered as no of days since 0001-01-01

Continuation of Scalar Functions:

---Int / Integer ---- numeric decimal value /valid char -------Lcase/Lower , Ucase/Upper, LeftSelect hour(23:12:58),minute(23:12:58),second(23:12:58), ---can be used with timestamp also microsecond(1996-08-15-15.12.124455),

month('1996-11-21'),monthname('1996-11-21'), -- can use ts also ----

week('2002-07-21'),year('2002-07-21'),

int('+123'),int('-123'),int('+12.3'),int(' 124 '),int(-2.4)

lcase(name),ucase(name),

left(' India ',3),length(left(' india,3), -- the blanks not removed ---right(' India',3),

length(name) ---- always returns same value for all rows except varchar

ltrim(' Indians '),length(ltrim(' Indians ')),rtrim(' India '),length(rtrim(' India ')),

13

Page 14: DB2 Basics

-- returns the table partition where the row is ; returns 0 if it is not partiotioned;cant be used with fields on Group by as we cant associate the value to a specific row --nodenumber(empno),

---- returns partition map index of the row partition(empno),

-- if a= b then null else the first valuenullif(dept,'100'),---locate(find-str,base-str,start-pos)-- returns 0 if str not foundlocate('C','ABCDEF',2),--- this is similar to locate except that first 2 parms are reversed -posstr(base-str,find-str)---3rd parm not there - but faster as it is of sysibmposstr('ABCDEF,'C'),

-----Repeat(string,no of times)repeat('India',5),

-----Replace(string,from,to) -- if 'from' not found, returns orig strinreplace('Search','ar','AR')

space(5), ----- returns a string of 5 b/k - varchar

----substr(string,start,len) - error if len>(length(string)-start)substr(name,3,5),

------ Translate(base-str,to,from,substitute) -- similar to replace, but works char by char------ unmatched char replaced by b/k or the substituteTranslate('India'), -- to ucaseTranslate('abcd','A','ab'),

-----To generate Random float value in the range 0 to 1 inclusiveRand()

from emp0710.

Order By – It acts on the final output of a query, sorts the data in the requested form. It cant be used on intermediate results (like subquery). We can order by Column name (this need not be one of the selected Column or we can order by column no or we can order by expression – like substr(name,2)

----- Use of Order By ----

select empno,salary,bonus from emp0710 order by 2 --> using column no

select empno,salary,bonus from emp0710 order by dob desc --> using a specific colm which is not in select also

select empno,salary,bonus from emp0710 order by substr(empno,2) --> using a fn output

14

Page 15: DB2 Basics

Group By – It is used to combine multiple rows into 1. And Having is used to select which of the groups are to be retrieved.

Rules: There can be only one group by per select . But we can have one per select in a multi select query.

The select items must either be those in the the group by or they must be column functions .

The result of the query shd have a distinct set of rows where the unique Identifier is the fields grouped on

All Null values in the group by fields are considered equal. We can group by fields as well as expressions – sum(salary+comm)

Select Avg(Bonus),count(*),sum(salary+comm.)From EmployeeWhere Dept <> 100Group by sum(salary+comm.)Having Avg(Bonus) > 10000.

---- Group By ---------

Select Dept,Avg(Bonus),count(*),count(Empno),sum(salary+bonus)From EmployeeWhere Dept <> 100Group by DeptHaving Avg(salary) > 8000

Select Dept,Avg(Bonus),count(*),count(Empno),sum(salary+bonus)From EmployeeGroup by DeptHaving Avg(salary) > 8000 ----> To test and seeWhere year(hiredate) <> 2001

Select Dept,Avg(Bonus),count(empno),sum(salary+bonus)From EmployeeGroup by year(hiredate)

Joins - They are used to get data from more than one table linking them based on the Relationship between the tables.

They can be coded in 2 forms – (1) Select c1,c2,…. From Table1 T1,Table2 T2

where T1.Id = T2.Id and T1.c1 = somevalNote: This is mainly suitable only for inner joins.

(2) Select v1.Id, v1.name,v2.job From Staff v1Inner Join Staff v2On v1.id=v2.idInner join Staff v3On v2.id=v3.idwhere……..Note: The 2nd style joins 2 tables at a time. The ON condition constrains the join. Where conditions are applied after the join to constrain the result.

15

Page 16: DB2 Basics

Join Types:

The Default is Inner Join. It always checks for matching values between the 2 tables based on condition specified and returns data from the row that matches.

Outer Join:Useful when we want rows that have the matching values and also the ones that don’t have matching rows in the other table.

Left Outer join:

All rows in first table plus matching rows in 2nd table.

Right Outer join:

All rows in 2nd table plus matching rows in 1st

table.

Right Outer join:

All rows in 1st and 2nd table plus matching rows .

---- Joins ----

SELECT EMPNO,(FNAME || ' ' || LNAME) AS NAME,WORKDEPT,DEPTNAME,JOB FROM EMPLOYEE A, DEPARTMENT BWHERE A.WORKDEPT = B.DEPTNOAND A.WORKDEPT <> '300'ORDER BY 4

OR AS

SELECT EMPNO,(FNAME || ' ' || LNAME) AS NAME,WORKDEPT,DEPTNAME,JOB FROM EMPLOYEE AINNER JOIN ---> INNER IS DEFAULT - SO THE KEYWORD IS OPTIONAL DEPARTMENT BON A.WORKDEPT = B.DEPTNOWHERE A.WORKDEPT <> '300'ORDER BY 4

NOTE:THE JOIN CONDITION CAN BE ANY OF THE COMPARISON OPERATORS.

TABLE JOINED TO ITSELF:

SELECT A.DEPTNO,A.DEPTNAME,A.ADMRDEPT,B.DEPTNAMEFROM DEPARTMENT A DEPARTMENT BWHERE B.ADMRDEPT = A.DEPTNO

CARTESIAN PRODUCT: It results when no join condition is specified or the condition doesnt match any values

16

Page 17: DB2 Basics

and all permutation and combinations of data result.

SELECT EMPNO,(FNAME || ' ' || LNAME) AS NAME,WORKDEPT,DEPTNAME,JOB FROM EMPLOYEE A, DEPARTMENT B

or asSELECT EMPNO,(FNAME || ' ' || LNAME) AS NAME,WORKDEPT,DEPTNAME,JOB FROM EMPLOYEE A, DEPARTMENT Bwhere A.WORKDEPT <> B.DEPTNO

LEFT OUTER JOIN:

SELECT DEPTNO,DEPTNAME,MGRNO,EMPNO,VALUE(FNAME,'Not a Manager') as ManagerFROM EMPLOYEE ALEFT OUTER JOINDEPARTMENT BON A.EMPNO = B.MGRNO

SUBQUERIES:

It is used to relate one table to another or multiple others without actuallydoing a join.

Syntax:

Expression OP SOME/ANY/ALL (SUBQUERY)ORExpression (NOT) EXISTS/IN (SUBQUERY)

SOME: The subquery is true if any row matches (same for ANY)ALL : The subquery is true ONLY if ALL rows matchIN : matches one of the values listed by the subqueryEXISTS: there exists atleast one matching row in the subquery.

They are of 2 Types - (1) Uncorrelated SubqueryThe results of the subquery have no direct relationship with the current row .

Example:SELECT EMPNO,WORKDEPT,DEPTNAME FROM EMPLOYEE AWHERE WORKDEPT = ANY(SELECT DEPTNO FROM DEPARTMENT);

(2) Correlated SubqueryThe results of the subquery can be evaluated only based on the value in the current row .

SELECT A.EMPNO,A.WORKDEPT,A.DEPTNAME FROM EMPLOYEE AWHERE A.WORKDEPT = (SELECT B.DEPTNO FROM DEPARTMENT B WHERE A.WORKDEPT=B.DEPTNO);

17

Page 18: DB2 Basics

Examples:SELECT EMPNO,WORKDEPT,DEPTNAME FROM EMPLOYEE AWHERE WORKDEPT = ANY(SELECT DEPTNO FROM DEPARTMENT);

SELECT EMPNO,WORKDEPT,DEPTNAME FROM EMPLOYEE AWHERE WORKDEPT = SOME(SELECT DEPTNO FROM DEPARTMENT);

SELECT EMPNO,WORKDEPT,DEPTNAME FROM EMPLOYEE AWHERE WORKDEPT IN (SELECT DEPTNO FROM DEPARTMENT);

SELECT * FROM EMPLOYEE AWHERE A.SALARY >= ALL (SELECT SALARY FROM EMPLOYEE B)

---- TO SELECT THOSE DEPARTMENTS WHICH HAVE NO EMPLOYEES ----SELECT A.DEPTNO,A.DEPTNAME FROM DEPARTMENT AWHERE NOT EXISTS (SELECT DISTINCT(B.WORKDEPT) FROM EMPLOYEE B WHERE B.WORKDEPT = A.DEPTNO)ORSELECT A.DEPTNO,A.DEPTNAME FROM DEPARTMENT AWHERE NOT IN (SELECT DISTINCT(B.WORKDEPT) FROM EMPLOYEE B)

---- TO SELECT THOSE DEPARTMENTS WHICH HAVE MORE THAN 1 EMPLOYEE ----SELECT A.DEPTNO,A.DEPTNAME FROM DEPARTMENT AWHERE 1 < (SELECT COUNT(*) FROM EMPLOYEE B WHERE B.WORKDEPT = A.DEPTNO)

----MULTI-FIELD SUBQUERIES ----------

SELECT *FROM EMPLOYEE AWHERE (A.BONUS,A.SALARY) > (SELECT AVG(B.BONUS),AVG(B.SALARY) FROM EMPLOYEE B)

DB2 Application Development

For an application program to access DB2 data, the sql statements have to be embedded in the program statements of the high level language – like COBOL, PL1, etc.

Embedded SQL can be executed in MVS Batch using CAF TSO Batch DL/I Batch TSO (interactive)

SQLs that can be embedded are:

18

Page 19: DB2 Basics

SQL Type

SQL Statements

DCL Grant, RevokeDDL Create, Alter, DropDML Insert, Select, Update, DeleteDynamic Sql Describe, Execute, Execute Immediate, PrepareStored Procedures Call, Allocate Cursor. Associate LocatorsEmbedding Control Declare, Open, Fetch, CloseTransaction Control Commit, RollbackPackage Control Set Current PackagesetGeneral Explain, Lock Table, SetError Handling Whenever

Comparison of Application that accesses data from Flat files VS Application accessing DB2 data

DB2 Access File AccessAll the accessed tables are declared.Cursors are declared

Files are defined in the FD section

No DD card in JCL DD card required except for files allocated dynamically

Cursors are opened Files are openedCursors are closed Files are closed Set level processing Record level processingAccess to table can be at Column level Always a full record is read or writtenStatus of SQL returned by Sqlcode Status indicated by file-statusCursors are used to simulate record level processing

READ/WRITE used for record-level processing

All Embedded SQL Statements are delimited usingExec SQL

Sql statementsEnd-Exec (Starting in column 12)This helps the precompiler parse the embedded sql in the source code

Though not mandatory, declare all the tables which are used in the application.This should be declared in the working-storage section before any other db2-related variable. This helps in reducing the precompiler’s work.

This is done using DCLGEN command. It reads the DB2 catalog to determine the structure of the table and builds a Coobl Copybook. This copybook has the Embedded ‘Declare table’ statement and also working-storage host variable definitions for each column in the table.

However, it is not mandatory that only this copybook should be used in the program.We can also hardcode the same information in the program, but not a good practice.

Include a structure called SQLCA (SQL Communication Area) asExec SQL

Include SQLCAEnd-Exec

The fields defined in it are used to describe the success or failure of execution of each embedded Sql.

The important fields in this are SQLCODE – Return Code of the last executed sql passed by DB2 to the application

19

Page 20: DB2 Basics

0 -> Successful Execution +ve -> Successful Execution, but with an exception -ve -> Execution Failed Note: Move the Sqlcode into a formatted field to display .

SQLERRD – an array containing 6 rows used to diagnose error conditions. SQLERRD(3) -> no of rows inserted, deleted or updated by the sql SQLERRD(5) -> gives column position of syntax error in a dynamic sql

SQLWARN0 – Contains W if any other SQLWARN* (1 thru A) have W.

SQLSTATE - Similar to SQLCODE . Has a 2 char Class code denoting the error type and a 3 Char subclass Code denoting the exact error in that error type.

A group of Sqlcodes are associated to a single sqlstate.

The return code can be checked after every sql and action taken depending on the requirement.

SQL has a error trapping statement – WHENEVER When ‘WHENEVER is used’ it applies to all the subsequent sqls in that application.

It can be used in 3 cases - Exec Sql Whenever NOT FOUND (* not found)

Continue Whenever SQLWARNING (* +ve sqlcode but not +100 or sqlwarn0 = 0)

Go to Warning-para Whenever SQLWARNING (* -ve sqlcode)

Go to Warning-paraEnd-Exec

But use of WHENEVER is not recommended.

Host Variables -

Host Variable is an area of storage allocated by the host language and referenced in an SQL statement.They are the means of moving data from the program to Database and vice-versa.In addition they also are used as values to be compared with in predicates and are dynamically populated at run time.

Host StructuresThey are group level data containing a set of host variables and if all of them have to be usedAs the target of retrievel , the into will refer only to :Group_Data.

Null value returned : -305Null Indicators are defined as Pic S9(4) Comp.

Possible values in the null indicator:

+ve or 0 implies column is not null.-2 implies data conversion error-1 implies null data returned from the databaseoriginal length of a column if the column is char type and is truncated on retrieval.

The sql defined in a cursor may be executed at the time of OPEN Cursor or for every fetch.

CLOSE Cursor releases all the resources used by the cursor.

A Cursor cannot be used for updates if it is defined with any one of the following –

20

Page 21: DB2 Basics

UNIONDISTINCTGROUP BYORDER BYJOINSUBQUERYCORRELATED SUBQUERYTABLES IN RO/UT MODESREAD-ONLY VIEWS

Use FOR UPDATE OF both for Delete / UpdateThis helps in ensuring Data Integrity.This helps in locking the data page when the fetch happens and ensures no other updates happen.

Note:LOAD outperforms individual inserts by 50-75%ISOLATION LEVEL specified at the statement level is preferable because it can vary from one stmt to another and it overrides that in plan or package.

Cursors are implicitly closed when a COMMIT is issued or when the program ends.

Declare Cursor with WITH HOLD option

(declare trial1 cursor with hold for select….)

Using WITH HOLD helps in retaining the result set table for the select defined in the cursor.This way we can continue to process the cursor from where we left.Otherwise the cursor will have to opened and repositioned.

While Declaring cursors it is a good practice to specify ‘FOR FETCH (READ) ONLY’ or ‘FOR UPDATE OF Col1, Col2 ,.

At the SQL Level also we can specify Isolation Levels using WITH clause.This will override what was specified during Bind Package/Plan.This can be done For –Declare CursorSelect IntoInsertUpdate with WhereDelete with Where

COMMIT_RESTART Logic:

COMMIT is the DB2 statement which saves the updates made to DB2 tables since the start of the program or the last COMMIT.It does so by physically applying the all the changes to the DB2 Log.

When a program abends, the changes are rolled back to the last Commit / Sync point.

When is a COMMIT issued - A unit of work is a portion of processing that gives a logical completion and helps in achieving data integrity. The Updates done during a unit of work are saved by issuing a DB2 COMMIT.

For Example, suppose we have an application that involved update of 2 tables which are related to each other. And suppose the update of table1 is COMMITed and the program abends before COMMITing the UPDATE to the other. The data in the 2 tables will no longer be synchronous. To Achieve data integrity, we must issue a COMMIT only when the processing reaches a logical end.

21

Page 22: DB2 Basics

Checkpoint-Restart Logic:Application Programs which process large volumes of data and those that involve modification of Db2 Tables need to incorporate a Restart Logic when a system error occurs.This is to help in continuing the processing from the record next to the last successfully processed row.

Create a DB2 table which will have Pgm_nameJob_nameCommit_FrequencyNo_of_CommitsCheckpoint_KeyCheckpoint_Time

The Unique key will be Pgm_Name, Job_Name

Declare 2 cursors – both with ORDER BY for the columns that form the unique index for the table. One cursor will be used to do normal processing. The other cursor while restarting the application is used to reposition at the record following the last saved record . This is done using additional predicates like Where Key > Last_Key For every row that is fetched, processing is done, tables are updated. Then based on elapsed time since last commit or commit frequency, etc, COMMIT is issued Before every COMMIT is issued, the ckpt_restart table is updated with the Current key for Which processing is complete and the current timestamp. If the program is restarted, it reads the key in the ckpt table and uses that in 2nd cursor to Reposition. Then continues processing.

After the processing is complete for all the rows, the ckpt table keys are set to default Values.

If File inputs are used for processing, then we need to reposition the input record by saving the read_count in the ckpt table. And upon restart perform read in a loop till the count is > the read_count. Or else is the file is sorted on the same key that is stored in the ckpt table, we can Reposition to the next key.

If there are File outputs, they need to be have a disp=Mod in the jcl to continue appending The records.

Dynamic SQLs Static SQL is one wherein the SQL is hardcoded and only the values of host variables used in predicates can change during execution.Static SQL is prepared before execution.In Dynamic SQL, the columns, tables, and predicates are decided at run time.Dynamic SQL is prepared at the time of execution.

Dynamic SQL are of 4 classes –

Execute Immediate –

They are used to implicitly prepare and execute complete sql statements.This cannot be used to SELECT data.

They are not useful if the same statement has to be executed multiple times.Because they are destroyed immediately after execution. And must be Prepared and Executed again.

22

Page 23: DB2 Basics

01 SQL-TEXT. 03 SQL-LEN PIC S9(4) COMP. 03 SQL-TXT PIC X(100) COMP.

Move +38 to SQL-LEN.MOVE “‘DELETE FROM EMPL2 WHERE EMPNO = ‘100’ “ to SQL-TEXTEXEC SQL EXECUTE IMMEDIATE :SQL-TEXTEND-EXEC

Non-select Dynamic SQL –

They are used to Explicitly prepare and execute complete sql statements.The statement preparation and execution are kept separate – PREPARE and EXECUTE.This cannot be used to SELECT data.

EXEC SQL PREPARE STMT1 FROM :SQL-TEXTEND_EXEC

EXEC SQL EXECUTE STMT1END_EXEC

The equivalents of host variables of Static Sql is the Parameter Marker.

Move +38 to SQL-LEN.MOVE “‘DELETE FROM EMPL2 WHERE EMPNO = ? “ to SQL-TEXT

EXEC SQL PREPARE STMT1 FROM :SQL-TEXTEND_EXEC

Move ‘100’ to Var1.EXEC SQL EXECUTE STMT1 using :var1END_EXEC

Useful because prepared once and executed many times.

Fixed-List Select –

To Explicitly prepare and execute sql select statements when the columns to be retrieved are fixed.

‘Select Projno, Projname, Empno from Proj where Projno = ? and Proj_Start_Date = ?’ to SQL-TEXT.

Exec SQL Declare CSR Cursor for FSQLEnd-Exec

Exec SQL Prepare FSQL from :SQL-TEXTEnd-Exec

Exec SQL Open CSR using :var1 :var2End-Exec

23

Page 24: DB2 Basics

Exec SQL Fetch CSR into :Ws-Projno :Ws-Projname :Ws-EmpnoEnd-Exec

Note: This is like a static sql only. But suppose at run time, we need to execute the following

‘Select Projno, Projname, Empno from Proj where Projno = ? and Proj_End_Date = ?’ to SQL-TEXT.

Since the 2 predicates are of same datatype, we can use the same var2. Instead we need to use a different OPEN for the 2nd type.

Varying-List Select -

To Explicitly prepare and execute sql select statements when the columns to be retrieved are also not fixed.

SQLDA – This is the SQL Descriptor Area used by DB2 to communicate information about the Dynamic sql (fixed-List and varying-list Select) to an application program like – type of SQL, the number and data type of columns being returned by the SQL.

This is included as Exec SQL Include SQLDAEnd-Exec

We use SQLDA to code the PREPARE, FETCH statements and also have steps to store host variable addresses in SQLDA.

Suppose an application has to read a sql from a terminal and execute it.

Have 2 SQLDAs - One is the full include and the other with only minimal info – MINSQLDA.

Read the sql at run time from the source and Move ‘sql’ to SQL-TEXT.

Exec SQL Prepare FSQL Into MINSQLDA From :SQL-TEXTEnd-Exec

If SQLD in MINSQLDA = 0/* no variables used ,i.e, a non-select */ Exec SQL Execute Immediate :SQL-TEXT End-Exec

Else

Exec SQL Declare CSR Cursor for FSQLEnd-Exec

Exec SQL Prepare FSQL Into SQLDA From :SQL-TEXTEnd-Exec

Exec SQL OPEN CSREnd-Exec

24

Page 25: DB2 Basics

For each host variable to be retrieved , Set SQLDATA to address of the host-var which will have the retrieved data Set SQLIND to address of the null-indicator field

Exec SQL Fetch CSR Using Descriptor SQLDAEnd-Exec

First determine if it was a select or not.If not a Select then use Execute Immediate.If it is a select, prepare the sql statement

25

Page 26: DB2 Basics

Program Preparation Steps

Program Preparation – This involves preparation of an executable load module and a DB2 application plan for each application .They can be used only together.

The steps involved are as follows –

Source Program + copybooks Precompiler DBRM and Modified Source program Modified Source Cobol Compiler Compiled Source Linkage Editor Load DBRM (Bind Package Package) Bind Plan Plan DB2 Directory

DCLGEN Command when used for a particular table reads the DB2 Catalog to determine the table definition and builds a Cobol copybook . This copybook Contains the Declare Table statement and host variable definitions for the columns in that table.

Precompilation:

Done by Precompiler Expands DB2 INCLUDE members Comments out all the Embedded Sql Text and for every executable Sql, a call is added to the DB2 runtime interface module – DSNHLI along with the necessary parameters. Extracts all the sql statements and places them in Database Request Module – DBRM Places a unique timestamp token in the modified source and DBRM Reports the success or failure of the precompile process. Db2 need not be operational at the time of compilation.

Compilation :

The modified source code is compiled using the standard Cobol Compiler. Db2 need not be operational at the time of compilation.

Bind :

Invokes the DB2 Optimiser and the execution happens in the Relational Data Services Component of DB2 It reads each sql statement from the DBRM and comes up with an optimized access path for that sql. Bind is of 2 types – Bind Package accept as input a single DBRM and it produces and execution logic for only the sqls in that DBRM. It is not executable. One or more packages are bound into an application plan . Bind Plan accepts as input one or more DBRMs and one or more packages produced by Bind Package. It produces an executable sql logic for all the Sqls in the DBRMs attached to it. Plan is the unit of execution, but can be used only with the corresponding Load module.

Bind Plan / Package do the following – Read the Sqls and check the syntax Ensures that the tables and columns accessed are same as what is mentioned in the db2 Catalog. Bind Authorisation of the user is validated.

26

Page 27: DB2 Basics

Determines the Optimal Access Path for each SQL Statement based on the DB2 Catalog Statistics (such as the availability of indexes, organization of data, table Size).

Linkage:

The compiled source is link-edited to create the executable Load.The link-edit step must include an appropriate Cobol-DB2 interface module which will Vary depending on the execution environment.

A DB2 Program has 2 components used in execution – one is load module and the other is application plan.

Execution of a Db2 batch program using TSO command –

//step001 Exec Pgm=IKJEFT01//SYSTPRT DD Sysout=*//SYSPRINT DD Sysout=*//SYSOUT DD Sysout=*//SYSTSIN DD * DSN SYSTEM(DSN) RUN PROGRAM(PROGRAM1) PLAN(PLN01) LIB(xxx.xx.xxxxx)/*//* SYSDBRM has information on every DBRM which is bound into a package or a plan.SYSSTMT has all the SQL statements of a DBRM which are bound into a plan.SYSPACKSTMT has all the SQL statements of a DBRM which are bound into a package.

During BIND PLAN, the following DB2 Catalog tables are read –

SYSCOLDISTSYSCOLDISTSTATSSYSCOLSTATSSYSCOLUMNSSYSINDEXESSYSINDEXSTATS

SYSPLAN SYSPACKAGESYSPLANAUTH SYSPACKAUTHSYSTABLESSYSTABLESPACESYSTABSTATSSYSUSERAUTH

And information about the plan is stored in the following DB2 tables –

SYSDBRMSYSPACKAUTHSYSPACKLIST

SYSPLAN SYSPACKAGESYSPLANAUTH SYSPACKAUTHSYSPLANDEP SYSPACKDEPSYSPLSYSTEM SYSPKSYSTEMSYSSTMT SYSPACKSTMTSYSTABAUTH

During Bind Package, the package is associated with a specific collection id.

//BIND EXEC PGM=IKJEFT01,COND=(5,LT)

27

Page 28: DB2 Basics

//STEPLIB DD DISP=SHR,DSN=DSN710.SDSNLOAD//DBRMLIB DD DISP=OLD,DSN=FDR4378.BABU.FILES//SYSPRINT DD SYSOUT=*//SYSTSPRT DD SYSOUT=*//SYSUDUMP DD SYSOUT=*//SYSTSIN DD * DSN S(DSN) BIND PLAN(FDRPLN01) - QUALIFIER(ID) - MEMBER(DBRM1,DBRM2,….) - PKLIST(COL1.PACKAGE1,COL2.*) - ACTION(REPLACE) - RETAIN - VALIDATE(BIND)- ACQUIRE(USE) - RELEASE(COMMIT) - ISOLATION(CS) - DEGREE(ANY) - EXPLAIN(NO)/*

Collection: It is a logical grouping of packages.During Bind Plan, we specify the DBRMs which are directly bound to the plan and we Also specify the packages which are bound to the plan.The packages are specified as collection_id.Package or collectio_id.* to refer to allThe packages in that collection.

The use of Package Bind provides following advantages – (1) Reduced Bind Time – Suppose a plan has more than one package bound to it. If

changes are made only to one DBRM. We only need to BIND Package for that DBRM and put in the same collection which is associated to the plan. So no need to Bind Plan again.

(2) With the use of Bind at Package level, the isolation and release parameters are specified at the DBRM level, instead of the plan level.

(3) Packages can be versioned and maintained. That is multiple packages can exist with the same name in the same collection and in turn bound to a single plan. At run time, depending on the CONTOKEN of the load, the corresponding package is picked and executed. By Default, DB2 uses Timestamp as version identifier.

Advantage of using Collection:

(1) The same DBRM can be bound into different packages which are associated to different collection ids and using different qualifiers during BIND. And both the collections are used in the BIND PLAN. At run time, the same application can be made to access different sets of DB2 objects by using ‘SET CURRENT PACKAGESET = COLLECTION ID’

(2) Logically related DB2 programs’s packages are grouped into the same collection.

BIND Parameters –

28

Page 29: DB2 Basics

(1) Qualifier – The ID specified here qualifies all the tables which are referred to in that DBRM. If Qualifier is not specified, the default qualifer is the owner which is the primary/secondary auth id.

(2) ACTION - ADD /REPLACE(3) Isolation Level – specifies the mode of page locking used when a pgm is executed.

They are of 4 types –

CS – Cursor Stability

This releases page locks used for read as soon as another page is accessed. This will help in improving Concurrency.

UR – Uncommitted Read

Also called Dirty Read. This facilitates accessing DB2 data without taking any Locks. That is access data which is being changed by some other application.

This avoids concurrency pbms, but doesn’t guarantee accurate data.This isolation applies only to Read statements. For others CS is applied.

This is to be avoided if the results have to be 100% accurate.

RR – Repeatable Read

This is the default . All page locks are held till a COMMIT is issued. This is useful only when the application requires that the same row be accessed more than once and the data fetched during each fetch have to be consistent . Therefore it is essential to ensure the data integrity.

It offers very poor concurrency.

RS – Read Stability

Similar to RR. It doesn’t allow the page lock to be released till COMMIT point. But allows new data to be inserted.

(4) ACQUIRE and RELEASE – These 2 parameters specify the mode of tablespace locking used. And they are specified only at Plan level and not Package level.

ACQUIRE – Use - ts locks are acquired when the tablespace is first accessed -- DefaultAllocate – ts locks are acquired when the plan is allocated.

RELEASE – Commit – ts locks are released during Commit or Rollback. -- DefaultDeallocate – ts locks are released when the plan is deallocated.

(5) VALIDATE - Method of checking the existence and validity of DB2 tables and DB2 access authorization.Bind - The validation done at the time of BindRun - The validation done each time the plan is executed

(6) FLAG(I) – This returns all the information – warning, error and completion messages, indicating the success or failure of Bind.

(7) EXPLAIN(YES) -

(8) RETAIN – For existing plans, we should specify the Retain parm to retain the Bind and Execution authority already granted for this plan. Otherwise all the authority will be revoked.

29

Page 30: DB2 Basics

(9) DEGREE(ANY) – used to indicate to the optimizer to consider parallelism while executing queries against partitioned ts.

(10)NODEFER(PREPARE) or DEFER(PREPARE) – used when accessing Db2 data in a remote location. (11)SQLERROR(CONTINUE / NOPACKAGE) -Continue the Bind even if an error occurs.

DB2 Data types and their Cobol Equivalents

DB2 Data Type Internal Length Cobol WsChar(n) N Pic x(n)Varchar(n) N+2 Pic X(n) (with s9(4) comp)Smallint 2 Pic S9(4) CompInteger 4 Pic S9(9) CompDecimal(p,q) P/2 + 1 Pic S9(p)Vp(s) comp-3Float(n) 8( single prec if n >21) Comp2Float(n) 4(double prec if n <21) Comp1Date 4 Pic X(10)Time 3 Pic X(8)Timestamp 10 Pic X(26)

30

Page 31: DB2 Basics

DB2 Utilities

Data Consistency Utilities –

(1) CHECK Utility Checks referential Integrity betweeb 2 tables and resolves the referential constraint violations by moving the erroneous rows to exception tables. Checks the status of Check Constraints Checks Db2 Indexes for consistency of index data and the corresponding table data – No corr row for a given index value / No corr index value for a table row / For a matching RID, the value in the index and the table don’t match.

(2) REPAIR Utility Used to Reset Pending flags that are unnecessary or are set erroneously. Used to sync up the information abt a DB2 database which is stored in the SYSDATABASE table and the definition of the DBD in the DB2 directory.

(3) REPORT Utility reports the names of TS and Tables which are tied together by referential Integrity

(4) COPY Utility Used to create full or partial image copy of a full TS or a Partition in a TS. Full Copy copies all the data in the TS or partition. Incremental copy copies only those pages that have been modified since the last image copy that was taken. For every run, a row is inserted in SYSCOPY table with info on the image copy dsname, date and time of copy. The image copy datasets are useful for TS recovery.

(5) MERGECOPY Utility Merges multiple image copy datasets into a single image copy dataset

(6) QUIESCE Utility It is used to record a point of consistency for related application or system TS. It ensures that all TS in the scope are referentially intact.

(7) RECOVER Utility RECOVER TABLESPACE Utility restores Tablespaces to a current or previous state. First it checks what all image copies are available for that TS and checks the Db2 Logs for interim changes . Then applies the image copy data and the log data to The TS being recovered. RECOVER INDEX is used to recreate indexes from current data. Indexes are always recovered from the actual table data on which index is created and not from image copy or log data.

DB2 Logs – DB2 keeps a log of all changes made to TS. All updates are recorded in DB2 active log. When the active log becomes full, it creates an archive log. There could be multiple archive logs created during application processing. All the info is stored in the DB2 Directory’s SYSIBM.SYSLGRNG table.

(8) LOAD Utility – used to do bulk inserts into table . It can add or replace existing data.

(8) RUNSTATS – This utility collects statistical information for Tables, Tablespaces, Partitions, Indexes and Columns in tables. It can be used to Update all the information In the relevant catalog tables or can be used simply for generating all the information In the form of a report.

31

Page 32: DB2 Basics

It is this statistical data which is used by the DB2 optimiser to arrive at an optimal Access path. It is good to run RUNSTATS after every LOAD. After running RUNSTATS, the plans and packages with static SQL have to be rebound to have the access paths based on the recent statistics.

(9) REORG – Used to reorganize DB2 Tablespaces and Indexes, thereby improving the Efficiency of access to those objects. REORG reclusters data, resets free space to theAmount specified in CREATE DDL.

Catalog Tables:

1. Syschecks - One row for each Check Constraint2. Syscolumns – One row for every column in a table and view defined .3. Sysdatabase - One row for each database4. Sysdbrm – one row for each dbrm bound into DB2 plans.5. SysforeignKeys – contains information about all columns participating in foreign keys6. Sysindexes – one row for every index7. Syspackage – contains one row for each package8. Syspackauth – contains the privileges held by DB2 users on packages.9. Syspackdep – cross-reference of DB2 objects on which each package is dependent10. Syspacklist – contains the list of DB2 packages that have been bound into Application

Plans.11. Syspackstmt – contains SQL statements for every DB2 package.12. Sysplan – contains one row for each plan.13. Sysplanauth – contains the plan (bind and execute ) privileges held by DB2.14. Sysplandep – crossref of db2 objects used by each plan.15. Sysrels – contains details of referential integrity constraints – the constraint name,

parent table, child table. Deleterule,etc16. Sysstmt – contains SQL statements for every plan.17. SysStogroup 18. SysSynonyms19. Systabauth – contains information on the table privileges held by DB2 users.20. Systablepart – contains information on tablespace partitions 21. Systables 22. Systablespace23. Sysviewdep – contains a cross-reference of DB2 objects on which each view depends.24. Sysviews – contains one row for each view

32


Recommended