Friedrich-Schiller-Universität Jena Fakultät für Mathematik und Informatik Institut für Informatik Lehrstuhl für Datenbanken und Informationssysteme Prof. Dr. Klaus Küspert Bernhard Pietsch Informationen und Hinweise zur Lehrveranstaltung Datenbanksysteme Projekt SS 2013 Für die Arbeit im Praktikum werden Ihnen spezielle Unix-Accounts zur Verfügung gestellt, die Ihnen den Zugriff auf das am Lehrstuhl verwendete Datenbanksystem DB2 Universal Database V8.2 gestatten. Bevor Sie mit der Arbeit beginnen, sollten Sie die folgenden Hinweise und Gebrauchsanleitungen aufmerksam lesen und natürlich beachten. Es wird davon ausgegangen, dass Sie bereits Erfahrung im Umgang mit Unix-Systemen und den zugehörigen Hilfsprogrammen haben. Zugang zum Datenbankserver Rechnername: iibm08.inf.uni-jena.de (iibm08) Betriebssystem: IBM AIX 5.2 Datenbanksystem: IBM DB2 Universal Database V8.2 Fixpack 11 DB-Instanz: db2iprak Projekt0-Datenbank: Projekt0-Login: Teamprojekt-Datenbank: Teamprojekt-Login: Initiale Passwörter: terra prak?? team?? team?? werden bekannt gegeben Sie benötigen für die Arbeit im Praktikum einen Account im LinuxPool bzw. eine andere Zugangsmöglichkeit zur iibm08. Login von einem Windows-Rechner Für das Einloggen auf dem Lehrstuhlserver iibm08 von einem Windows-Rechner (z.b. WinPool) müssen Sie, wenn nicht bereits geschehen, zunächst das X-Applikationen-Programm WinaXe (z.b. über Start Programme WinaXe Xsession) für einen Rechner im UnixPool bzw. LinuxPool (z.b. ppc231 aus dem LinuxPool) konfigurieren und starten. Danach können Sie sich mit ssh weitervermitteln lassen. Alternativ können Sie sich über einen ssh-client wie PuTTY direkt zur iibm08 verbinden, eine Umleitung der Bildschirmausgabe ist dabei nicht möglich. Beachten Sie bitte in beiden Fällen die weiteren Hinweise zur erstmaligen Anmeldung im folgenden Abschnitt. 1
Login von einem Linux- bzw. Unix-Rechner Für das Einloggen von einem Linux-/Unix-Rechner (z.b. ppc231) müssen Sie über ssh eine Verbindung herstellen 1 und mit Parameter -X die Bildschirmausgabe der iibm08 auf Ihren Rechner umleiten. Andere nicht-standardisierte bzw. nicht-verschlüsselte Protokolle wie telnet werden nicht unterstützt. Nach dem ersten Einloggen auf der iibm08 werden Sie aufgefordert, ein neues Passwort anzugeben, tun Sie dies! Sollte diese Aufforderung nicht erscheinen, ändern Sie es bitte selbst mit dem Unix- Befehl passwd. Aufgrund dieser Passwort-änderung funktioniert allerdings nach dem ersten Einloggen die Umleitung der Bildschirmausgabe nicht, deswegen beenden Sie bitte einmalig die Verbindung und loggen sich erneut ein. Zusammengefasst ergeben sich folgende Schritte für die erste Anmeldung: > ssh -X iibm08.inf.uni-jena.de -l login (iibm08:login) $ passwd (bzw. automatische Passwort-änderung) (iibm08:login) $ exit > ssh -X iibm08.inf.uni-jena.de -l login Arbeitsweise auf dem Datenbankserver Editoren und Datentransfer Als Editor können Sie auf dem Datenbankserver emacs oder vi verwenden. Es empfiehlt sich jedoch, den Editor auf dem lokalen Rechner (z.b. im FRZ) zu verwenden und aus dem Editor heraus auf die Dateien auf der iibm08 zuzugreifen. Für den Datentransfer zwischen der iibm08 und Ihrem lokalen System kann entweder sftp (kommandozeilenbasiert) oder ein auf diesem Protokoll aufbauendes graphisches Tool verwendet werden. Hierfür bieten sich auf Windows-Systemen beispielsweise die Open-Source-Programme Win- SCP 2 oder FileZilla 3 an. Im Linux-Pool ist mit KNetAttach bereits ein entsprechendes Tool installiert. Nach dessen Aufruf ist die Option Secure Shell (ssh) zu wählen, anschließend sind die Eingabeparameter wie folgt auszufüllen: Name: iibm08 Benutzer: prak?? bzw. team?? Server: iibm08.inf.uni-jena.de Port: 22 Ordner: /home/db2prak/prak/prak?? bzw. /home/db2prak/prak/team?? Wurde die Verbindung nach Eingabe des Passwortes erfolgreich hergestellt, ist diese von nun an im Dateimanager unter Netzwerk/iibm08 zu finden. Nutzungshinweise Die iibm08 ist als Datenbankserver gedacht. Benutzen Sie also Ihre dortigen Accounts bitte nicht für das Surfen im Internet oder das Auslagern von Datenbeständen. Bitte beachten Sie die Nutzerordnung des FRZ. 1 Beantworten Sie die ggf. an Sie gestellte Frage nach der Meldung The authenticity of host iibm08.inf.uni-jena.de (141.35.14.116) can t be established. mit yes. 2 http://winscp.net/eng/docs/lang:de 3 http://www.filezilla.de/ 2
Sichern Sie alle Daten auf der iibm08 anderweitig, der Lehrstuhl erstellt keinerlei Backups. Bei technischen Problemen fragen Sie bitte den Praktikumsbetreuer. Arbeitsweise mit DB2 Die komplette Dokumentation zur verwendeten Version 8.2 von DB2, d.h. das DB2 Information Center, finden Sie unter: http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp Arbeiten mit dem CLP Die Arbeit mit DB2 erfolgt mit dem Command Line Processor (CLP), dessen wichtigste Optionen hier kurz erläutert werden sollen: db2 [option...] [db2-command sql-statement [? [phrase message sqlstate class-code]]]? -t gibt einen Hilfetext zu dem spezifizierten DB2-Kommando oder der DB2- (Fehler)Nachricht aus. Beispiel: > db2? options spezifiziert, dass das Trennzeichen für SQL-Anweisungen und DB2-Kommandos ein Semikolon (;) sein soll. Standard ist CR. -finfile liest die SQL-Anweisungen und DB2-Kommandos aus der angegebenen Datei infile. Beachten Sie hierzu die Option -t. Beispiel: > db2 -t -fscript.sql liest Anweisungen aus script.sql, die mit einem Semikolon getrennt sind. -zoutfile schreibt alle Ausgaben in die angegebene Datei outfile. +c -s deaktiviert das Auto-Commit, d. h. die ausgeführten SQL-Anweisungen werden erst dann wirksam, wenn Sie explizit den Befehl commit geben. Wollen Sie die abgeschickten Anweisungen rückgängig machen, so können Sie das mit rollback erreichen. Beendet die Ausführung eines Skripts, wenn ein Fehler aufgetreten ist. Standardverhalten ist das Weitergehen zur nächsten Anweisung. Der CLP kann in drei verschiedenen Modi gestartet werden. Im Befehlsmodus wird jedem Kommando das Schlüsselwort db2 vorangestellt (s. o.). Sie können Anweisungen an den CLP auch direkt auf der Shell-Kommandozeile übergeben. Wenn diese allerdings Sonderzeichen enthalten, welche von der Shell interpretiert werden (*, Klammern,... ), so ist die Anweisung in doppelte Anführungszeichen zu setzen. Beispiel: 3
> db2 connect to TERRA; > db2 "select * from instmkf.berg"; In den interaktiven Modus des CLP wechseln Sie mit folgendem Programmaufruf: > db2 -t Als Eingabeaufforderung erscheint db2 =>. Anweisungen wird bei diesem Modus kein db2 vorangestellt, sie müssen wegen der Option -t mit ; abgeschlossen werden (s. o.). In folgenden Beispielen wird, wenn nicht anders gekennzeichnet (>), davon ausgegangen, dass wir uns im interaktiven Modus befinden. Der interaktive Modus kann durch die Eingabe von oder QUIT; TERMINATE; beendet werden. Benutzen Sie TERMINATE, wenn Sie die Arbeit mit der Datenbank beenden wollen, dann werden alle gestarteten Prozesse der aktuellen Verbindung entfernt und der allokierte Speicher freigegeben. Beim Batch-Modus des CLP werden SQL-Anweisungen und DB2-Kommandos in eine Textdatei mit der Endung.sql geschrieben und ausgeführt. Dies bietet den Vorteil, dass Sie beim Editieren die Fähigkeiten des Editors ausnutzen können. Außerdem können Sie die Anweisungen problemlos reproduzieren. Bei der Erstellung von Skripten können Sie Kommentare einfügen, indem Sie -- vor die Kommentarzeile stellen. Machen Sie von dieser Möglichkeit Gebrauch, insbesondere zum Dokumentieren der Aktionen bei den abzugebenden Lösungen! Beispiel eines Skripts (script.sql): ----------------------------------------------- -- Beispiel fuer eine Create Table-Anweisung -- ----------------------------------------------- CREATE TABLE angest ( pnr INTEGER NOT NULL PRIMARY KEY, name VARCHAR(20) NOT NULL ); COMMIT; Die Ausführung erfolgt dann mit: > db2 -t +c -s -f script.sql Die Ausgabe des Skripts kann bei Bedarf mit der Option -z oder mit Mitteln der Shell in eine Datei umgeleitet werden. 4
Verbinden und Abmelden Bevor mit einer DB2-Datenbank, wie beispielsweise der TERRA-Datenbank, gearbeitet werden kann, muss man sich mit ihr verbinden. Dies geschieht über die DB2-Anweisung: CONNECT TO terra; Nach dem Verbinden können Sie SQL-Anweisungen an ihre Tabellen in der Datenbank richten. Um die Verbindung zu einer Datenbank wieder zu trennen, benutzen Sie die DB2-Anweisung: CONNECT RESET; Trennen Sie vor dem Ausloggen die Verbindung zur Datenbank und beenden Sie jeden gestarteten interaktiven CLP mit bzw. TERMINATE; > db2 TERMINATE wenn sie ihn vorher bereits mit quit verlassen hatten. Schemata Alle Objekte in einer DB2-Datenbank werden grundsätzlich mit einem Schemanamen qualifiziert. Ein Schema ist ein Namensraum. So gibt es in der Beispieldatenbank keine Tabelle namens BERG sondern nur eine Tabelle INSTMKF.BERG. Wird in einer SQL-Anweisung ein Objekt (Tabelle, Sicht,...) ohne Schemaname referenziert, so wird das Spezialregister CURRENT SCHEMA konsultiert. Der Wert des Registers wird per Default auf den Namen des aktuellen Nutzers gesetzt, also z.b. PRAK00. Der Wert kann mittels SET CURRENT SCHEMA =... modifiziert und mit VALUES CURRENT SCHEMA abgefragt werden. 4 Eine Tabelle in einem anderen Schema kann nur mit ihren vollständig qualifizierten Namen angesprochen werden. Es ist zu beachten, dass das CURRENT SCHEMA Register nur für SQL-Anweisungen verwendet wird. DB2 Kommandos wie LIST TABLES sind keine SQL-Anweisungen. Nutzerdefinierte Datentypen DB2 bietet über distinct types eine rudimentäre Implementierung nutzerdefinierter Datentypen, welche in der Datenbank TERRA verwendet werden. Distinct types erlauben nur Umbenennungen von Basisdatentypen und somit das Ausnutzen strenger Typisierung, Beispiel: CREATE DISTINCT TYPE namen AS VARCHAR(20) WITH COMPARISONS; Durch die Klausel WITH COMPARISONS werden automatisch Funktionen für den Vergleich von Werten des definierten Typs angelegt. Damit DB2 diese sowie andere definierte Funktionen auch in fremden Schemata findet, muss der Suchpfad entsprechend gesetzt werden. Beispiel der Pfaderweiterung um das TERRA-Schema INSTMKF: SET CURRENT FUNCTION PATH = CURRENT FUNCTION PATH, INSTMKF; Bitte beachten Sie, dass bei Vergleichen von zwei Attributwerten beide vom selben oder von kompatiblen Datentypen sein müssen. Sind diese Voraussetzungen nicht gegeben (entsprechende Fehlermeldung von DB2), so ist eine explizite Typumwandlung (z.b. zum Basistyp eines distinct type oder umgekehrt) notwendig. 4 VALUES ist hierbei eine SQL-Anweisung, die eine Tabelle kreiert also ein Table-Konstruktor. 5
Umgang mit Warn- und Fehlermeldungen Oft verzweifelt man im Umgang mit SQL an (Syntax-)Fehlern und kann sich die mögliche Ursache nicht erklären. sqlcode bzw. sqlstate liefern genauere Informationen. Dabei liefert der standardisierte sqlstate lediglich eine kurze und häufig wenig hilfreiche Erklärung. Daher sollte der Fokus auf dem sqlcode liegen. Auf der Kommandozeile kann man folgendermaßen vorgehen, um sich nähere Erklärungen für das Fehlschlagen jüngster SQL-Statements einzuholen: (iibm08:prak00) \$db2 "select * from instmkf.land" SQL1024N A database connection does not exist. SQLSTATE=08003 (iibm08:prak00) \$db2? 08003 SQLSTATE 08003: The connection does not exist. (iibm08:prak00) \$db2? SQL1024N SQL1024N A database connection does not exist. Explanation: There is no connection to a database. Other SQL statements cannot be processed unless an SQL CONNECT was previously executed. The command cannot be processed. User Response: If the error occurred when disconnecting from the database, continue processing. If the error occurred on another SQL statement, issue an SQL CONNECT statement and resubmit the command or statement. sqlcode : -1024 sqlstate : 08003 DB2 für zu Hause IBM bietet eine kostenlose Version des DB2 Datenbankservers für verschiedene Betriebssysteme, darunter auch Windows und Linux, an. Die Software kann bei Interesse unter http://www-01.ibm.com/software/data/db2/express/download.html nach einer Registrierung heruntergeladen werden. 6