COURSE Tagung Bad Hersfeld 2008 DB2 UDB im z/VSE Heinz Peter Maassen – Lattwein GmbH DB2 UDB im z/VSE Start Parameter Anpassung Programmierung CPG/HL1 Ausnahmen Start Parameter // // // // // // * // JOB DB2START START DB2 IN MULTIPLE USER MODE mit UDB LIBDEF *,SEARCH=(PRD2.TCPIP15E,PRD2.DB2740) SETPFIX LIMIT=120K EXEC PROC=ARIS74DB *-- DB2 DATABASE ID PROC EXEC PROC=ARIS74SL *-- DB2 PRODUCTION LIBRARY ID PROC ASSGN SYS098,SYSPCH DBNAME=SQLDS NCUSER=12 (3 CICSF5, 3 CICSF7, 3 CICSF8, 3 BATCH ) EXEC ARISQLDS,SIZE=8M,PARM='DBNAME=SQLDS,NCUSERS=12,RMTUSERS=3, PROTOCOL=AUTO,PROCMXAB=12' /* /& // // // // // // * // /* /& JOB DB2START START DB2 IN MULTIPLE USER MODE Ohne UDB LIBDEF *,SEARCH=(PRD2.TCPIP15E,PRD2.DB2740) SETPFIX LIMIT=120K EXEC PROC=ARIS74DB *-- DB2 DATABASE ID PROC EXEC PROC=ARIS74SL *-- DB2 PRODUCTION LIBRARY ID PROC ASSGN SYS098,SYSPCH DBNAME=SQLDS NCUSER=12 (3 CICSF5, 3 CICSF7, 3 CICSF8, 3 BATCH ) EXEC ARISQLDS,SIZE=AUTO,PARM='DBNAME=SQLDS,NCUSERS=12,RMTUSERS=3' X ARISDIRD CATALOG ARISDIRD.A REPLACE=YES * THIS FILE CONVERTED BY ARICCDID PROC 20020208 10:40:44 FROM R51 INPUT * PRD4.DB2510.ARISDIRD.A INTO PRD2.DB2740.ARISDIRD.A * TYPE=LOCAL DBNAME=SQLDS APPLID=SYSARI00 TCPPORT=446 SYSDEF=Y * TYPE=LOCALAXE DBNAME=SQLDS APPLID=SYSARI00 TPN=07F6C4C2 * TYPE=REMOTE DBNAME=CPGDB TCPPORT=50000 IPADDR=192.168.197.20 * /+ Dann: // JOB ARISBDID -- DBNAME DIRECTORY SERVICE GENERATION erstellen Lokal: SQLDS Remote: CPGDB DRDA Support Linken // // // // JOB ARIS745D STEP 2 JOB ARIS742D ARIS74LD: LINK LINK LINK LINK EDIT EDIT EDIT EDIT ONLINE RESOURCE ADPATER WITH DRDA ONLINE RESOURCE ADPATER DRDA ROUTER RDS WITH DRDA SERVER SUPPORT BATCH RESOURCE ADAPTER WITH DRDA CODE Dann: // JOB ARIS120D * ********************************************************** * ARIS120D: RELOAD THE ISQL PACKAGE * ********************************************************** // EXEC PGM=ARIDBS,SIZE=AUTO,PARM='DBNAME(CPGDB)' CONNECT CPGDBA IDENTIFIED BY CPGDBAPW TO CPGDB; RELOAD PROGRAM (SQLDBA.ARIISQL) REPLACE KEEP INFILE(SYSIPT BLKSZ(80) PDEV(DASD)); READ MEMBER ARIISQLM /* COMMIT WORK; /* /& CPG/ HL1 mit DB2 UDB CPG und HL1 können mit CPGPREP Inline SQL Statements interpretieren und ausführen. DB2PREP ist ein Preprozessor, der erst Assembler DB2 Statements erzeugt, die dann mit Original IBM DB2 Preprozessor den Source Code ergeben. QSAT kann sowohl in der VSE DB2 Umgebung als auch in der UDB eingesetzt werden. QPG und DB2 UDB Bei QPG muss das SQL Interface in der UDB installiert sein. Das sind die Packages HMXPRSQ für CICS und HMYPRSQ für Batch. Dann kann das QPG Programm nach SQL CONNECT :UID IDENTIFIED BY :PWD TO :UDB auf die UDB mit dynamischen SQL Statements (ohne DECLARE CURSOR FOR ... und SELECT INTO ...) zugreifen. Ansonsten gibt es die gleichen Einschränkungen wie im CPG/HL1 Leider unterstützt die UDB bisher nicht alle extended dynamischen Befehle. CPG/ HL1 mit DB2 UDB HL1 / CPG Programme - SQL UPDATE CPGDBA.KUNDEN * - SQL SET FIRMA = :FIRMA * - SQL WHERE KDNRA = :KDNR User Application = Sicht Gen. ASM Code = System Sicht CALL HOSTVAR DC C‘FIRMA‘,X‘2E‘,C‘ ‘ DC C‘KDNRA‘,X‘05‘,C‘ ‘ CALL SQLCMD DC C‘UPDATE‘,X‘002C‘ HOSTVAR SQLCMD Defaults setzen: Ab QSAT 2.5 kann eine Default DB2 DB sowohl für den Compile als auch für QSAT definiert werden. Hierzu wird der Source Code von QSATDIR angepasst, ein Objekt erstellt und die Phasen entsprechend neu gelinkt. QSATDIR.A QSATDIR CSECT *---------------------------------------------------------------------* * QSAT DIRECTORY FUER DB2 TYPE * * ---------------------------* * DIESE TABELLE WIRD IM QSAT UND BEIM PREPROZESS VERWENDET UM ZU * * ENTSCHEIDEN, WELCHE SQL BEFEHLE ZUR DATENBANK ERLAUBT SIND. * * AUSSERDEM WIRD IM QSAT ENTSCHIEDEN, WELCHE HL1 MODULE AUFGERUFEN * * WERDEN, DA DIE SYSTEM TABELLEN UNTERSCHIEDLICHE NAMEN IN DER UDB * * ODER IM SQLDS HABEN. * *---------------------------------------------------------------------* * AUFBAU DER TABELLE: * * ------------------* * DBNAME DC CL18'SQLDS' 1 - 18 DBNAME * * DBTYPE DC CL3'VSE' ODER 'VM ' ODER 'UDB' 19 - 21 DBTYPE * * --------------------------------------------------------------------* SQLDS DC CL18'SQLDS',CL3'VSE' * CPGDB DC CL18'CPGDB',CL3'UDB' * DBMAS DC CL18'DBMAS',CL3'UDB' * ENDDIR DC F'-1' * * END , END IN ASMA90 , END DO NOT REMOVE COMMA * Benutzen: In ISQL Start Kann die UDB Direkt eingetragen werden. Anzeige Tabelle mit ISQL: Das ist das CPGDD für DB2 Programmierung. View Table Direkt in der Steuerzentrale der DB2 UDB unter Windows XP. Programmierung: // JOB DB2UMW /* EXEC CPGPREP,SIZE=512K,PARM='PUNSOURCE,LIST,NOPRINT,ISOL(CS),DB(SQLD /* S),USERID=CPGDBA/CPGDBAPW,QSATDB(CPGDB),QSATPW(CPGDBAPW)' // EXEC CPGPREPW,SIZE=512K,PARM='PUNSOURCE,LIST,NOPR,ISOL(CS),DB(CPGDB)* ,USERID=CPGDBA/CPGDBAPW,QSATDB(CPGDB),QSATPW(CPGDBAPW)' - OPTIONS MAIN HL1 H COM ADD 0 TITLE SQL#SERVER PHASE TST039 ASS A DIC DEF BIG. - *--------------------------------------------------------------* - * TEST INSERT MIT NULL FELDERN * - *-------------------------------------------------MAS-30.04.08-* - -D. - SQL BEGIN DECLARE SECTION ............ Hier folgt das Programm /* ... Was nicht geht: Bei DRDA sind einige wichtige und Performance sparende Funktionen leider nicht unterstützt, besonders im Bereich dynamischer Befehle: Nullwerte werden beim INSERT Befehl nicht unterstützt, es kommt SQLCODE –309! DRDA unterstützt kein SELECT ... INTO. Das muss mit einem DECLARE CURSOR, OPEN, FETCH , CLOSE gelöst werden. WHERE CURRENT OF ... geht nicht Zum Teil werden hierdurch erhebliche Programmänderungen erforderlich! Noch Fragen ?