Ich habe am 22.02.2006 im Rahmen eines Kurses an der Universitaet Jena an der Pruefung 700 "DB2 UDB V8,1 Family Fundamentals" teilgenommen und mit 87% bestanden. Da ich mich nur wenig speziell vorbereitet hatte (eigentlich wollte ich die Pruefung spaeter ablegen), war das fuer mich ueberraschend gut. (Na gut, in meiner Vorlesung "Datenbanken I" habe ich auch etwas DB2 SQL behandelt, aber ansonsten hatte ich nur 2-3 Kapitel aus dem offiziellen IBM Buch zur Vorbereitung gelesen. Der anderthalb-taegige Kurs, den ich auch besucht habe, sollte auf die zweite Pruefung vorbereiten. Insofern konnte man ihn nicht rechnen. Man braucht 61%, um zu bestehen. Es gab 54 Fragen zum Ankreuzen, die innerhalb von 75 Minuten zu beantworten waren. Bei den meisten war eine von ca. 4 Alternativen auszuwaehlen, bei einigen mussten 2 von ca. 5 Alternativen gewaehlt werden. Welchen Typ eine Frage hatte, konnte es auch an Radiobuttons vs. Checkboxes sehen. Wie viele Alternativen man bei den Checkboxes ankreuzen sollte, war explizit angegeben. Die Pruefung erfolgte mittels Web-Formularen in einem normalen Browser, aber unter Aufsicht. Materialien waren nicht erlaubt, man durfte aber ein Blatt Papier und einen Stift fuer Aufzeichnungen waerend der Pruefung verwenden. Man konnte aber auch im Web-Formular die Fragen ankreuzen, die man sich spaeter nochmal genauer anschauen wollte. Unabhaengig davon konnte man am Ende zu beliebigen Fragen zurueckkehren, solange die Zeit noch reichte. Bei mir wurde die Zeit am Ende ein wenig knapp, aber es wurde nicht wirklich aufregend. Ich war allerdings ziemlich muede und habe mir vorher viel Zeit gelassen, um die Fragen wirklich genau zu lesen. Ich kann auch nur raten, die Fragen wirklich genau zu lesen. Wenn man es nur ueberfliegt, entgehen einem manchmal wichtige Details. Z.B. hatte ich eine Frage, bei der es um die Anzahl geloeschter Tupel bei einem Kommando ging, wo ein Fremdschluessel mit ON DELETE CASCADES eine Rolle spielte. Ich hatte zuerst uebersehen, dass nur nach der Anzahl der in T2 geloeschten Tupel gefragt wurde. So habe ich mehrfach meine erste Antwort nochmal geaendert, nachdem ich die Frage nochmal genau gelesen und darueber nachgedacht habe. Was kam nun dran? - Mit SQL-Kenntnissen aus "Datenbanken I" bin ich schon relativ weit gekommen. Es gab mehrere Fragen zum outer join. Es gab auch Fragen zu ORDER BY und GROUP BY, auch zu dem Unterschied. Auch ORDER BY mit Positionsnummern. - Bei einer Frage musste man wissen, wie sich IN (Unteranfrage) verhaelt, wenn die Unteranfrage eine Nullwert liefert. Da das erst seit einem Jahr in meiner Vorlesung drankommt, und ich es vorher auch nicht wusste, fand ich es ziemlich fiess, so spezielle Dinge zu fragen. Aber vielleicht ist es in anderen Kursen oder Lehrbuechern ja Standard-Stoff. Ausserdem durfte man sich ja 21 Mal (von 54) irren. Da ist viel Luft fuer schwierige und etwas unfaire Fragen. - Einmal musste man auch bemerken, dass 'NULL' ein String und nicht der Nullwert ist. - CREATE TABLE ... LIKE ... kam bei mir sogar zweimal vor. Man muss wissen, ob und welche Constraints dabei kopiert werden. Ich wusste es nicht, und habe mehr oder weniger spontan zweimal unterschiedlich geantwortet und so vielleicht das Risiko minimiert. - INSERT/UPDATE/DELETE kamen vor, besonders auch im Zusammenspiel mit Constraints. Ich muss mal ausprobieren, ob UPDATE R SET (A,B) = (1,2) bei DB2 funktioniert. Normal ist die Syntax ja anders. Einmal musste man auch wissen, dass Funktionen wie CURRENT DATE in CHECK-Constraints verboten sind. Na, das war ja in der Vorlesung dran. - Einmal gab es ein INSERT INTO R(A,B) SELECT DISTINCT 1, CURRENT DATE FROM S. (oder etwas aehnliches). Es muss wohl falsch gewesen sein, da eine andere Antwort mir klar korrekt schien, aber was der Fehler daran ist, weiss ich nicht. Die Spalten waren vom Typ INTEGER und DATE. Vielleicht habe ich aber auch irgendwas uebersehen. Es waren nicht alle Spalten und manche Spalten haben NULL erlaubt, und andere nicht. Ich koennte mir sonst nur vorstellen, dass DISTINCT mit CURRENT DATE ueberhaupt nicht geht. - Datentypen musste man auch wissen, z.B. die Grenzen von SMALLINT. Eine interessante Frage war auch, was mehr Platz verbraucht, CHAR(n) oder VARCHAR(n). Fuer grosse n, bei denen die tatsaechlichen Daten kuerzer sind, ist das ja klar, aber in der Frage kamen auch kleine n vor (1 oder 2, ich weiss nicht mehr). Man sollte sich also wohl ueber das Speicherformat informieren. - In den Beispielen stand beim CREATE TABLE in der Spaltendeklaration "WITH DEFAULT NULL" oder etwas aehnliches. Dass man da WITH verwenden kann? muss? wusste ich noch nicht. Bei Oracle heisst es einfach DEFAULT. Es ist auch komisch, dass der DEFAULT NULL explizit angegeben wurde. Ich muss das alles mal ausprobieren. - Was man genau beim ALTER TABLE aendern kann, war auch bei einer Frage dran. Z.B. Spalten umbenennen, Primaerschluessel hinzufuegen, etc. - Prozeduraufrufe / Rechte fuer Prozeduren kamen dran. Hier konnte ich aber recht gut raten bzw. ich wusste, dass das Recht fuer Prozeduren EXECUTE heisst und nicht USE (das ist fuer collation sequences). Ueberladene Prozeduren spielten einmal auch eine Rolle. - Es wurde auch einmal nach den Rechten gefragt, die man zum DROP TABLE braucht. Wenn ich mich recht entsinne, war eine der Alternativen ein DROP- Recht, aber das gibt es ueberhaupt nicht. DELETE war natuerlich auch eine Alternative (ebenfalls falsch). - Einmal gab es beim GRANT-Befehl GRANT ... TO USER a. Das ist bei DB2 tatsaechlich eine korrekte Syntax (wenn es wohl auch die falsche Antwort war). Der Grund ist, dass bei einigen Betriebssystemen Benutzer und Gruppen den gleichen Namen haben koennen, und DB2 deswegen "USER a" und "GROUP a" erlaubt (und natuerlich "a"). - Die Isolationsebenen und Sperren bei DB2 kamen auch mehrfach dran (mindestens zwei Mal). Sie sind anders als bei Oracle. Ich werde sie wohl in Zukunft in "Datenbanken I" auch behandeln. Es gab auch eine Frage, auf welchen Objekten man Sperren anfordern kann. - Eine einfache Frage war: Gegeben eine Folge von INSERTs, DELETEs, ROLLBACKs und COMMITs - wie viele Tupel enthaelt die Tabelle am Ende? Da brauchte man nur das Beispiel durchgehen und alle Kommandos ignorieren, die mit ROLLBACK zurueckgenommen wurden. - Tja, dann gab es auch die Fragen von der Art "Welches IBM-Produkt braucht man in einer bestimmten Situation" (bei einer von den Fragen war der Client auf einem Grossrechner und der Server unter Unix, das war etwas ungewoehnlich). Obwohl ich mir das Kapitel durchgelesen hatte, fuehlte ich mich hier sehr unsicher - nur durchlesen reicht eben nicht, man muss sich doch damit beschaeftigen. Am Ende hatte ich 4 von 6 Fragen aus der Kategorie "Planning" korrekt (na gut, das haette ganz knapp gereicht). Einmal musste man auch wissen, welches von fuenf DB2-Werkzeugen eine History-Funktion hat. - Bei mir gab es keine Fragen zu den objektrelationalen Erweiterungen von SQL, also z.B. Typed Tables. Aber das war wahrscheinlich einfach Glueck. In den Tutorials werden diese Dinge schon behandelt. Insgesamt denke ich, dass man mit den Kenntnissen aus "Datenbanken I", und den IBM Tutorials, die es auch kostenlos im Web gibt, gute Chancen hat, diese Pruefung zu bestehen. Ich werde meine Vorlesung auch so aendern, dass ein paar der speziellen Dinge, die oben genannt sind, dort auch behandelt werden.