JCLS TO ALTER LOCK PARAMETERS OF ANY TABLE (DB2 V 9)
LOCKPART
JCL to alter tablespace lockpart parameter (only for partitioned) to NO
in DB2
//STEPLIB DD DSN=SYS1.DSN900.SDSNLOAD,DISP=SHR
//SYSTSPRT DD SYSOUT=X
//SYSTSIN DD *
DSN SYSTEM(DB2PROD)
RUN PROGRAM(DSNTEP) PLAN(DB2PLAN) -
LIBRARY('DSN.DB2PROD.RUNLIB.LOAD')
END
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSIN DD *
ALTER TABLESPACE PRDX1.TSSMG
LOCKPART NO;
COMMIT;
This will give problem as tablespace is not stopped. it will give following error:
PAGE 1
***INPUT
STATEMENT:
ALTER TABLESPACE PRDX1.TSSMG
LOCKPART NO;
SQLERROR ON ALTER
COMMAND, EXECUTE FUNCTION
RESULT OF SQL STATEMENT:
DSNT408I SQLCODE = -626, ERROR: THE ALTER STATEMENT IS NOT EXECUTABLE BECAUSE
THE PAGE SET IS NOT STOPPED
DSNT418I SQLSTATE = 55015 SQLSTATE RETURN CODE
DSNT415I SQLERRP = DSNXIATS SQL PROCEDURE DETECTING
ERROR
DSNT416I SQLERRD = 155
0 0 -1
0 0 SQL DIAGNOSTIC
INFORMATION
DSNT416I SQLERRD = X'0000009B' X'00000000'
X'00000000' X'FFFFFFFF' X'000
INFORMATION
PAGE 1
***INPUT
STATEMENT:
COMMIT;
RESULT OF SQL STATEMENT:
DSNT400I SQLCODE = 000, SUCCESSFUL EXECUTION
DSNT418I SQLSTATE = 00000 SQLSTATE RETURN CODE
DSNT416I SQLERRD = 0
0 0 -1
0 0 SQL DIAGNOSTIC
INFORMATION
DSNT416I SQLERRD = X'00000000' X'00000000'
X'00000000' X'FFFFFFFF' X'000
An ALTER statement specifies an ADD PART, BUFFERPOOL, USING, PRIQTY, SECQTY, ERASE, or GBPCACHE clause, but the page set is not stopped.
PAGE SET
PAGE SET is a physical grouping of pages. Page sets are of two types:
Linear : DB2 uses linear page sets for simple table spaces, segmented table spaces, and indexes.
Partitioned : DB2 uses partitioned page sets when it implements partitioned table spaces.
Each of the Page set is composed of several types of pages: header page, space map pages, dictionary pages, and data pages.
Here the page set is partitioned which is on table space.
Always check for tablespace status:
tso dsn s(Db2prod)
-stop db(prdx1) sp(tssmg)
confirm using below command
-dis db(prdx1) sp(tssmg)
DSNT361I -P * DISPLAY DATABASE SUMMARY
* GLOBAL
DSNT360I -P
***********************************
DSNT362I -P DATABASE = PRDX1 STATUS = RW
DBD LENGTH
= 1434054
DSNT397I -P
NAME TYPE PART STATUS PHYERRLO PHYERRHI CATALOG PIECE
-------- ---- ----- ----------------- -------- -------- --------
-----
TSSMG TS 0001 STOP
-THRU 0039
******* DISPLAY OF DATABASE PRDX1 ENDED
**********************
DSN9022I -P DSNTDDIS
'DISPLAY DATABASE' NORMAL COMPLETION
DSN
After this resubmit above job and it will be executed successfully.
PAGE 1
***INPUT
STATEMENT:
ALTER TABLESPACE PRDX1.TSSMG
LOCKPART NO;
RESULT OF SQL STATEMENT:
DSNT400I SQLCODE = 000, SUCCESSFUL EXECUTION
DSNT418I SQLSTATE = 00000 SQLSTATE RETURN CODE
DSNT416I SQLERRD = 0
0 0 -1
0 0 SQL DIAGNOSTIC
INFORMATION
DSNT416I SQLERRD = X'00000000' X'00000000'
X'00000000' X'FFFFFFFF' X'000
INFORMATION
ALTER SUCCESSFUL
PAGE 1
***INPUT
STATEMENT:
COMMIT;
RESULT OF SQL STATEMENT:
DSNT400I SQLCODE = 000, SUCCESSFUL EXECUTION
DSNT418I SQLSTATE = 00000 SQLSTATE RETURN CODE
DSNT416I SQLERRD = 0
0 0 -1
0 0 SQL DIAGNOSTIC
INFORMATION
DSNT416I SQLERRD = X'00000000' X'00000000'
X'00000000' X'FFFFFFFF' X'000
LOCKSIZE
Alter tablespace to specify locksize
tablespace using below job and it runs successfully.
//PRODSPU EXEC PGM=IKJEFT01,DYNAMNBR=30
//STEPLIB DD DSN=SYS1.DSN900.SDSNLOAD,DISP=SHR
//SYSTSPRT DD SYSOUT=X
//SYSTSIN DD *
DSN SYSTEM(DB2PROD)
RUN PROGRAM(DSNTEP) PLAN(DB2PLAN) -
LIBRARY('DSN900.DB2PROD.RUNLIB.LOAD')
END
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSIN DD *
ALTER TABLESPACE PRDX1.TSSMG
LOCKSIZE TABLESPACE;
COMMIT;
-start db(prdx1)
sp(tssmg)
DSN9022I -P DSNTDDIS 'START DATABASE' NORMAL COMPLETION
DSN
***
-dis db(prdx1)
sp(tssmg)
DSNT360I -P
***********************************
DSNT361I -P * DISPLAY DATABASE SUMMARY
* GLOBAL
DSNT360I -P
***********************************
DSNT362I -P DATABASE = PRDX1 STATUS = RW
DBD LENGTH
= 1434054
DSNT397I -P
NAME TYPE PART STATUS PHYERRLO PHYERRHI CATALOG PIECE
-------- ---- ----- ----------------- -------- -------- --------
-----
TSSMG TS 0001 RW
-THRU 0039
******* DISPLAY OF DATABASE PRDX1 ENDED
**********************
DSN9022I -P DSNTDDIS
'DISPLAY DATABASE' NORMAL COMPLETION
DSN
This means to change locksize parameter, no need to stop tablespace but to change lock part parameter, stop tablespace.
Confirm lock size change from DB2 Catalog, and also
status (A=> available)
SELECT
NAME
,DBNAME
,BPOOL
,PARTITIONS
,LOCKRULE
,LOCKMAX
FROM SYSIBM.SYSTABLESPACE
WHERE
NAME = 'TSSMG'
AND
DBNAME = 'PRDX1'
WITH
UR ;
Note: when you change locksize to tablespace(or table), lockmax
automatically changes to 0
NAME DBNAME
BPOOL PARTITIONS LOCKRULE
LOCKMAX STATUS
------ --------- -------- ---------- --------
-------- ------
TSSMG PRDX1 BP32K 39 S 0 A
Now, if when we try to alter tablespace lockmax
parameter with value other than 0
, it shows error (because current locksize is
tablespace/ table)
However, if the current locksize was ROW/ANY/PAGE,
there would have been no DB2 error.
//PRODSPU EXEC PGM=IKJEFT01,DYNAMNBR=30
//STEPLIB DD DSN=SYS1.DSN900.SDSNLOAD,DISP=SHR
//SYSTSPRT DD SYSOUT=X
//SYSTSIN DD *
DSN SYSTEM(DB2PROD)
RUN PROGRAM(DSNTEP) PLAN(DB2PLAN) -
LIBRARY('DSN900.DB2P.RUNLIB.LOAD')
END
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSIN DD *
ALTER TABLESPACE PRDX1.TSSMG
LOCKMAX 1000;
COMMIT
PAGE 1
***INPUT
STATEMENT:
ALTER TABLESPACE PRDX1.TSSMG
LOCKMAX 1000;
SQLERROR ON ALTER
COMMAND, EXECUTE FUNCTION
RESULT OF SQL STATEMENT:
DSNT408I SQLCODE = -611, ERROR: ONLY LOCKMAX 0 CAN BE SPECIFIED WHEN THE LOCK
WHEN THE LOCK SIZE OF THE TABLESPACE IS
TABLESPACE OR TABLE
DSNT418I SQLSTATE = 53088 SQLSTATE RETURN CODE
DSNT415I SQLERRP = DSNXIATS SQL PROCEDURE DETECTING
ERROR
DSNT416I SQLERRD = 140
0 0 -1
0 0 SQL DIAGNOSTIC
INFORMATION
DSNT416I SQLERRD = X'0000008C' X'00000000'
X'00000000' X'FFFFFFFF' X'000
INFORMATION
PAGE 1
This error is because lock escalation is not supported from tablespace or table levels.
No comments:
Post a Comment