Freitag, April 10, 2009

Osterquiz

mit Laurent Schneiders netter Eastern challenge habe ich heute einige Zeit zugebracht, war aber noch ein paar Zeichen über dem Limit, als ich die Lösungen sah. Dabei ging es darum, den seltensten Job aus der emp-Tabelle zu ermitteln. Noch kürzer als die vorgeschlagenen (sehr hübschen) Lösungen wäre allerdings folgende Variante gewesen:

select job from emp where ename='KING';

Ok, tut mir leid, ich musste das einfach irgendwo unterbringen ...

Samstag, März 28, 2009

Datenbanken.Grundlagen und Design von Frank Geisler

ein weiteres Buch des mitp-Verlags, das ich mir angesehen habe, ist
dieses: eine sehr solide Einführung zum Thema Datenbanken von Frank Geisler. Der Band beschäftigt sich mit vielen grundlegenden Fragen, erläutert, wozu Datenbanken grundsätzlich dienen, welche unterschiedlichen Systeme im Lauf der Zeit entwickelt wurden, führt in grundlegende Modellierungstechniken ein, gibt einen Überblick über die relationale Algebra und SQL und erklärt die zentralen Funktionen eines RDBMS (Transaktionsverwaltung). Darüber hinaus werden auch weiterführende Themen behandelt, etwa die Besonderheiten von Data Warehouses und die Verwendung objektrelationaler Mechanismen. Das Buch ist dabei klar gegliedert, lesbar geschrieben und liefert ausführliche Erläuterungen und Beispiele. Sehr gut gefallen haben mir die immer wieder eingeschalteten historischen Erläuterungen zur Herkunft von Techniken und Paradigmen - viele technische Bücher sprechen nur vom aktuellen Zustand, der bei der Drucklegung oft schon überholt ist. Den diadaktischen und Einführungscharakter des Bandes unterstreichen die Fragen und Aufgaben am Ende jedes Kapitels, zu denen dann auch die Lösungen enthalten sind. Insgesamt ein gutes Einführungsbuch, das ungefähr 95% der Fragen, die in Datenbankforen immer wieder gestellt werden, beantworten dürfte.

Dienstag, März 10, 2009

diagnostic events

mal wieder ein erinnerungswürdiger Blog-Eintrag bei Tanel Poder: hier findet man ein paar Erklärung dazu, was mit "10046 trace name context forever, level 12" eigentlich gemeint ist.

Dienstag, Februar 03, 2009

Oracle 11g von Lutz Fröhlich

Neben dem Oracle Survival Guide hatte mir der mitp-Verlag vor Weihnachten auch noch Lutz Fröhlichs Oracle 11g - Das umfassende Handbuch zu Rezensionszwecken überlassen - und nachdem sich meine Begeisterung für die schmale Überlebenshilfe doch eher in Grenzen gehalten hatte, wurde ich vom zweiten Buch positiv überrascht: oft sind Einführungsbände zu neuen Oracle-Releases ja nicht viel mehr als behutsam umformulierte Kompilationen aus der Dokumentation - aber das trifft auf dieses Buch nicht zu.

Die knapp 800 Seiten des Handbuchs gliedern sich in fünf größere Kapitel:

- Installation, Architektur und Infrastruktur
- Einführung in die Oracle-Datenbankadministration
- Erweiterte Datenbankadministration
- Data Warehouse
- Hochverfügbarkeit

Wie die Überschriften bereits andeuten, beginnt die Darstellung mit allgemeinen und grundlegenden Erläuterungen (Wie installiert man Oracle? Wie interagieren die Komponenten des Servers miteinander? Wie funktionieren Backup + Recovery?) und schreitet dann zu komplexeren Themen fort (Performanceoptimierung, Massendatenverarbeitung im DWH, RAC etc.). Dabei liefern die einführenden Kapitel eine knappe, aber präzise Übersicht über die grundsätzliche Architektur des Oracle Servers, während die späteren Kapitel fundierte Einführungen zu den jeweiligen Spezialthemen geben. Gut gefallen hat mir die didaktische Gestaltung der einzelnen Kapitel, in denen die grundsätzlichen Erklärungen jeweils in einem ausgewogenen Verhältnis zu den praktischen Beispielen stehen, wobei in der Regel sowohl der Kommandozeilen-Zugriff über sqlplus als auch der Zugriff über die Web-GUI dargestellt werden. Die verwendeten Beispiele sind jeweils auf das Wesentliche beschränkt, so dass man eine kompakte Zusammenfassung der erforderlichen Schritte erhält. Neben dem grundsätzlichen Vorgehen wird dann auch dargelegt, wie die entsprechenden Operationen in den Views des data dictionary überwacht werden können. Darüber hinaus werden immer wieder Hinweise auf die praktische Relevanz der vorgestellten Techniken gegeben (und gefallen hat mir daran auch, dass diese Hinweise weitgehend meinen eigenen Erfahrungen entsprechen).

Neben Einführungen zu bestimmten neueren Features des 11er Releases, die ich mir noch nicht genauer angesehen hatte, und Erläuterungen zu Optionen, die ich noch nie praktisch verwendet habe (z.B. Stream), sind mir auch ein paar sehr nette Tricks begegnet, die ich noch nicht kannte, so z.B. die (bereits in meinem letzten Blog-Eintrag angesprochene) Möglichkeit des spool-Exports nach Excel (Kapitel 7.2). Andererseits scheint mir der Band aber auch für Einsteiger nicht ungeeignet, da die Darstellung nie auf erforderliche grundsätzliche Erläuterungen verzichtet. Zu den Vorzügen des Textes zählt der klare und präzise Stil des Autors, der dafür sorgt, dass die Lektüre an keiner Stelle mühsam wird. Offensichtliche Fehler habe ich im Band nicht gefunden (außer den falsch zugeordneten Screenshots auf S.56) - insgesamt aus meiner Sicht also eine sehr empfehlenswerte Lektüre.

Mittwoch, Januar 28, 2009

Export von Query-Results aus sqlplus

in Lutz Fröhlichs Oracle 11-Buch habe ich folgende hübsche Möglichkeit gefunden, Query-Ergebnisse nach Excel zu exportieren:

1. in sqlplus: set markup html on
2. spool aktivieren (mit einer htm-Zieldatei)
3. Query ausführen
4. erzeugtes spool-file ggf. anpassen (man kann überflüssige Ausgabe natürlich auch über sqlplus-Einstellungen unterdrücken)
5. Dateiendung in xls ändern und mit Excel öffnen

Und, wenn ich schon dabei bin, hier auch noch mal der Klassiker zur Erzeugung von csv-Dateien:

1. in sqlplus: set colsep ";" (oder welches Trennzeichen auch immer)
2. spool aktivieren + Query ausführen

Samstag, Januar 10, 2009

Oracle Survival Guide

nachdem mir der mitp-Verlag freundlicherweise zwei Oracle-Bücher zu Rezensionszwecken überlassen hat, gibt's in diesem Blog jetzt auch Buchbesprechungen. Die erste davon betrifft den Oracle Survival Guide von Cornel Brücher, Frank Jüdes, Mario Haupt, Uwe Küchler und Andreas Takano, erschienen 2008 - hier der zugehörige Link.

Der relativ schmale Band (knapp 300 Seiten) wendet sich an Einsteiger im Bereich der Programmierung mit Oracle-Datenbanken und bemüht sich, eine möglichst knappe Zusammenfassung relevanter Informationen zu liefern. Die Autoren sehen ihr Buch als "'Schweizer Messer' für Oracle-Entwickler und -Supporter" (was ein Oracle-Supporter ist, weiß ich nicht ganz genau, habe aber eine Theorie) und begründen ihre kompakte Darstellung damit, dass man aus den üblichen Einführungen zum Thema in der Regel höchstens 10% für das Tagesgeschäft benötige. Der Band beginnt mit einer Einführung zum Thema SQL (25 Seiten), stellt PL/SQL vor (20 Seiten), erläutert (sehr knapp) Datentypen in SQL und PL/SQL und sql*plus als Client-Tool, beschreibt die Tools SQL*Loader, exp und imp, gibt ein paar Informationen zum data dictionary und Hinweise zu Installation und sql-net-Zugriff. Dann folgt ein recht umfangreiches Kapitel zum DB-Zugriff über diverse Programmiersprachen (von C++ über Java, C#, Perl, Php bis zu Ruby - insgesamt ca. 70 Seiten). Die folgenden Kapitel beschäftigen sich mit Oracle-LDAP, mit UNIX und dem Vi-Editor und mit XML in der Datenbank. Den Abschluss bildet ein Kapitel mit Tipps und Tricks, in dem weitere Hinweise zur Arbeit mit SQL und PL/SQL enthalten sind.

Beim Zusammenfassen der Kapitelliste ist mir noch mal zu Bewusstsein gekommen, dass das eine sehr bunte Mischung ist, und dass ich der Gliederung nicht in allen Punkten folgen konnte. Manche Kapitel sind auch so knapp geworden, dass ich mich frage, ob da ein Kapitel überhaupt noch sinnvoll ist - das zu sql*plus umfasst z.B. 1,5 Seiten. Neben der Quantität scheint mir auch die Qualität der Einzelkapitel nicht einheitlich zu sein. Nun gehöre ich wahrscheinlich nicht genau in die Zielgruppe hinein, da es nicht das erste Buch zum Thema ist, das ich lese. Außerdem habe ich in den letzten Jahren nur noch Darstellungen von Autoren wie Tom Kyte, Cary Millsap und Jonathan Lewis gelesen, die einen sehr hohen Anspruch an ihre Bücher stellen, so dass meine Anforderungen an ein Buch zu Oracle recht hoch sind. Unter diesen Vorbedingungen muss ich sagen, dass mir die Lektüre des Bändchens nicht viel gebracht hat. Ein erstes Problem ist, dass an vielen Stellen der Hinweis fehlt, für welches Release des Oracle-Servers Aussagen gemacht werden (so etwa wenn im SQL-Kapitel die Funktion SYS_CONNECT_BY_PATH angesprochen wird, die meiner Erinnerung nach erst in 10g eingeführt wurde). Darüber hinaus sind viele Aussagen so knapp zusammengefasst, dass wichtige Informationen unter den Tisch fallen (z.B. bei der Behandlung von NULL-Werten im SQL-Kapitel). Einige Aussagen sind auch unabhängig von Verkürzungen sehr zweifelhaft (etwa wenn auf S. 36 der Vorschlag gemacht wird, ein Commit für jeweils 10.000 Sätze in einer PL/SQL-Schleife unterzubringen, um das Volllaufen von Rollback-Segmenten zu verhindern - bei AskTom kann man zu diesem Vorschlag einige unfreundliche Kommentare lesen). Bei der Vorstellung der Oracle-Utilities habe ich mich gewundert, dass exp und imp statt der aktuelleren Werkzeuge expdp und impdp vorgestellt wurden und dass der Abschnitt zum sql*loader so groß ausfiel, während die External Tables relativ kurz behandelt wurden. Ob man mit den Installations-Hinweisen des Buches viel anfangen kann, weiß ich auch nicht - da würde ich mich wahrscheinlich eher auf eines der umfassenden (allerdings englischsprachigen) Tutorials verlassen, die man im Netz finden kann (z.B. bei Tim Hall auf der OracleBase-Seite). Die ausführliche Darstellung der Programmierschnittstellen zum Oracle-Server stellt vermutlich das Kernstück des Bandes dar - und ist ein Thema, das mich (einen dritt- oder viertklassigen Programmierer) nur am Rande interessiert. Dieses Kapitel könnte jemandem, der erste Versuche unternimmt, mit einer Oracle-Datenbank zu kommunizieren, weiterhelfen.

Davon abgesehen enthält das Buch viele Angaben, die ohne den Kontext nur schwer einzuordnen sind. In diversen Datenbank-Foren begegnet man immer wieder Fragen, die zu den hier gegebenen Antworten passen, Fragen die eine schnelle und kurze Antwort suchen, bei denen aber oft recht schnell klar wird, dass der behandelte Sachverhalt eigentlich viel komplexer ist, als der Fragesteller annimmt, so dass die kurze Antwort ihm mittelfristig wahrscheinlich große Probleme bereitet - die vermeidbar wären, wenn er sich erst einmal mit den Basics des Themas befasst hätte. Das soll jetzt nicht heißen, dass kompakte Darstellung grundsätzlich problematisch wären, aber ab einem bestimmtem Grad der Komprimierung beginnen die Gefahren. Wenn ein Buch dann nicht ausreichend klar strukturiert ist, leidet der praktische Nutzen darunter.

Zu den positiven Aspekten des Bandes zählt immerhin noch, dass bei der Erstellung des Buches "keine Gürteltiere zu Schaden gekommen sind", und auch sonst merkt man, dass die Autoren wohl ihren Spaß an der Produktion des Buchs hatten. Nun bin ich aber eigentlich gar kein Datenbankspezialist, sondern Literaturwissenschaftler und in dieser Eigenschaft habe ich dann doch auch ein wenig unter diversen stilistischen Mängeln gelitten, aber das ist eine andere Geschichte, die ein andermal erzählt werden soll (oder auch nicht).

Sonntag, Januar 04, 2009

star transformation

wieder mal ein Thema, über das ich schon mehrfach gelesen habe, ohne auf die Idee zu kommen, mir die Details zu merken. Da der Herr Rittman hier auch den Verweis auf Jonathan Lewis' ältere Erläuterung der star transformation eingebaut hat, sollte ich alle relevanten Informatonen wieder finden können.

Samstag, Dezember 20, 2008

manuelle Einstellung der sort_area_size

bei Jonathan Lewis gibt's mal wieder einen wichtigen Hinweis: in 10.2.0.4 und diversen 11er Versionen gibt es einen Bug, der dafür sorgt, dass ein ALTER SESSION zur Abschaltung der automatischen PGA-Verteilung nicht unmittelbar wirksam wird: die Details dazu gibt es hier. In einem Kommentar zum Eintrag wird darauf hingewiesen, dass dieses Verhalten schon in 10.2.0.3 vorliegen soll. Das sollte ich mir bei Gelegenheit mit einem 10032er Trace anschauen.