DB2 – EINE AUFLISTUNG 1. INHALTSVERZEICHNIS 2. Allgemeines ............................................................................................................................................... 1 3. Anlage benötigter Datasets....................................................................................................................... 2 4. Gliederung von DB2 .................................................................................................................................. 2 5. Einmaliges Einstellen der Subsystem Identifier (SSID) .............................................................................. 2 6. SPUFI ......................................................................................................................................................... 3 7. Anlegen einer DB2-Datenbank (komplett) ................................................................................................ 3 8. Anlegen einer STORAGE GROUP (von Rechten abhängig) ....................................................................... 3 9. Anlegen einer Datenbank (von Rechten abhängig) .................................................................................. 3 10. Definition eines Tablespace ...................................................................................................................... 4 11. Definition einer Table................................................................................................................................ 4 12. Füllen einer DB2-Tabelle ........................................................................................................................... 5 13. SELECT in einer DB2-Tabelle mit SPUFI ..................................................................................................... 5 14. Entfernen/Löschen DB2-Elementen mit SPUFI ......................................................................................... 6 15. Transaktionsverarbeitung und DB2 .......................................................................................................... 6 16. Stored Procedures (auch TP light) ............................................................................................................. 6 17. Transaktionsmonitoren (TP Monitor) ....................................................................................................... 7 18. Sperren (lock) ............................................................................................................................................ 7 19. Interessante Video-Links ........................................................................................................................... 7 2. Allgemeines DB2 gibt es als „DB2“ für z/OS und als „DB2 UDB“ für Linux, Unix und Windows. „DB2 express“ läuft auf Windows und ist kostenlos. „DB2 Everyplace“ ist ein kleiner Bruder von „DB2 UDB“ für Mobiltelefonie ecc. DB2 hat viele Schnittstellen zu anderen Systemen (Programmiersprachen wie COBOL, PL/1, Java usw. oder Skriptsprachen wie REXX). DB2 greift zum Optimieren der Zugriffe u.a. auf ein Expertensystem zu. Dieses arbeitet mit Tabellenstatistiken. Diese Statistiken können mit dem Tool „RUNSTATS“ aktualisiert werden. 3. Anlage benötigter Datasets In ISPF die Option 3.2 „Data Set Utility“ auswählen. Vier neue Partitioned Dataset (PDS) allokieren – mit „A“ – für: o CICS (für Programmcode, BMS (Masken), JCL) o SPUFI (für DB2-Befehle – Anlegen, Ändern, Indizieren, Löschen, Dateneinfügung usw.) o DBMOD (für alle Ergebnisse aus Zwischenschritten) o LIB (ebenfalls für alle Ergebnisse aus Zwischenschritten) 4. Gliederung von DB2 DB2 besitzt eine vierteilige Hierarchie: o Storage Group: ist die oberste Stufe (enthält physische Angaben zur Größe, Art und Ort der benötigten Speichers im Speichermedium). o Database: Jede Storage Group nimmt eine DB2-Database auf (Definition des Datenbanknamens, des Caches (fixe Datenabbildung im Hauptspeicher, =Bufferpool). o Table Space: Jede Database besitzt einen oder mehrere Table Spaces (Reservierung von physischem Speicherplatz für die Tabelle). o Table: Jeder Table Space enthält exakt eine Tabelle (Definition der Tabellenstruktur, Tabellenname usw.). o 5. Einmaliges Einstellen der Subsystem Identifier (SSID) Folgendes ist nur bei erstmaliger Verwendung des DB2-Subsystems notwendig: In ISPF folgendes Eingabepanel aufrufen: 1. „MORE“, 2. „DB2 V8“, 3. „DB2 DEFAULTS“. Den „DB2 NAME“ (zu erfragen) und „DB2 CONNECTION RETRIES = 0“ eingeben (Rest unverändert). Das Panel sollte ähnlich dem folgenden aussehen: COMMAND ===> Change defaults as desired: 1 2 3 4 5 6 7 8 9 10 DB2 NAME ............. ===> DB2 CONNECTION RETRIES ===> APPLICATION LANGUAGE ===> LINES/PAGE OF LISTING ===> MESSAGE LEVEL ........ ===> SQL STRING DELIMITER ===> DECIMAL POINT ........ ===> STOP IF RETURN CODE >= ===> NUMBER OF ROWS ....... ===> CHANGE HELP BOOK NAMES?===> BEZ-SSID 0 IBMCOB 60 I DEFAULT . 8 20 NO Mit „ENTER“ weitere Panels abhaken. (Subsystem identifier) (How many retries for DB2 connection) (ASM, C, CPP, IBMCOB, FORTRAN, PLI) (A number from 5 to 999) (Information, Warning, Error, Severe) (DEFAULT, ' or ") (. or ,) (Lowest terminating return code) (For ISPF Tables) (YES to change HELP data set names) 6. SPUFI SPUFI = SQL Processing Using File Input. Die SQL-Befehle in einem Programm werden mit diesem übersetzt und ausgeführt. Mit SPUFI kann man SQL-Befehle auch außerhalb eines Programms schreiben, übersetzen und ausführen. Die SQL-Befehle werden dazu eingebettet in einer Datei abgesetzt. 7. Anlegen einer DB2-Datenbank (komplett) 4 Member anlegen (siehe auch „Gliederung von DB2“): o xxx.xxx.111 - Zur Anlage von Speicherplatz für die DB2-Datenbank (Erlaubnis dazu? -> Benutzerrechte) o xxx.xxx.222 - Zur Anlage der Datenbank (Erlaubnis dazu? -> Benutzerrechte) o xxx.xxx.333 - Zur Anlage des Speicherplatzes für eine Tabelle o xxx.xxx.444 - Zur Anlage der Tabelle 8. Anlegen einer STORAGE GROUP (von Rechten abhängig) SPUFI aufrufen: SPUFI ===> SSID: D931 Enter the input data set name: (Can be sequential or partitioned) 1 DATA SET NAME ... ===> xxx.xxx.IN(STOR1) (Wird autom. angelegt . Hier wird die Eingabe gespeichert) 2 VOLUME SERIAL ... ===> (Enter if not cataloged) 3 DATA SET PASSWORD ===> (Enter if password protected) Enter the output data set name: 4 DATA SET NAME ... ===> xxx.xxx.OUT Specify processing options: 5 CHANGE DEFAULTS ===> YES 6 EDIT INPUT ...... ===> YES 7 EXECUTE ......... ===> YES 8 AUTOCOMMIT ...... ===> YES 9 BROWSE OUTPUT ... ===> YES (Must be a sequential data set) (Wird automatisch angelegt) (Y/N (Y/N (Y/N (Y/N (Y/N - Display SPUFI defaults panel?) Enter SQL statements?) Execute SQL statements?) Commit after successful run?) Browse output data set?) For remote SQL processing: 10 CONNECT LOCATION ===> Die Standardwerte des nächsten Panels mit „ENTER“ übernehmen. Es wird nun ein leeres Eingabe-Panel angezeigt. Hier folgenden SQL-Befehl eingeben: CREATE STOGROUP STO01 VOLUMES (SCPMV5) VCAT DSN510; STOGROUP = Interner SPUFI-Name / STO01 = Symbolischer Name F3-Taste + ENTER drücken. Im Output-Member (output data set name)steht das Ergebnis von SPUFI. 9. Anlegen einer Datenbank (von Rechten abhängig) SPUFI aufrufen: SPUFI ===> SSID: D931 Enter the input data set name: (Can be sequential or partitioned) 1 DATA SET NAME ... ===> xxx.xxx.IN(DAT1) (Wird autom. angelegt . Hier wird die Eingabe gespeichert) 2 VOLUME SERIAL ... ===> (Enter if not cataloged) 3 DATA SET PASSWORD ===> (Enter if password protected) ... 10 CONNECT LOCATION ===> Die Standardwerte des nächsten Panels mit „ENTER“ übernehmen. Es wird nun ein leeres Eingabe-Panel angezeigt. Hier folgenden SQL-Befehl eingeben: CREATE DATABASE DATBA01 STOGROUP STO01 BUFFERPOOL BP0; F3-Taste + ENTER drücken. Im Output-Member (output data set name)steht das Ergebnis von SPUFI. 10. Definition eines Tablespace SPUFI aufrufen: SPUFI ===> SSID: D931 Enter the input data set name: (Can be sequential or partitioned) 1 DATA SET NAME ... ===> xxx.xxx.IN(TABSP1) (Wird autom. angelegt . Hier wird die Eingabe gespeichert) 2 VOLUME SERIAL ... ===> (Enter if not cataloged) 3 DATA SET PASSWORD ===> (Enter if password protected) ... 10 CONNECT LOCATION ===> Die Standardwerte des nächsten Panels mit „ENTER“ übernehmen. Es wird nun ein leeres Eingabe-Panel angezeigt. Hier folgenden SQL-Befehl eingeben: CREATE TABLESPACE SPACE01 IN DATBA01 USING STOGROUP STO01 PRIQTY 60 SECQTY 60 ERASE NO BUFFERPOOL CLOSE NO; F3-Taste + ENTER drücken. Im Output-Member (output data set name)steht das Ergebnis von SPUFI. 11. Definition einer Table SPUFI SPUFI aufrufen: SSID: D931 ===> Enter the input data set name: (Can be sequential or partitioned) 1 DATA SET NAME ... ===> xxx.xxx.IN(TAB1) (Wird autom. angelegt . Hier wird die Eingabe gespeichert) 2 VOLUME SERIAL ... ===> (Enter if not cataloged) ... 10 CONNECT LOCATION ===> Die Standardwerte des nächsten Panels mit „ENTER“ übernehmen. Es wird nun ein leeres Eingabe-Panel angezeigt. Hier folgenden SQL-Befehl eingeben: CREATE TABLE TAB001 ( NAME CHAR(40) NOT NULL, BERUF CHAR(40) NOT NULL ) IN DATBA01.SPACE01; F3-Taste + ENTER drücken. Im Output-Member (output data set name)steht das Ergebnis von SPUFI. 12. Füllen einer DB2-Tabelle SPUFI aufrufen: SPUFI ===> SSID: D931 Enter the input data set name: (Can be sequential or partitioned) 1 DATA SET NAME ... ===> xxx.xxx.IN(EINFUEG) (Wird autom. angelegt . Hier wird die Eingabe gespeichert) 2 VOLUME SERIAL ... ===> (Enter if not cataloged) ... 10 CONNECT LOCATION ===> Die Standardwerte des nächsten Panels mit „ENTER“ übernehmen. Es wird nun ein leeres Eingabe-Panel angezeigt. Hier folgenden SQL-Befehl eingeben: INSERT VALUES INSERT VALUES INTO TAB001 ('KARL', 'BLAUER'); INTO TAB001 ('OTTO', 'HAFENKAMP'); F3-Taste + ENTER drücken. Im Output-Member (output data set name)steht das Ergebnis von SPUFI. 13. SELECT in einer DB2-Tabelle mit SPUFI SPUFI SPUFI aufrufen: SSID: D931 ===> Enter the input data set name: (Can be sequential or partitioned) 1 DATA SET NAME ... ===> xxx.xxx.IN(SELECT) (Wird autom. angelegt . Hier wird die Eingabe gespeichert) 2 VOLUME SERIAL ... ===> (Enter if not cataloged) ... 10 CONNECT LOCATION ===> Die Standardwerte des nächsten Panels mit „ENTER“ übernehmen. Es wird nun ein leeres Eingabe-Panel angezeigt. Hier folgenden SQL-Befehl eingeben: SELECT * FROM DATABA01.TAB001; F3-Taste + ENTER drücken. Im Output-Member (output data set name)steht das Ergebnis von SPUFI. 14. Entfernen/Löschen DB2-Elementen mit SPUFI Das System erlaubt die Löschung eines DB2-Elements nur dann, wenn keine anderen DB2-Elemente mehr von dem zu löschenden Element abhängig sind. Sollte dies der Fall sein, listet die Fehlermeldung des DROP-Befehls die abhängigen Elemente auf. Diese können/müssen vorab gelöscht werden. SPUFI aufrufen und, wie vorab beschrieben, ein Member auswählen/neu anlegen: Folgenden SQL-Befehl ausführen: DROP STOGROUP STO01; oder DROP TABLESPACE SPACE01; oder DROP DATABASE DATABA01; 15. Transaktionsverarbeitung und DB2 Die Daten der DB2-Datenbank gilt es konsistent zu halten. Besonders bei Online-Zugriffen über mehrere Ein-/Ausgabebildschirme ist dies wichtig. DB2 stellt dafür Mittel zur Verfügung: o exec sql begin_transaction Eine Transaktion wird gestartet. o exec sql commit Der Datenbestand wird festgeschrieben. o exec sql rollback Der Datenbestand wird auf den Zustand bei „begin_transaction“ zurückgesetzt. 16. Stored Procedures (auch TP light) Durch Stored Procedures läuft das SQL-Statement nicht auf dem Klient sondern auf dem Server ab. Dadurch wesentlich höhere Performance, da weniger Datenvolumen über das Netzwerk geht. Der Klient stellt Verbindung mit Datenbank her: EXEC SQL CONNECT TO yyy_Datenbankname Der Klient ruft das SQL-Statement in diesem Fall so auf: EXEC SQL CALL xxx_Prozedurname (Parameter1, Parameter2) o Parameter1 = SQLDA (bei DB2) für Datenaustausch o Parameter2 = für Return-Codes und Meldungen an Klient Der Server führt eine SQL-Gruppe unter Beachtung von ACID aus (acid oder akid für Atomarität, Konsistenzerhaltung, Isolation und Dauerhaftigkeit), also mit commit und rollback. Ein einziger Aufruf einer Stored Procedur kann zum Anlegen, Verändern, Löschen usw. vieler Datenbanksätze führen, je nach Programm-/Anwendungslogik. 17. Transaktionsmonitoren (TP Monitor) Anstelle von Stored Procedures laufen auf Mainframes überwiegend Transaktionsmonitoren. Sie sind Stored Procedures überlegen. Beispiele für Transaktionsmonitoren sind: CICS, SAP R/3, Transaction Server (MTS v. Microsoft) und, für die objektorientierte Programmierung, EJB JTS (Java Bean). 18. Sperren (lock) Das Prinzip der Locks gilt nicht nur für Datenbanken sondern ebenfalls für Transaktionen. o GetReadLock reserviert S Lock (shared ), o GetWriteLock reserviert E Lock (exclusive), o PromoteReadtoWrite bewirkt Zustandswechsel S → E, o Unlock gibt Lock frei. 19. Interessante Video-Links Einführung in DB2: http://www.youtube.com/watch?v=6noAMY3PcB8 Installation von DB2: http://www.youtube.com/watch?v=LwhkvldombM Videos der „Independent DB2 Users Group“ (idug): o http://www.idug.org/p/cm/ld/fid=85 o http://www.idug.org/p/cm/ld/fid=86