www.ordix.de ORDIX news 03 2008 € 2,20 Das IT-Magazin der ORDIX AG Was ist SOA? ORDIX präsentiert die neue Reihe zu Serviceorientierter Architektur Heute schon geCACHEd? Seifenoper mit PHP 5 Kürzere Antwortzeiten durch Result Caching in S. 08 Oracle Database 11g Release 1 Performance-Tests mit Hibernate First-, Second Level- und Query Cache Programmierung von Web-Services mit PHP 5 und SOAP S. 42 S. 13 Service statt Kontrolle S. 28 Aufgaben des IT-Projektcontrolling S. 32 Wir bringen die Oracle-Community zusammen 1. – 3. Dezember 2008 im CongressCenter Ost in Nürnberg QMehr als 300 Vorträge aus allen Themenbereichen des Oracle Produktportfolios Sie profitieren von den Erfahrungen und vom Know-how aller Teilnehmer und Referenten QProminente Keynotespeaker aus den Oracle Headquarters Sie erweitern Ihr Netzwerk unter mehr als 2.000 Teilnehmern QExperten-Foren und Ausstellung mit Oracle und rund 60 Partnern Sie haben mehr Gelegenheit zur Kommunikation – jetzt drei volle Konferenztage QSchulungstag im Anschluss an die Konferenz Sie erleben die bedeutendste Kompetenz-Präsentation des Oracle-Marktes in Zentraleuropa Infos und Anmeldung unter www.doag2008.org Editorial BBB*) Paderborn, September 2008 Monate bevor eine neue ORDIX News erscheint, werde ich von Frau Brinkmann auf den zeitlichen Ablauf hingewiesen. Jedes Mal mache ich mir schon Wochen vorher Gedanken, worüber ich in meinem Editorial schreiben will. Aber meistens holt mich die Realität ein: Der Termin ist da, alle Ideen verworfen und noch nichts aufs Papier gebracht. – Oh, Pardon, natürlich in Winword geschrieben (mit vi-Texten wäre Frau Brinkmann nicht richtig glücklich, selbst wenn sie rechtzeitig vorlägen). Meistens kommt ja eine Steilvorlage aus Berlin, beim letzten Mal die Diätenerhöhung, die dann erst einmal schneller in der Schublade verschwand, als sie hervorgezogen wurde. Das ist dann schlecht, wenn man weiß, dass zum Zeitpunkt des Erscheinens der ORDIX News alles bereits Makulatur ist. Dann kommen natürlich auch Warnungen: „Schreib bloß nichts über Politik!“ Ja, ich weiß, man muss nicht unbedingt meiner Meinung sein. Aber ich glaube, es ist schlimmer (zumindest vor einer Welt- oder Europameisterschaft), kritisch über Fußball zu schreiben als über Politiker und solche, die es niemals werden und trotzdem dafür Geld bekommen. Einer kam hier oft vor und hatte wenig mit Politik oder gar Fußball zu tun. Aber damit, dass ich manches Editorial zweimal schreiben musste, weil mir Winword immer im entscheidenden Moment abstürzte **): Bill Gates. In den letzten Jahren wurde es richtig ruhig um ihn. Und was sollte man heute Kritisches oder Lustiges über den Gut-Menschen schreiben? Prinzipiell hat er ja nichts falsch gemacht. Und was er heute mit seiner Stiftung macht: Respekt! Viel Spaß im Ruhestand, Billyboy. Und dann kommt sie doch noch, die Steilvorlage fürs Editorial – natürlich wieder aus Berlin. Jeder von Ihnen sollte sie inzwischen erhalten haben: Die eindeutige Steuernummer, quasi das persönliche Autokennzeichen, das uns nun das ganze Leben begleiten wird. Spätestens 2020 werden wir das Ding bei Geburt auf die Stirn gebrannt bekommen. Teure Bürokratie im Quadrat. Diese Nummer ist für mich vergleichbar mit einer Sträflingsnummer, aber für die uns Regierenden sind wir ja sowieso alle latente Steuerhinterzieher, also per se Verbrecher am Staat (obwohl wir der selber ). sind und wer hackt sich denn schon selbst eine Hand ab Aber wir werden damit leben müssen, dass wir unbescholtene Bürger gerne in die Nähe von Terrorismus (Herr Schäuble) und Verbrechen gerückt werden. Deshalb sollten Sie sich, so lange Sie noch nicht in die Fänge des Finanzamtes oder des Innenministers geraten sind, schlauer machen. Hier hilft Ihnen die ORDIX News zumindest in den Bereichen Tortengrafiken (spezielle Java-Bibliothek), SOA, SOAP, diversen Oracle Objects, RAC Storage Management, Hibernate usw. Zum Thema Terrorismus finden Sie dann vielleicht was bei Jazeera. Und was den Umgang mit dem Finanzamt betrifft, hilft vielleicht der Steuerberater von Herrn Zumwinkel. Somit darf ich Ihnen - hoffentlich nach einem entspannten Sommerurlaub - viel Spaß beim Lesen wünschen und vielleicht sparen wir uns durch die neue Steuernummer wenigstens die nächste Volkszählung. Wolfgang Kögler ) *) Bye Bye Bill (also kein Ersatz für www **) Ok, seit nunmehr ca. 8 Jahren setze ich Winword 97 ein und das verhält sich bei so einfachen Texten wie meinem Editorial doch inzwischen recht zuverlässig. ORDIX News 3/2008 3 Inhalt Aktuell Standards 12.....silicon.de Golf Masters 2008 Die ORDIX AG ist Hauptsponsor. 03.....Editorial 21.....Coniatos AG ORDIX gründet mit Lars Eisenblatt die Coniatos AG. 17.....Impressum 35.....ORDIX Open und Mini ORDIX Open 2008 Weltgrößtes Schnellschachturnier in Mainz 04.....Inhalt 26.....Seminarübersicht September 2008 bis April 2009 45.....Larry Ratlos: Datenbankeintrag per Skript entfernen 51.....DOAG Konferenz 2008 ORDIX Vorträge für die Oracle Fachwelt. Datenbanken Open Source 13.....SOAP Web-Services mit PHP 5: Seifenoper mit PHP 5 Einblick in die Programmierung von Web-Services mit PHP 5 und SOAP. Anhand eines Beispiels wird die Erstellung und Nutzung eines Web-Services gezeigt. 39.....System-Logging unter Linux und Unix – syslog-ng (Teil I): Die Revolution der neuen Generation Einführung in das Thema syslog-ng und die Möglichkeit, Log-Meldungen effizienter zu filtern. IT-Strategie 42.....Reihe SOA (Teil I): Was ist SOA? Gestaltung unternehmensweiter Anwendungslandschaften mit serviceorientierter Architektur. Begriffsklärung und Abgrenzung. Java/JEE 05.....Bunte Torten und farbige Balken: Diagramme mit JFreeChart JFreeChart ist eine Java-Bibliothek, das Erstellen von Charts und Auswertungsgrafiken erheblich vereinfacht. 18.....Java Best Practice (Teil II): Eclipse Feinjustage Lösungen für typische Alltagsprobleme bei der Arbeit mit Eclipse. 28.....Performance-Tests mit Hibernate (Teil I): Schneller als die Polizei erlaubt Performance-Tests mit Hibernate, die den First- und Second Level Cache und den Query Cache näher unter die Lupe nehmen. 4 ORDIX News 3/2008 08.....Oracle Database 11g Release 1 (Teil IV): Heute schon geCACHEd ...!?! Einblick in das Caching von Abfrage- und Funktionsresultaten in den verschiedenen Result Cache Bereichen einer Oracle 11g Datenbank. 22.....Oracle Objekttypen von A - Z (Teil VII): LOB, LOB Partition, LOB Subpartition, Materialized Views, Operator In diesem Teil der Reihe stellen wir Ihnen Objekttypen beginnend mit „L“, „M“ und „O“ vor. 36.....Oracle RAC 10g (Teil III): Automatic Storage Management Als Mischung eines Logischen Volume Managers und eines automatischen Dateimanagements für Oracle Dateitypen erleichtert ASM die physische Konfiguration von Datenbanken. 46.....Oracle EM Grid Control (Teil IV): Datenbankadministration mit Grid Control Effiziente Administration von Oracle Datenbanken mit dem Oracle Enterprise Manager Grid Control 10g. Projektmanagement 32.....IT-Projektcontrolling (Teil I): Service statt Kontrolle Überblick über das IT-Projektcontrolling als wichtige Aufgabe im Rahmen des Projektmanagements. Java/JEE Bunte Torten und farbige Balken Diagramme mit JFreeChart Eine der Hauptaufgaben in der Informationstechnologie liegt in der Aufbereitung und Anzeige von Daten, Auswertungen und Statistiken. Oft sagt auch hier ein Bild mehr als tausend Worte. Unterstützung bei der Erstellung grafisch ansprechender Auswertungen Dieser Artikel richtet sich an Entwickler und Architekten, die in ihren Projekten Daten grafisch aufbereiten möchten. und Darstellungen bietet die Diagramm-Bibliothek JFreeChart. Im Folgenden werden die Möglichkeiten dieser Bibliothek und die grundsätzliche Arbeitsweise erläutert. Das Projekt Dokumentation Die Bibliothek JFreeChart ist ein Open Source Projekt der Firma Object Refinery und kann bei SourceForge [1] in seiner aktuellen Version 1.0.10 kostenlos heruntergeladen werden. Für die Verwendung wird neben der Bibliothek selbst auch das Archiv „JCommon“ benötigt, das Klassen enthält, die auch in anderen Projekten zum Einsatz kommen. Das JCommonArchiv ist im Download der JFreeChart-Bibliothek zwar enthalten, der Quellcode wird bei SourceForge jedoch separat angeboten. Kostenlos erhältlich ist lediglich der Quellcode selbst, Beispiele oder Dokumentationen sucht man auf der Projektseite [2] aber vergeblich. Eine rund 700 Seiten umfassende Dokumentation sowie den Quellcode aller in der Beispielanwendung [3] enthaltenen Diagramme erhält man derzeit für 48,75 USD (Stand Juni 2008). Eine Investition, die vor allem für die Entwicklung von komplexeren Charts - nicht nur aufgrund des derzeit schwachen DollarKurses - auf jeden Fall gut angelegt ist. ORDIX News 3/2008 5 Java/JEE Verschiedene Diagrammtypen Verschiedene Datasets JFreeChart bietet eine ganze Reihe von verschiedenen Diagrammtypen an, um den unterschiedlichen Ansprüchen gerecht zu werden. So finden sich Säulen-, Balken-, Torten- und Gantt-Diagramme sowie Histogramme und einige weitere Typen in der Auswahl. Zu vielen dieser Haupttypen gibt es weitere „Untertypen“, z. B. ein PieChart (Kreisdiagramm) und ein PieChart3D (dreidimensionales Kreisdiagramm). Eine kleine Swing-Demo-Anwendung auf der Projektseite [3] vermittelt einen Überblick über die Vielzahl der Diagrammtypen und die Möglichkeiten, die damit realisiert werden können. Einem Diagramm liegen immer die anzuzeigenden Daten zu Grunde. Diese müssen zunächst in ein Dataset geschrieben werden, das dem Chart anschließend zur Anzeige übergeben werden kann. // Erstellen des Datasets DefaultPieDataset data = new DefaultPieDataset(); data.setValue("Datenbanken", new Double(38.2)); data.setValue("Java / JEE", new Double(28.1)); data.setValue("Systeme", new Double(17.5)); data.setValue("Management", new Double(10.5)); data.setValue("sonstiges", new Double(5.7)); // Erstellen des Charts JFreeChart chart = ChartFactory.createPieChart3D( "Prozentuale Verteilung der Schulungsteilnehmer" + "der ORDIX AG auf verschiedene Bereiche", // Titel des Charts data, // Dataset true, // Anzeige der Legende false, // Anzeige von Tool Tipps false // Erstellen von URLs ); // Setzen der Hintergrundfarbe chart.setBackgroundPaint(new Color(235,226,216)); chart.getPlot().setBackgroundPaint(new Color(235,226,216)); // Konfiguration des Charts // holen des Plots PiePlot3D plot = (PiePlot3D) chart.getPlot(); // Festlegen der Höhe der 3D-Abbildung plot.setDepthFactor(0.1); // Festlegen des Startpunktes plot.setStartAngle(290); // Festlegen der Richtung plot.setDirection(Rotation.CLOCKWISE); // Festlegen des Transparenzwertes plot.setForegroundAlpha(0.5f); // Anzeige bei leerem Dataset plot.setNoDataMessage("Keine Daten!"); // Anzeige des Charts (hier: in einer Swing-Anwendung) ChartPanel cp = new ChartPanel(chart); panelXYZ.add(cp); Abb. 1: Quellcode eines einfachen 3D-Tortendiagramms. 6 ORDIX News 3/2008 Für die verschiedenen Diagrammtypen existieren zum Teil unterschiedliche Datasets, die je nach Ausgabeart unterschiedliche Daten aufnehmen können. Die gebräuchlichsten sind hierbei sicherlich das CategoryDataset, das in Balken- und Liniendiagrammen zum Einsatz kommt und das DefaultPieDataset, das für Kreis- und Tortendiagramme verwendet wird. In dem kleinen QuellcodeBeispiel in Abbildung 1 wird die Verwendung eines DefaultPieDatasets für ein 3DKreisdiagramm demonstriert. Erzeugung eines Charts Für die Erstellung eines Charts steht dem Entwickler die Factory-Klasse ChartFactory zur Verfügung, die für jeden Chart-Typ eine entsprechende create-Methode für dessen Erzeugung anbietet. Insgesamt beinhaltet die ChartFactory 38 create-Methoden, mit denen fast 20 verschiedene Diagrammarten erstellt werden können. Als Übergabeparameter werden immer der Titel des Diagramms sowie das Dataset mit den anzuzeigenden Daten übergeben. Weitere Parameter sind je nach aufgerufener Methode unterschiedlich. Das Beispiel in Abbildung 1 zeigt die Erstellung eines 3D-Kreisdiagramms mit Hilfe der Methode createPieChart3D. Das hierbei erstellte Diagramm zeigt Abbildung 2. Konfiguration des Diagramms Die Konfiguration des Charts geschieht über ein so genanntes Plot-Objekt. Es ist Bestandteil des Objekts JFreeChart und wird bei dessen Erzeugung über die ChartFactory bereits erstellt. Über die Methode getPlot kann darauf zugegriffen werden, um Änderungen im Aussehen des Diagramms vorzunehmen, oder auch um Bestandteile, wie z. B. eine zweite XAchse in einem Linien- oder Wertediagramm, hinzuzufügen oder zu entfernen. Die Klasse Plot ist eine abstrakte Klasse, in der nur die Änderungen vorgenommen werden können, die für jeden Diagrammtyp möglich sind, wie zum Beispiel das Festlegen von Farben, Linien usw. Um spezifische Einstellungen für einen bestimmten Chart-Typ Java/JEE vorzunehmen, muss das über die Methode getPlot erhaltene Objekt in den entsprechenden Typ, beispielsweise CategoryPlot oder PiePlot3D, gecastet werden. Darstellung eines Charts Nach dem Erzeugen eines Objekts JFreeChart gibt es zwei Möglichkeiten, dieses anzuzeigen. Die erste besteht darin, eine Grafik zu erzeugen, die dann in eine HTML-Seite, eine JSP oder ein Facelet eingefügt werden kann. Hierfür steht die Methode createBufferedImage im Objekt JFreeChart bereit. Die zweite Möglichkeit der Darstellung besteht darin, das Chart in eine Swing-Anwendung zu integrieren. Für die einfache Umsetzung bietet die Bibliothek die Klasse ChartPanel an, der das Objekt JFreeChart einfach übergeben wird und das dann wie ein „normales“ JPanel verwendet werden kann. Das ChartPanel beinhaltet ein Kontextmenü, über das der Anwender verschiedene Einstellungen am bereits erstellten Diagramm vornehmen kann. So können zum Beispiel Farben, Linienbreiten oder Wertebereiche dynamisch angepasst oder das Diagramm in verschiedene Grafikformate exportiert werden. Abb. 2: Darstellung des Charts, das mit dem Quellcode aus Abbildung 1 erstellt wurde. Glossar JSP Java Server Page. JSP ist die Java-Komponente einer Web-Anwendung, die durch den JEE-Standard definiert ist. Sie ähnelt vom Aubau einer HTML-Seite mit integriertem Java-Code. Sie wird zuerst vom Web-Container in ein Servlet kompiliert. Anschließend nimmt das Servlet Client-Anfragen in Form eines HTTP-Requests entgegen und generiert dynamisch eine Antwort, die es über eine HTTP-Response an den Client zurückschickt. Facelets XML-konforme Definition von Views in Web-Anwendungen, die mit Java Server Faces (JSF) realisiert werden. Swing Grafik-Bibliothek für die Erstellung von Oberflächen unter Java. Außerdem bietet die Verwendung mit Swing Vorteile, die in einer Web-Anwendung nicht realisiert werden können: z. B. Tool-Tipps auf den einzelnen Werten oder eine dynamische Aktualisierung der Anzeigedaten. Fazit JFreeChart bietet ein breites Spektrum an Diagrammen an und stellt zahlreiche Konfigurationsmöglichkeiten zur Verfügung, diese in Aussehen und Darstellung zu verändern. Dem Entwickler wird mit dieser Bibliothek ein Werkzeug an die Hand gegeben, mit dem sich ohne großen Aufwand Grafiken erstellen lassen, die auch in professionellen Anwendungen eingesetzt werden. So kommt JFreeChart z. B. im Reporting-Tool JasperReports und im Application Server JBoss zum Einsatz. Die Erstellung und die Konfiguration ist in den meisten Fällen sehr intuitiv und für einfache Charts sicherlich auch ohne Dokumentation leicht zu bewerkstelligen. Um komplexere Diagramme zu erzeugen oder eigene Diagrammtypen zu erstellen, die im derzeitigen Umfang nicht enthalten sind (z. B. ein Spinnennetz-Diagramm) empfiehlt sich der Er- Link ► [1] Download JFreeChart: http://sourceforge.net/projects/jfreechart ► [2] Projektseite JFreeChart: http://www.jfree.org/jfreechart/ ► [3] JavaWebStart-Demo der zur Verfügung stehenden Chart-Typen: http://www.jfree.org/jfreechart/jfreechart-1.0.10-demo.jnlp werb der kostenpflichtigen Dokumentation, in der alle hierfür relevanten Aspekte ausführlich erläutert werden. Alexander Zeller ([email protected]). ORDIX News 3/2008 7 Datenbanken Oracle Database 11g Release 1 (Teil IV): Heute schon geCACHEd ...!?! Dieser Artikel richtet sich an Oracle Datenbankadministratoren und -entwickler, die sich intensiv mit dem Caching von Abfrageergebnissen in Oracle 11g beschäftigen möchten. Im Rahmen unserer Artikelreihe über die Neuheiten in Oracle Database 11g greifen wir in dieser Ausgabe mit dem Thema „Result Caching“ eine weitere Hauptfunktion dieser neuen Version auf. In bestimmten Anwendungsbereichen wird der Result Cache in der Lage sein, die Antwortzeiten deutlich zu verbessern und Ressourcen einzusparen. Das bisherige Caching von Datenbankblöcken in den verschiedenen SGA-Bereichen, wie Default Pool, Keep oder Recycle Buffer Pool, bestimmt unter Oracle Database 11g längst nicht mehr das Maß aller Dinge, sprich: Daten, die im Cache der Datenbank gehalten werden können. Mit Oracle 11g ist es nun auch möglich, Abfrageergebnisse und PL/SQL-Funktionsresultate in einem reservierten Bereich des Shared Pool, der als Result Cache bezeichnet wird, zwischenzuspeichern. Konzept des Result Cache in Oracle 11g Die Nutzung des Result Cache setzt den Einsatz der Enterprise Edition voraus und wird in erster Linie über den Initialisierungsparameter RESULT_CACHE_MODE mit seinen möglichen Werten FORCE oder MANUAL geregelt. Standardmäßig steht dieser auf MANUAL. Das be- 8 ORDIX News 3/2008 deutet, dass SQL-Abfragen explizit den Optimizer Hint /*+ RESULT_CACHE */ einsetzen müssen, um sowohl bei ihrer erstmaligen Ausführung das Abfrageergebnis im Result Cache ablegen zu können als auch bei ihren Folgeausführungen das Abfrageergebnis aus dem Result Cache wieder verwenden zu können. Da der Inhalt des Result Cache über alle Sessions hinweg nutzbar ist, funktioniert das natürlich auch mit Folgeausführungen in einer anderen Session. Sobald eine der Tabellen, auf denen die zwischengespeicherten Resultate basieren, eine Daten- oder Strukturänderung erfährt, wird das zugehörige Result Set – ohne ein manuelles Eingreifen des DBAs – invalidiert und muss bei der nächsten Ausführung der Abfrage neu aktualisiert werden. Formen des Result Cache in Oracle 11g Folgende Formen des Result Cache werden in Oracle Database 11g unterschieden: Datenbanken • • Server Result Cache • SQL Query Result Cache • PL/SQL Function Result Cache OCI Result Cache auf Client Seite Nutzung des Result Cache Angenommen, es wird eine Abfrage unter Verwendung des Hint /*+ RESULT_CACHE */ an die Datenbank abgegeben, so prüft der Optimizer zunächst, ob diese Abfrage bereits von einer anderen Session oder einem anderen Benutzer ausgeführt und in den Result Cache abgelegt wurde. Ist dies der Fall, wird die Abfrage direkt aus dem Result Cache beantwortet, was zu erheblich kürzeren Antwortzeiten führen kann, da keine Datenbankblöcke – weder physikalisch noch logisch – mehr gelesen und keine Berechnungen zur Ermittlung des Resultats mehr durchgeführt werden müssen. Die Nutzung des Result Cache ist im Ausführungsplan in Abbildung 1 zu erkennen. Die Zeile mit dem Operator RESULT CACHE ist ein eindeutiges Indiz dafür, dass der SQL Query Result Cache genutzt wurde. Für den Result Cache Eintrag wird eine interne Cache Id (z. B.: 25wurjfyk3m7ya94nj5j9bdqrc) vergeben, über die der aktuelle Status des Result Cache Eintrages in der neuen View V$RESULT_CACHE_OBJECTS abgefragt werden kann. Leider ist anhand des Ausführungsplanes nicht zu erkennen, ob es sich hier um die Ablage des Resultats (= erste Ausführung) oder um die Wiederverwendung des bereits abgelegten Resultats (= Folgeausführung) handelt. Bei zusätzlicher Betrachtung der Statistiken wird eine erheblich reduzierte Anzahl an Consistent Reads (im Beispiel auf 0!) letztendlich den entscheidenden Hinweis auf eine Folgeausführung liefern können. Vorteile und Anwendungsbereiche des Result Cache Durch die Nutzung des Result Cache bei vorhersehbaren, sich immer wiederholenden SELECT-Abfragen und PL/SQL-Funktionen können Laufzeit, CPU-Ressourcen sowie physikalische (Disk) und logische Zugriffe (Memory) eingespart werden. Voraussetzung ist aber, dass sich die zu Grunde liegenden Datenbestände nur selten, oder noch besser, überhaupt nicht ändern. Gute Kandidaten für den Result Cache sind sowohl Abfragen, die viele Zeilen selektieren, aber nur wenige Zeilen im Ergebnis zurück- select /*+ result_cache */ sum(GEHALT) from MITARBEITER; --------------------------------------------------------------------|Id |Operation |Name |Rows |Bytes |Cost --------------------------------------------------------------------| 0 |SELECT STATEMENT | | 1 | 4 | 3 | 1 |RESULT CACHE |25wurjfyk3m7ya94nj5j9bdqrc | | | | 2 |SORT AGGREGATE | | 1 | 4 | | 3 |TABLE ACCESS FULL |MITARBEITER | 13 | 52 | 3 --------------------------------------------------------------------Result Cache Information (identified by operation id): --------------------------------------------------------------------1 - column-count=1; dependencies=(ORA01.MITARBEITER); attributes=(single-row); name="select /*+ result_cache */ sum(GEHALT) from MITARBEITER" Statistics --------------------------------------------------------------------0 recursive calls 0 db block gets 0 consistent gets 0 physical reads ... Abb. 1: Ausführungsplan und Statistiken zur Nutzung des Result Cache. liefern als auch langlaufende, komplexe und mit aufwändigen Berechnungen versehene Abfragen und Unterabfragen. Server Result Cache in der DatenbankSetup Der Server Result Cache, den sich die beiden Cache Bereiche „SQL Query Result Cache“ und „PL/SQL Function Result Cache“ untereinander teilen, kann mit Hilfe der neuen Initialisierungsparameter RESULT_* dynamisch konfiguriert werden. Die maximale Größe des Server Result Cache im Shared Pool wird durch den Parameter RESULT_CACHE_MAX_SIZE bestimmt. Setzt der DBA diesen Parameter nicht explizit, belegt Oracle standardmäßig einen Bereich von 0,25 % des neuen Parameters MEMORY_TARGET, 0,5 % von SGA_ TARGET oder 1 % der SHARED_POOL_ SIZE, je nachdem, welcher von diesen Parametern definiert ist und in Abhängigkeit von der soeben genannten Reihenfolge dieser Parameter. Ein explizit gesetzter Wert von 0 schaltet den Result Cache aus. RESULT_CACHE_MODE regelt die Art, wie der Result Cache genutzt wird. Standardmäßig steht dieser Parameter auf MANUAL und bedingt die Verwendung des Optimizer Hint /*+ RESULT_CACHE */, um den Result ORDIX News 3/2008 9 Datenbanken Cache ansprechen zu dürfen. Die Einstellung FORCE hingegen versucht, alle Resultate im Result Cache abzulegen und von dort wiederzuverwenden. Mit Hilfe des Optimizer Hint /*+ NO_RESULT_CACHE */ kann der Result Cache hier gezielt umgangen werden. Unabhängig davon, in welchem Modus der Result Cache geführt wird, darf ein einzelnes Abfrageresultat einen bestimmten Prozentsatz von RESULT_CACHE_MAX_SIZE nicht überschreiten. Dieser Prozentsatz (0 % - 100 %) wird über den Parameter RESULT_CACHE_ MAX_RESULT gesteuert und beträgt standardmäßig 5 %. Zu beachten ist, dass diese Einstellung zu veralteten Abfrageresultaten führen kann, da die lokale Datenbank keine Kenntnis von inzwischen veränderten Daten auf der entfernten Seite bekommt. Aus diesem Grund kann es ratsam sein, die Voreinstellung von 0 Minuten, was ein Caching von Remote-Resultaten verhindert, zu übernehmen. Abfrageergebnis Materialized View (MV) SQL Query Result Cache Ablageort Eigenes Objekt im physikalischen Speicher der Datenbank Im Speicher (SGA) Aufbewahrungsdauer Manuelles Entfernen / Refresh Instance Shutdown / automatische Invalidierung / LRU-Mechanismus Bei Änderungen an Basistabellen MV ist statisch, d. h. sie weiß zunächst nichts von den Änderungen => Refresh der MV ist anzustoßen Cache wird automatisch invalidiert und bei Folgeausführung aktualisiert. • V$RESULT_CACHE_OBJECTS Gibt einen Überblick über alle Abfrageund Funktionsresultate im Result Cache sowie deren Abhängigkeiten. Nein (Ausnahme: Caching von Remote-Resultaten) • V$RESULT_CACHE_DEPENDENCY Diese View zeigt die Verbindungen zwischen den im Result Cache befindlichen Abfrageergebnissen und die davon abhängigen Objekte. • V$RESULT_CACHE_STATISTICS Über diese View erhält man mehr Informationen über die aktuellen Einstellungen und die Nutzung des Result Cache. Abb. 2: Funktionalität und Einsatzgebiete der beiden Konzepte Materialized View (MV) und SQL Query Result Cache. • V$RESULT_CACHE_MEMORY Alle momentan im Cache befindlichen Blöcke inklusive deren Status (Spalte FREE: YES|NO) werden hier aufgelistet. CREATE FUNCTION maAnzahl_Cache ( p_abteilungsnr NUMBER ) RETURN NUMBER RESULT_CACHE RELIES_ON (mitarbeiter) IS v_count NUMBER; BEGIN SELECT count(*) INTO v_count FROM mitarbeiter WHERE abteilungsnr = p_abteilungsnr; RETURN v_count; END; / Neben diesen Views bietet die PL/SQL-Prozedur DBMS_RESULT_CACHE.MEMORY_ REPORT zusätzlich die Möglichkeit, einen Report über die Nutzung des Result Cache Memory zu generieren. Zugriff auf veraltete Ja, Risiko besteht bei EinAbfragedaten stellung stale_tolerated möglich? Rewrite-Funktion vorhanden? Ja, umfangreich Nein, nur geringe Änderungen in der Schreibweise der Abfrage bei den Folgeausführungen werden toleriert (wie z. B. geänderte Groß-/Kleinschreibung, Whitespaces). Abb. 3: PL/SQL-Funktion mit Result Cache Klausel. 10 Sollen auch Abfrageergebnisse, die unter Beteiligung von Remote-Tabellen zustande kamen, im Result Cache aufgenommen werden, ist der Parameter RESULT_CACHE_ REMOTE_EXPIRATION auf einen Wert größer 0 zu setzen. Dieser bestimmt (in Minuten) die Gültigkeitsdauer der Resultate, bei denen entfernte Objekte beteiligt waren. ORDIX News 3/2008 Monitoring des Server Result Cache Für das Monitoring des Result Cache wurden in Oracle 11g neue Dynamic Performance Views eingeführt: Abgrenzung des SQL Query Result Cache zur Materialized View Diejenigen, die bereits mit Materialized Views (MV) gearbeitet haben, können sicherlich Parallelen zwischen den beiden Konzepten MV und Result Cache ziehen. Zwar erinnert das Konzept des Result Cache an eine im Speicher Datenbanken (SGA) liegende „Just-in-time“ Materialized View, genauer betrachtet unterscheiden sich die beiden Konzepte allerdings doch wesentlich in ihrer Funktionalität und dem Einsatzgebiet voneinander (siehe Abbildung 2). PL/SQL Function Result Cache Wie bereits angedeutet, setzt der PL/SQL Function Result Cache ebenfalls auf der bis dato vorgestellten Result Caching Funktionalität auf und erlaubt das Caching von Funktionsresultaten in Abhängigkeit ihrer Parameterwerte. Hierfür muss die PL/SQL-Funktion einfach mit der Compiler-Direktive RESULT_CACHE ausgestattet werden (siehe Abbildung 3). Mit der „optionalen“ Klausel RELIES_ON können die abhängigen Tabellen angegeben werden, bei denen Änderungen der Daten zur Invalidierung der entsprechenden Function Cache Einträge führen. Unterlässt man allerdings diese „freiwillige“ Angabe, besteht die Gefahr des Zugriffs auf veraltete Daten, da Oracle bei Datenänderungen die hiervon abhängigen Funktionsresultate im Cache nicht mehr automatisch invalidiert! Wenn angewendet, prüft Oracle den Result Cache, um zu sehen, ob ein Aufruf der Funktion – mit den gleichen Übergabeparametern – bereits existiert und liefert das im Cache befindliche Ergebnis zurück, statt die Funktion nochmals auszuführen (siehe Abbildung 4). Funktionen, die häufig ausgeführt werden und deren abhängige Daten nur selten oder nie eine Datenänderung erfahren, erweisen sich als optimale Kandidaten für diese Art des Result Caching. OCI Client Result Cache Auf Client- oder Application-Server-Seite können Ergebnisse von Abfragen und Funktionen nun ebenfalls in einem separaten Speicherbereich zwischengespeichert werden. Dieser wird als OCI Client Result Cache bezeichnet. Wie der Name bereits impliziert, ist das Cachen auf Client-Seite nur möglich, wenn es sich beim Client bzw. Application Server um eine Applikation handelt, die über das Oracle Call Interface (OCI) mit der Datenbank kommuniziert. Ein Treffer im Client Result Cache bewirkt, dass die beiden OCI Calls OCIStmtExecute() und OCIStmtFetch() zukünftig lokal bearbeitet werden können. Sessions auf dem Client oder Application Server können sich somit bei wiederholten Abfragen den „Gang“ an die Datenbank sparen. exec maAnzahl_Cache(10); Erster Funktionsaufruf Result Cache PL/SQL-Funktion wird an der DB ausgeführt Datenbank Server exec maAnzahl_Cache(10); Shared Pool exec maAnzahl_Cache(10); exec maAnzahl_Cache(10); Nachfolgende Funktionsaufrufe Abb. 4: PL/SQL Function Result Cache. OCI Client Result Cache aktivieren Um den Client Result Cache nutzen zu können, muss zunächst auf Server-Seite dessen maximale Größe in Bytes über den statischen Initialisierungsparameter CLIENT_RESULT_ CACHE_SIZE (Default: 0) gesetzt werden. Die Aktivierung auf dem Server vorausgesetzt, kann dieser Server-Parameter über die sqlnet.ora Einstellungen OCI_RESULT_CACHE_MAX_SIZE am Client überschrieben und pro Abfrageresultat mit den Parametern OCI_RESULT_CACHE_MAX_RSET_SIZE und OCI_RESULT_CACHE_MAX_RSET_ROWS genauer spezifiziert werden. Datenkonsistenz im OCI Client Result Cache Es stellt sich natürlich die Frage, wie Oracle es schafft, den Cache-Inhalt am Client mit den Änderungen, die in der Datenbank ausgeführt werden, konsistent zu halten. Zur Gewährleistung der Konsistenz des Client Cache nutzt Oracle folgendes Verfahren: Bei allen Anfragen des OCI-Client an die Datenbank bekommt dieser Informationen über Invalidierungen aufgrund geänderter (Meta-) Daten mit auf den Weg zurück geschickt. Sollte die OCI-Applikation allerdings für eine bestimmte Zeit keine Calls an die Datenbank absetzen, tritt die statische Server-Einstellung CLIENT_RESULT_CACHE_LAG in Kraft, die standardmäßig nach 3000 ms den nächsten ORDIX News 3/2008 11 Datenbanken Glossar SGA System Global Area. SGA ist der von Oracle allokierte Hauptspeicher auf dem Datenbank Server. OCI Oracle Call Interface. Client-seitige Low-Level-Programmierschnittstelle zum Zugriff auf die Oracle Datenbank, bestehend aus einer Sammlung von in C geschriebenen Software APIs. MV Materialized View. Materialized Views sind spezielle Sichten auf Tabellen, deren Inhalt temporär physikalisch gespeichert wird, um den Aufwand zur Berechnung zu minimieren. Links ► Buch „Oracle Database 11g New Features“, Autor: Robert G. Freeman, ISBN: 978-0071496612 ► Oracle by Example: http://www.oracle.com/technology/obe/11gr1_db/perform/rescache/res_cache.htm ► Arup Nanda – Oracle Database 11g: Caching and Pooling: http://www.oracle.com/technology/pub/articles/oracle-database-11g-topfeatures/ 11g-caching-pooling.html ► Tom Kyte – On Oracle Database 11g: Cache It: http://www.oracle.com/technology/oramag/oracle/07-sep/o57asktom.html Aufruf OCIStmtExecute() erzwingt. Dieser erzwungene Aufruf an die Datenbank erkundigt sich nach solchen Invalidierungen, die am Client letztlich zur Invalidierung der entsprechenden Resultate im Client Cache führen. Fazit Für Datenbankadministratoren, SQL- und PL/ SQL-Entwickler wird der Einsatz dieser neuen Funktion als sehr einfaches Mittel zum Tuning von SQL und PL/SQL vorkommen. Die sehr großen Performance-Verbesserungen werden sich jedoch nur bei richtiger Anwendung und Konfiguration dieser Funktion einstellen können. Diese sind bei Anwendungslogiken zu erwarten, die häufig die gleichen Abfragen absetzen und deren Daten – in Relation dazu gesehen – geringen Änderungen unterliegen. In einer der nächsten Ausgaben der ORDIX News werden wir Neuerungen beim Data Pump in Oracle 11g näher beleuchten. Kathleen Hock ([email protected]). Sponsored by ORDIX AG: silicon.de Golf Masters 2008 Das silicon.de Golf Masters wurde 2001 erstmalig als Einladungsturnier für IT- und Business-Entscheider in Unternehmen von silicon.de ausgetragen. Im siebten Jahr seit Bestehen dieses Golf Networking Events freut sich silicon.de mit seinem Hauptsponsor ORDIX AG, das Golf Masters 2008 ankündigen zu dürfen. Das silicon.de Golf Masters 2008 ist ein von ORDIX gesponsortes Einladungsturnier, zu dem 60 exklusive Spielerplätze verlost wurden. Dazu wird sich am 26. September 2008 eine „bunte Runde“ an IT-Führungskräften und Golf-Freunden im Tegernseer Golf-Club in Bad Wiessee zusammenfinden. Attraktiv: Programm & Preise Das Golf Masters wird nun im zweiten Jahr mit ORDIX als Hauptsponsor ausgetragen. 12 ORDIX News 3/2008 Im letzten Jahr veranstaltete die ORDIX AG das Golfturnier im Golfclub Main Taunus in Wiesbaden. Dabei wurden für die Klinikclowns rund 10.000 Euro an Spenden gesammelt. Auch 2008 sind wieder einige Überraschungen geplant. Natürlich gibt es wie jedes Jahr attraktive Preise zu gewinnen, die von ORDIX und den anderen Sponsoren zur Verfügung gestellt werden. Melden Sie sich über silicon.de oder Ihren ORDIX Ansprechpartner an. Wir wünschen allen Teilnehmern ein schönes Spiel. Weitere Informationen: www.ordix.de. Open Source SOAP Web-Services mit PHP 5 Seifenoper mit PHP 5 Web-Services dienen zur Interaktion unterschiedlicher Software-Systeme mittels standardisierter Schnittstellen. Hierbei handelt es sich nicht um eine brandneue Technologie, wie Sie schon in früheren Artikeln der ORDIX News lesen konnten. Unter anderem haben Sie dort bereits die Bedeutung von Web-Services im Bereich der serviceorientierten Architektur (SOA) kennengelernt. Web-Services ermöglichen die Kommunikation bzw. den Nachrichtenaustausch zweier grundlegend verschiedener Computersysteme mit- Dieser Artikel richtet sich an Web-Programmierer, die eigene Web-Services in PHP 5 entwickeln und anderen zur Verfügung stellen möchten, sowie bereits verfügbare Web-Services mit PHP 5 einbinden möchten. einander. Hierbei stechen zwei Standards besonders hervor: SOAP und XML. Eine Unterstützung dieser beiden ist bereits seit langem in PHP 5 integriert. Deren Einsatz zur Entwicklung und Nutzung von Web-Services stellen wir Ihnen in diesem Artikel vor. Einsatzbereiche von Web-Services Viele große Anbieter stellen ihre Dienste im Internet längst zusätzlich über Web-Services zur Verfügung. So können Sie z. B. auf Ihrer eigenen Webseite eine Google- oder Amazon-Suche einbauen. Mittlerweile stellen diese Anbieter ganze APIs für die Benutzung der Dienste bereit. Große Reise- und Hotelbuchungssysteme sind über Web-Services bei den eigentlichen Anbietern angebunden. Und auch eines der am weitesten verbreiteten Content Management Systeme, das PHP-basierte CMS Typo3, ermöglicht die Administration über eine SOAP-Schnittstelle. Web-Services für die unterschiedlichen Anwendungsmöglichkeiten sind im Internet zu finden. Deren Programmierung und Benutzung sind durchaus einen genaueren Blick wert. Verwendete Standards Standards spielen bei Web-Services eine essentielle Rolle. Wie auch sonst wäre ein problemloser Austausch von Nachrichten möglich? Für eine automatisierte Weiterverarbeitung ist ein einheitliches, definiertes Aussehen der Daten unerlässlich. Web-Services setzen daher für den Datenaustausch auf den XML-Standard. Diese XML-Daten müssen bestimmten Regeln entsprechen, damit eine problemlose Kommunikation zwischen Web- Service-Anbieter und -Nutzer gewährleistet werden kann. Um diese Regeln bzw. das genaue Aussehen der XML-Nachrichten zu definieren, kommt bei deren Programmierung SOAP zum Einsatz. SOAP ist ein Netzwerkprotokoll, das aus XMLRPC hervorging, jedoch nicht zwingend, wie sein Vorgänger, auf das Hypertext Transfer Protocol (HTTP) als Übertragungsprotokoll angewiesen ist. Somit könnten SOAP-Nachrichten auch über SMTP, TCP oder UDP übertragen werden. Jedoch hat sich auch hier HTTP größtenteils durchgesetzt, da es ein sehr einfach gehaltenes Protokoll ist und der Standard-HTTP-Port 80 meistens nicht von Firewalls geblockt wird. Über SOAP können im Zusammenspiel mit der Web Service Description Language (WSDL) auch komplexere Datentypen wie z. B. Klassen oder auch Dateien transportiert werden, wohingegen XML-RPC auf wenige einfache Datentypen beschränkt ist. Eine SOAP-Nachricht wird mittels XML repräsentiert und nutzt standardmäßig auch die Datentypen des XML-Schemas. Voraussetzungen für SOAP In PHP 5 ist die SOAP-Erweiterung bereits ein fester Bestandteil und oft auch schon aktiviert. Sie können über die Ausgabe von phpinfo() feststellen, ob die Erweiterung ORDIX News 3/2008 13 Open Source aktiviert ist. Dort sollte etwas Vergleichbares, wie in Abbildung 1 stehen. Ist dieser Abschnitt nicht vorhanden, so muss die SOAP-Erweiterung zunächst in PHP integriert werden. Unter Windows wird dazu der entsprechende Eintrag extension=php_soap.dll in der Datei php.ini aktiviert. Den Linux-Benutzern bleibt nichts anderes übrig, als PHP neu zu kompilieren und dabei den Schalter --enable-soap mit anzugeben. Mit einer aktivierten SOAP-Erweiterung sind nun die Voraussetzungen zur Web-Service-Programmierung erfüllt. Damit stellt PHP spezielle Klassen und Methoden bereit, die Ihnen helfen, mittels SOAP zu kommunizieren, ohne selbst die XML-Nachrichten erzeugen zu müssen. Diese Arbeit übernimmt PHP für Sie! Erstellung eines Web-Service Abb. 1: SOAP-Abschnitt in der Ausgabe von phpinfo(). function sagHallo($begruessung) { return 'Hallo ' . $begruessung; } $options = array('uri' => 'http://localhost/ws/'); $SOAPServer = new SoapServer(null, $options); $SOAPServer->addFunction('sagHallo'); $SOAPServer->handle(); In PHP steht es Ihnen frei, einen Web-Service mit oder ohne WSDL-Beschreibung bereitzustellen. Betrachten wir zunächst die Erstellung einer Web-Service Serverkomponente ohne WSDL-Datei, die sich auf nur wenige CodeZeilen beschränkt. In Abbildung 2 sehen Sie, wie eine Serverkomponente mit PHP 5 erstellt wird. Zunächst definieren wir eine Funktion, die unsere Geschäftslogik implementiert. Sie ist in diesem Fall recht einfach gehalten, kann aber je nach Belieben komplexe Verarbeitungen und Datenbankzugriffe beinhalten. Im Non-WSDL-Modus wird nur die Angabe einer URI für den Namensraum des Services benötigt. Als nächstes erzeugen wir ein neues Objekt vom Typ SoapServer und übergeben dem Konstruktor null für den WSDL-DateiParameter und das Array $options. Mit der Methode addFunction wird dem Objekt eine Funktion bekannt gemacht, die von einem Client aufgerufen werden darf. Zu guter Letzt wird dem Objekt SoapServer mit der Methode handle mitgeteilt, dass es Anfragen von anfragenden Clients bearbeiten soll. Abb. 2: Die Web-Service Server-Komponente (server.php). require_once('MyWebServiceClass.php'); $options = array('uri' => 'http://localhost/ws/'); $SOAPServer = new SoapServer(null, $options); $SOAPServer->setClass('MyWebServiceClass'); $SOAPServer->handle(); Abb. 3: Kapseln mehrerer Funktionen in einer Klasse (server_klasse.php). class MyWebServiceClass { public function sagHallo($begruessung) { return 'Hallo ' . $begruessung; } Haben Sie mehr als eine Funktion, die Sie im Web-Service bereitstellen möchten, müssen Sie die Methode addFunction für jede Ihrer Funktionen separat aufrufen. Dies kann bei sehr vielen Funktionen den Code stark wachsen lassen. Daher sei Ihnen hier ans Herz gelegt, in so einem Fall die Funktionen in einer Klasse zu kapseln und mit der Methode setClass des Objekts SoapServer zu arbeiten. Ein Beispiel dafür sehen Sie in den Abbildungen 3 und 4. Hier ist zu beachten, dass die Methode setClass zwar mehrmals verwendet werden kann, aber für ein Objekt SoapServer immer nur die zuletzt gesetzte Klasse gültig ist. Zugriff auf den Web-Service public function addiere($a, $b) { return $a + $b; } } Abb. 4: Eine Klasse, die ihre Geschäftslogik kapselt. 14 ORDIX News 3/2008 Die Programmierung einer Client-Komponente für den Zugriff auf die eben erzeugten WebServices ist mit PHP durch wenige Code-Zeilen abgehandelt. Schauen Sie sich hierzu die Abbildung 5 an. Wie Sie sehen, arbeiten wir in der Open Source client.php zunächst im Non-WSDL-Modus und definieren ein Array namens $options. Darin hinterlegen wir unter dem Schlüssel location den URI zu unserer Server-Komponente. Das zweite Element ist der URI für den Namensraum, der auch in der ServerKomponente gewählt wurde. Wir erzeugen ein neues Objekt vom Typ SoapClient und übergeben dem Konstruktor null für den WSDLDateiparameter und das Array $options. Somit kennt der Client die URI zum Web-Service und kann die Funktion sagHallo aufrufen. Den Rückgabewert dieser Funktion geben wir anschließend mit echo aus. Sie sehen, dass Sie sich selbst keinerlei Gedanken über die SOAP-Nachrichten machen müssen. PHP übernimmt die gesamte Arbeit für Sie. Dies beinhaltet das Senden der Nachricht im korrekten SOAP-XML-Format vom Client an den Server sowie die Generierung und das Zurücksenden der Antwort vom Server an den Client. Beschreibung des Web-Services Ein gut funktionierendes Programm ohne ausreichende Dokumentation oder Beschreibung hilft dem Benutzer nicht viel weiter. Aus diesem Grund ist es sinnvoll, auch zu Ihrem Web-Service eine Dokumentation mitzuliefern. Diese erfolgt in Form einer WSDL-Datei, in der die Funktionen und Datentypen Ihres Web-Services hinterlegt und den Entwicklern von Clients zur Verfügung gestellt werden. Das manuelle Erstellen einer WSDL-Datei ist sehr fehleranfällig, daher sollten Sie sich hierbei mit externen Programmen behelfen. Bekannte PHP-Entwicklungsumgebungen wie das Zend Studio oder Eclipse PDT unterstützen die Erstellung von WSDL-Dateien - entweder durch einen Wizard oder eine grafische Schnittstelle. Die automatische Generierung einer WSDLDatei zu einem bestehenden Web-Service ist in PHP leider noch nicht implementiert. Es gibt allerdings schon Programme, die Ihnen diese Arbeit zu großen Teilen abnehmen. Zu diesen Programmen zählen unter anderem das Web Service Framework for PHP von WSO2 [1], das PHP-Framework Prado der Prado Group [2] oder auch nuSOAP [3]. Letzteres erfreute bereits unter PHP 4 die Entwickler, weil es schon eine Möglichkeit bot, Web-Services mit SOAP zu implementieren. In Abbildung 6 sehen Sie die WSDL-Datei zu unserem obigen Beispiel. Zunächst werden zwei Nachrichten definiert, welche die Anfrage (sagHalloRequest) an den Service, sowie $options = array( 'location' => 'http://localhost/ws/server_klasse.php', 'uri' => 'http://localhost/ws/'); $SOAPClient = new SoapClient(null, $options); echo $SOAPClient->sagHallo('Lars'); Abb. 5: Die Web-Service Client-Komponente (client.php). <?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions name="MyWebService" targetNamespace="http://localhost/ws/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://localhost/ ws/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http:// schemas.xmlsoap.org/wsdl/soap/"> <wsdl:message name="sagHalloRequest"> <wsdl:part name="name" type="xsd:string"></wsdl:part> </wsdl:message> <wsdl:message name="sagHalloResponse"> <wsdl:part name="begruessung" type="xsd:string"></wsdl:part> </wsdl:message> <wsdl:portType name="MyWebServicePortType"> <wsdl:operation name="sagHallo"> <wsdl:input message="tns:sagHalloRequest"></wsdl:input> <wsdl:output message="tns:sagHalloResponse"></wsdl:output> </wsdl:operation> </wsdl:portType> <wsdl:binding name="MyWebServiceBinding" type="tns:MyWebServicePortType"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operation name="sagHallo"> <soap:operation soapAction="http://localhost/ws/sagHallo" /> <wsdl:input> <soap:body use="literal" namespace="http://localhost/ws/" /> </wsdl:input> <wsdl:output> <soap:body use="literal" namespace="http://localhost/ws/" /> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="MyWebService"> <wsdl:port name="MyWebServicePort" binding="tns:MyWebServiceBinding"> <soap:address location="http://localhost/ws/server_klasse.php"/> </wsdl:port> </wsdl:service> </wsdl:definitions> Abb. 6: Beschreibungsdatei des Web-Services (WebService.wsdl). seine Antwort (sagHalloResponse) darauf repräsentieren. Diese beiden Nachrichten bilden die Operation sagHallo, welche unserer Funktion in der Klasse MyWebServiceClass.php entspricht. Im nun folgenden binding-Block legen wir das zu nutzende Transportprotokoll und die Formatierung der Ein- und Ausgabe fest. Der Transport der Daten findet mittels SOAP über HTTP statt ORDIX News 3/2008 15 Open Source und die Formatierung der Ein-/Ausgabe soll literal sein. Unter welcher URI der WebService erreichbar ist, definieren wir im letzten Abschnitt der WSDL-Datei und verweisen bei location auf unsere server_klasse.php. // server_klasse.php // [...] $wsdl = 'http://localhost/ws/WebService.wsdl'; $SOAPServer = new SoapServer($wsdl); // [...] // client.php // [...] $options = array('trace' => '1'); $wsdl = 'http://localhost/ws/WebService.wsdl'; $SOAPClient = new SoapClient($wsdl, $options); // [...] Abb. 7: Einbinden der WSDL-Datei im Server und im Client. Glossar SOAP Simple Object Access Protocol (SOAP) ist ein Protokoll, mit dessen Hilfe Daten zwischen Systemen ausgetauscht und Remote Procedure Calls durchgeführt werden können. Es stützt sich auf die Dienste anderer Standards: auf XML zur Repräsentation der Daten und auf Internet-Protokolle der Transport- und Anwendungsschicht zur Übertragung der Nachrichten. Die gängigste Kombination ist SOAP über HTTP und TCP. XML Extensible Markup Language (XML). XML ist eine so genannte Metasprache zur Beschreibung von Dokumenten. Ein Vorteil von XML ist der vereinfachte Austausch von Daten, da XML-Formate in einer strengen Grammatik definiert werden können und so die Implementierung von zuverlässigen Schnittstellen erlaubt. WSDL Web Services Description Language. WSDL definiert einen plattform-, programmiersprachen- und protokollunabhängigen XML-Standard zur Beschreibung von Web-Services, die einen Austausch von Nachrichten ermöglichen. WSDL gibt also das Format für eine einheitliche Beschreibung eines Web-Services vor, anhand dessen ein solcher Service angefragt und dessen Funktionen abgerufen werden können. HTTP Hypertext Transfer Protocol (engl.: Hypertext-Übertragungsprotokoll). HTTP ist ein Protokoll zur Übertragung von Daten über ein Netzwerk. Es wird hauptsächlich eingesetzt, um Webseiten und andere Daten aus dem Internet in einen Webbrowser zu laden. XML-RPC Extensible Markup Language Remote Procedure Call. XML-RPC ist eine Definition zum Methodenaufruf (oder auch Funktionsaufruf) durch verteilte Systeme. Sie ist eine Verbindung von zwei Standards: Für den Transport der Daten wurde auf HTTP zurückgegriffen, die Darstellung der übertragenen Daten geschieht in XML. Eine Implementierung von XML-RPC ist ohne großen Aufwand in unterschiedlichen Programmiersprachen und auf unterschiedlichen Systemplattformen möglich. Historisch gesehen stellt XML-RPC den Vorgänger zu SOAP dar, ist im Gegensatz zu diesem jedoch wesentlich schlanker und schneller zu verstehen. HPCCluster In einem High Performance Computing Cluster schaltet man die Komponenten (CPU, RAM etc.) zusammen, um mehr Leistung zu erzielen. Fencing Falls der Cluster keine Informationen mehr über seine Partnerknoten be(fechten) kommt, also z. B. die Heartbeat-Leitungen zerstört sind, tritt das Fencing ein. Es eröffnet verschiedene Lösungen, um mögliche Schäden zu verhindern wie z. B. STONITH, Self-fencing RAID Controller, Abschalten des FibreChannel Ports und SCSI3 Reservierungen. 16 ORDIX News 3/2008 Server und Client mit WSDL-Datei Um die soeben erstellte WSDL-Datei in unserem Web-Service zu verwenden, muss bei der Instanzierung der Objekte SoapServer und SoapClient der Pfad zur Datei angegeben werden. Abbildung 7 zeigt hierzu die CodeAusschnitte aus der server_klasse.php und der client.php. In der Client-Komponente können wir jetzt mittels der Methode __getFunctions() des SoapClient Objekts alle Funktionen, die der Web-Service bereit stellt, ausgeben lassen. Wären wir noch etwas weiter gegangen und hätten eigene Typen definiert, so würde uns die Methode __getTypes() eine Liste aller in der WSDLDatei vorkommenden Datentypen liefern. Wenn die URI zum Web-Service bekannt ist, kennen Sie automatisch auch die URI zu dessen WSDL-Datei. Um deren Inhalt z. B. im Browser anzuzeigen, hängen Sie einfach ?wsdl an die URI des Web-Services. Da diese Datei nicht lokal von Ihnen gespeichert werden muss, sondern lediglich dem Client als Parameter mitgegeben wird, könnten Sie demnach anstatt $wsdl = 'http:// local host/ws/WebService.wsdl'; auch $wsdl = 'http://localhost/ws/ server_klasse.php?wsdl'; in der Datei client.php schreiben. Fehlersuche und Debugging Das Objekt SoapClient stellt dem Programmierer eine Reihe von Methoden zur Verfügung, die bei der Kontrolle des SOAP-Nachrichtenaustausches mit dem Web-Service behilflich sind: • __getLastRequest() – Liefert die SOAPXML-Daten der Anfrage an den Service • __getLastRequestHeaders() – Liefert den Header der Anfrage • __getLastResponse() – Liefert die SOAPXML-Daten der Antwort des Services • __getLastResponseHeaders() – Liefert den Header der Antwort Diese Methoden können jedoch nur eingesetzt werden, wenn die Instanz des Objekts SoapClient mit der Option trace [z. B. $client = new SoapClient(null, array('trace' => 1))] erstellt wurde. Tritt beim Aufruf des Web-Services ein Fehler auf, so wird standardmäßig eine Exception vom Typ SoapFault erzeugt. Diese können Open Source Sie wie gewohnt mit try und catch abfangen. Ein Beispiel hierfür können Sie in Abbildung 8 sehen. In diesem Beispiel rufen wir eine Funktion sagHallo2 auf, die der Web-Service nicht anbietet. Dies führt zu einem Fehler. Mit der Funktion print_r lassen wir uns den Inhalt des Objekts SoapFault anzeigen. Besonders in der Entwicklungsphase eines Web-Services müssen Sie sicherlich oft Änderungen an der WSDL-Datei durchführen, bis diese die von Ihnen gewünschte Beschreibung für den Service liefert. In dieser Phase ist es hilfreich, den php.ini-Parameter soap.wsdl_cache_enabled auf 0 zu setzen. Damit wird das Zwischenspeichern der vom Web-Service benutzten WSDL-Datei verhindert und wird bei jedem Aufruf neu ausgewertet. In einer Produktionsumgebung ist es aus Performance-Sicht ratsam, diese Einstellung wieder zu aktivieren. Fazit Diese Einführung in die Web-Service-Programmierung mit PHP 5 unter der Verwendung des SOAP-Standards zeigt, dass es keine Zauberei ist, einen Web-Service aufzusetzen und anzusprechen. Durch die SOAP-Erweiterung $wsdl = 'http://localhost/ws/server_klasse.php?wsdl'; $SOAPClient = new SoapClient($wsdl); try { $SOAPClient->sagHallo2('Lars'); } catch (SoapFault $sf) { print_r($sf); } Abb. 8: Fehlermeldungen ausgeben (client_fault.php). Links ► ► ► ► [1] Web Service Framework for PHP von WSO2: http://wso2.org/projects/wsf/php [2] Prado-Framework: http://www.pradosoft.com/ [3] nuSOAP: http://dietrich.ganx4.com/nusoap/ [4] Informationen zu PHP-SOAP: http://de3.php.net/SOAP von PHP 5 wird dem Programmierer viel Arbeit abgenommen, der ansonsten selbst die XMLNachrichten für die Web-Service-Kommunikation erstellen müsste. Ein kleiner Wermutstropfen ist leider die „von Haus aus“ fehlende Unterstützung zur Generierung von WSDL-Dateien, wobei hier externe Programme weiterhelfen. Mit der Unterstützung für Web-Service-Standards kann auch PHP 5 in einem Atemzug mit Technologien wie JEE oder .NET genannt werden. Lars Hendrik Korte ([email protected]). Impressum Herausgeber: ORDIX AG Aktiengesellschaft für Softwareentwicklung, Beratung, Schulung und Systemintegration, Paderborn Redaktion: Helma Jenniches, Sascia Brinkmann V.i.S.d.P.: Benedikt Georgi, Wolfgang Kögler Anschrift der Redaktion: ORDIX AG Westernmauer 12 - 16 33098 Paderborn Tel.: 05251 1063-0 Fax: 0180 1673490 Gestaltung/Layout: Sascia Brinkmann Auflage: 9.400 Druck: Druckerei Reike GmbH, Paderborn Bildnachweis: flickr.com © Thomas Duesing; flickr.com © Tup Wanders; flickr.com © Sebastian Bergmann ; pixelio.de © Angelika Lutz; photocase.de © tinguely; aboutpixel.de © Rainer Sturm Autoren dieser Ausgabe: Christof Amelunxen, Wilhelm Breßer, Sascia Brinkmann, Marius Dorlöchter, Markus Fiegler, Klaus Garstecki, Dirk Hansmeier, Stefanie Heither, Michael Heß, Kathleen Hock, Alexander Keil, Lars Hendrik Korte, Wolfgang Kögler, Rainer Restat, Alexander Zeller Copyright: ORDIX AG. Alle Rechte, auch die der Übersetzung, des Nachdrucks und der Vervielfältigung der Artikel oder von Teilen daraus, bleiben uns vorbehalten. Kein Teil der Artikel darf ohne unsere schriftliche Genehmigung in irgendeiner Form reproduziert, insbesondere unter Verwendung elektronischer Systeme verarbeitet, verbreitet, vervielfältigt oder zu öffentlichen Wiedergaben benutzt werden. Haftung: Eine Haftung für die Richtigkeit der Veröffentlichungen kann trotz sorgfältiger Prüfung durch die Redaktion vom Herausgeber nicht übernommen werden. Warenzeichen: Einige der aufgeführten Bezeichnungen sind eingetragene Warenzeichen ihrer jeweiligen Inhaber. ORDIX® ist registrierte Marke der ORDIX AG. Die Zeitschrift ORDIX News wird von der ORDIX AG an ausgewählte Kunden verteilt und kann für 2,20 Euro bestellt werden. Sie finden sowohl die neueste Ausgabe als auch ältere Ausgaben im Archiv der ORDIX News im Internet unter: http://www.ordix.de. Schauen Sie mal rein! Der Kontakt zu unseren Lesern ist uns sehr wichtig. Für Anregungen, Kritik und Anmerkungen zu den Themen, aber auch für interessante Ideen sind wir immer offen und dankbar. Wir freuen uns auf Ihr Feedback an [email protected]. ORDIX News 3/2008 17 Java/JEE Java Best Practice (Teil II): Eclipse Feinjustage Dieser Artikel richtet sich an Java-Entwickler. Eclipse ist eine der führenden Entwicklungsumgebungen. Sie zu installieren, ist mit wenigen Handgriffen erledigt. Doch was kommt dann? Auch wenn die meisten DefaultEinstellungen für den Einstieg in Ordnung sind, gibt es doch genug Stellschrauben, die einen detaillierten Blick wert sind. Ganz im Sinne des ORDIX Mottos „Best Practice“ soll dieser Artikel einige bewährte Einstellungen aus dem Projektalltag aufzeigen. Java Best Practice Anfangs langsam Einer der am häufigsten anzutreffenden Konfigurationsfehler in einem neu installierten Eclipse ist zu gering dimensionierter Speicher für die JVM. Die in diesem Fall typischerweise auftretenden Symptome sind „Trägheit der Oberfläche“ und „Abstürze bzw. Einfrieren“, womit die Eclipse-Sitzung zu Ende ist, bevor sie überhaupt richtig begonnen hat. Gerne treten diese Symptome auch nacheinander innerhalb einer Sitzung auf - ganz gemäß der Beschreibung eines Anwenders: „Erst wird es langsam und dann kracht es“. Die Trägheit deutet darauf hin, dass zu wenig Datenspeicher zur Verfügung steht und die JVM sehr häufig mit der Garbage Collection beschäftigt ist. Ob hier das Problem liegt, kann man sehr gut beobachten, indem der Heap Monitor aktiviert wird (Window Ö Preferences Ö General Ö Show Heap Status). Dieser zeigt den Füllstand des Speichers in Form eines kleinen Balkendiagramms in der unteren Statusleiste von Eclipse an (siehe Abbildung 1). Es geht auch schnell Die Abstürze bzw. das Einfrieren sind fast immer damit begründet, dass der Speicherbereich für Klassendefinitionen zu klein definiert ist. Da die Klassen erst bei Bedarf geladen werden, z. B. beim Öffnen einer View, die bisher noch nicht zum Einsatz kam, tritt das Problem sehr häufig beim Aufrufen einer neuen Perspektive auf. Diese löst das Laden mehrerer Views aus, obwohl kein Speicher mehr für 18 ORDIX News 3/2008 das Laden der entsprechenden Java-Klassen vorhanden ist. Die Lösung für diese beiden Probleme liegt in der Datei eclipse.ini, die im Installationsverzeichnis von Eclipse zu finden ist. Neben einigen Eclipse-spezifischen Parametern können dort auch die Laufzeitparameter der JVM eingetragen werden. Die entscheidenden Parameter sind -Xmx und -XX:MaxPermSize. Ersterer setzt den maximal für Daten zu verwendenden Hauptspeicher der JVM. Letzterer dimensioniert den speziellen Speicherbereich PermGen, der beim Laden von Klassen verwendet wird. Abbildung 2 zeigt eine typische eclipse.ini. Eine Anmerkung zu dieser Thematik: Wie Abbildung 2 zeigt, hat das Eclipse-Projekt das PermGen-Problem bereits erkannt und eine eigene Lösung mitgeliefert (Parameter --launcher.XXMaxPermSize 256m). Leider tritt aber unter Windows in Kombination mit bestimmten Java-Versionen die Situation ein, dass dieser Parameter ignoriert wird. Es bleibt zu hoffen, dass dieses Problem in Zukunft behoben wird und Abstürze aufgrund von Speichermangel dann endgültig der Vergangenheit angehören. Zwangspausen mangels Internet Die Validierung von Markup-Dokumenten (XML, HTML) ist eine praktische Funktionalität. Durch farbliche Markierungen wird der Anwender direkt auf Probleme hingewiesen. Die Validierung basiert dabei auf DTD- bzw. XSDDokumenten, auch Descriptoren genannt, die Java/JEE den validen Aufbau eines Markup-Dokuments beschreiben. Welcher Descriptor zum Einsatz kommt, wird im Kopfbereich des Markup-Dokuments beschrieben. Zur Tücke wird dies, wenn diese Definition auf eine Position im Internet verweist. Zwar ist Eclipse technisch durchaus in der Lage, den Descriptor aus dem Internet zu laden, aber nicht immer ist dies auch innerhalb von Firmennetzen möglich. Insbesondere wenn gar kein Internetzugang zur Verfügung steht, DNS-Anfragen aber weltweit möglich sind, kommt es häufig zu Problemen. Es scheint, dass Eclipse hängt bzw. abgestürzt ist, tatsächlich wird aber auf ein Timeout für die Anfrage des Descriptors gewartet. Abb. 1: Der Heap Monitor von Eclipse zeigt die Speicherreserven der JVM. -showsplash org.eclipse.platform --launcher.XXMaxPermSize 256m -vmargs -XX:MaxPermSize=128m -Xmx512m Abb. 2: Die eclipse.ini enthält wichtige Einstellungen für die JVM. Weniger Prüfungen, mehr Geschwindigkeit Da dieses Problem auch noch bei korrekt eingetragenem Proxy innerhalb von Eclipse auftritt, liegt die Vermutung nahe, dass noch nicht alle Teile von Eclipse die Proxy-Konfiguration berücksichtigen. Ein Workaround für dieses Problem ist das Abschalten der Validatoren. Dies geschieht über den Konfigurationseintrag „Validation“. Dort können die Validatoren für die einzelnen Dokumententypen (de-)aktiviert werden. Zusätzlich bietet dieser Dialog die Checkbox Suspend all Validators an. In der Praxis hat sich das Deaktivieren aller Validatoren sowie das anschließende Auswählen der zuvor genannten SuspendCheckbox bewährt. Die Funktionalität der Validierung geht dabei zwar verloren, aber eine syntaktische Prüfung erfolgt auch weiterhin. Zum Beispiel wird ein fehlendes Tag innerhalb einer XML-Datei auch weiterhin vom Editor erkannt und angemerkt. Viele Warnungen in der Problem View Größere Projekte haben die Eigenschaft, dass sie sehr viele Warnungen produzieren. Sei es, weil Eclipse die Rechtschreibung nicht mag, weil der Einsatz von nicht typisierten Collections seit Java 1.5 zu Warnungen führt, oder weil tatsächlich problematische Stellen im Code identifiziert wurden. Die Rechtschreibprüfung ist in einer IDE nicht die Kernfunktionalität und lässt sich schnell über den Haken „Window Ö Preferences Ö General Ö Editors Ö Text Editors Ö Spelling Ö Enable Spellchecking“ deaktivieren. Alle anderen erkannten Probleme bleiben – kurzum: Die Problem View ist eigentlich in jedem Projekt Abb. 3: Der Filterdialog der Problem View. gut gefüllt. Zwar sollte Quellcode stets ohne Warnungen vorliegen, doch dieses Ideal zu erreichen, ist nicht immer möglich. Warnungen gänzlich zu ignorieren, ist aber auch keine Lösung. Manche sind äußerst sinnvoll und weisen auf reale Fehler hin - wenn sie nicht in der Masse der Warnungen untergehen. Selektive Sichtweise Damit hier nicht der Überblick verloren geht, lässt sich die Problem View auf die eigenen Vorlieben anpassen. Eine interessante Möglichkeit ist es, die View auf das gerade im Resources Tree ausgewählte Element und wahlweise seine Unterelemente zu beschränken. Damit lassen sich dann Fragen wie z. B. „Welche Probleme hat dieses Package?“ sehr einfach beantworten, indem man im Baum das entsprechende Package auswählt. Gleichzeitig werden in dieser Einstellung für ORDIX News 3/2008 19 Java/JEE Blattelemente des Baums (z. B. alle Klassen) nur noch die in ihnen gefundenen Probleme angezeigt. Abbildung 3 zeigt den Filterdialog mit der benötigten Einstellung. Zugriffsregelung Eine weitere, gut versteckte Hilfe sind die Zugriffsregeln für einzelne Bibliotheken. Mit Hilfe der Regeln kann der Zugriff auf bestimmte Klassen oder Pakete verhindert werden. Einmal konfiguriert, generieren diese Regeln Fehlermeldungen bzw. Warnungen, wenn Klassen verwendet werden, die auf das entsprechende Muster einer Regel passen. Als Anwendungsbeispiel sei hier die Umstellung des verwendeten Logging Frameworks eines Projekts von log4j auf commons-logging genannt. Abbildung 4 zeigt die entsprechende Filterkonfiguration. Die Verwendung von Klassen aus dem Paket org.apache.log4j wird verboten (forbidden) und ein Fehler in den entsprechenden Klassen der Anwendung angezeigt. Der Vorteil dieses Ansatzes im Vergleich zu einem projektweiten Suchen und Ersetzen ist die Nachhaltigkeit. Während ein Ersetzen nur den Code zum aktuellen Zeitpunkt umstellt, verhindert der Einsatz von Access Rules auch die zukünftige, versehentliche Verwendung dieser Klassen. Step-Filter Abb. 4: Die Access Rules sind tief unten in der Buildpath-Konfiguration versteckt. Das Debugging von Anwendungen beginnt häufig mit der Suche nach den interessanten Code-Abschnitten. Dazu muss der Code ab einem Einstiegspunkt schrittweise untersucht werden. Ein Problem stellen die Klassen und Methoden der Java API dar, die bei diesem Stepping zwangsweise mit besucht werden müssen. Als Beispiel sei hier die einfache Codezeile if (aString.size() >= 5) doSomething(); anzunehmen. Der interessante Teil ist der Aufruf von doSomething(). Beim Stepping erfolgt aber zunächst ein Aufruf von size() und erst dann doSomething(). Man kann aus dem Aufruf von size() mit einem Step-Back direkt zurückspringen und den Aufruf von doSomething() starten. Da dieser Vorgang aber für jede Iteration wiederholt werden muss, wünscht man sich schnell eine bessere Lösung. Die eigenen Klassen im Fokus Diesem Wunsch kommt Eclipse mit seinen Step-Filtern nach. Unter „Java Ö Debug Ö Step Filtering“ in den Eclipse-Einstellungen können Pakete und Klassen bestimmt werden, die beim Stepping übersprungen werden. Abbildung 5 zeigt die im Lieferumfang von Eclipse enthaltene Auswahl. Eine Erweiterung um zusätzliche Pakete und Klassen ist durch den Anwender ebenfalls möglich. Abb. 5: Dank der Stepfilter hat der Entwickler beim Debugging immer seine eigenen Klassen im Fokus. 20 ORDIX News 3/2008 Ist der Step-Filter aktiviert, werden Methoden der in diesem Dialog ausgewählten Klassen Java/JEE und Pakete beim Stepping automatisch übersprungen. Im Beispiel würde das Aktivieren des Step-Filters für java.* bewirken, dass die VM erst beim Einsprung in doSomething() anhalten würde. Die umständliche Zwangspause in size()entfällt für den Anwender. Glossar JVM Java Virtual Machine. Programm, in dem Java-Programme ausgeführt werden. Eine JVM ist vom Betriebssystem abhängig, während das Java-Programm unabhängig vom Betriebssystem ist. PermGen Teil des Hauptspeichers eines Java Prozesses, in den Klassendefinitionen geladen werden. Versteckte Schätze Garbage Collection Vorgang der Java Virtual Machine, bei dem nicht mehr benötigte Objekte zerstört werden, um ihren Speicherplatz erneut nutzen zu können. Der Einstieg in die Java-Entwicklungsumgebung Eclipse fällt in der Regel sehr leicht. Doch dass die IDE häufig in ihrer Grundkonfiguration Probleme mit dem Speichermanagement hat, kratzt immer wieder am Image. Auch die schiere Masse an Einstellungsmöglichkeiten macht es schwer, die besonders nützlichen Funktionen auf Anhieb zu erkennen, denn sie bleiben bei flüchtigem Hinsehen verborgen. Perspektive Feste Zusammenstellung verschiedener Ansichtselemente (auch Views (Eclipse) genannt). Die Zusammenstellung erfolgt entweder für einen bestimmten Anwendungszweck (z. B. Java Debugging) oder wird durch den Eclipse Anwender nach Belieben selbst zusammengestellt. So haben uns die hier vorgestellten Einstellungen in der Praxis weitergeholfen – aber erst nachdem wir aktiv nach ihnen gesucht haben. Meist sind es die Probleme des Entwickleralltags, die uns dazu zwingen, die IDE einmal näher zu betrachten. Ein Grund mehr, sich immer wieder mit den Möglichkeiten und Einstellungen näher zu beschäftigen, nicht nur - aber gerade auch - nach einem Versionswechsel. Michael Heß ([email protected]). Link ► [1] Eclipse Dokumentation: http://www.eclipse.org/documentation/ Teil I: Java-Objekte in der Identitätskrise Teil II: Eclipse Feinjustage Teil III: Typisch Ant Teil IV: Exception Handling ... Java Best Practice ORDIX gründet Coniatos AG Die ORDIX AG gründete am 09.06.2008 mit dem IT-Consultant Lars Eisenblatt die Coniatos AG in Wiesbaden. Das neue Unternehmen bietet Ihnen hochwertige Beratung und Schulung mit Schwerpunkten auf den Gebieten IT-Management, Business Management, Systemisches Consulting, IT-Management-Beratung und Softwareentwicklung. Mit der Gründung des neuen Tochterunternehmens sichert sich ORDIX das Knowhow und die Erfahrung von Lars Eisenblatt, der inzwischen über 28 Jahre Berufspraxis in der IT als Managementberater, Projektmanager, Trainer und Geschäftsführer verfügt. Als alleiniger Vorstand der Coniatos AG wird er einen Stab hochqualifizierter Berater aufbauen. Damit ergänzt ORDIX seine eigenen Kompetenzen im Bereich hochwertiger Dienstleistungen. Die Coniatos AG ist bereits die zweite Unternehmensbeteiligung der ORDIX AG: Seit 2002 ist die Object Systems GmbH in Essen Tochterunternehmen von ORDIX und bietet Dienstleistungen im Bereich Design und Entwicklung von JEE-Lösungen, sowie im Test- und Qualitätsmanagement an. Mehr über die Coniatos AG finden Sie demnächst im Internet unter www.coniatos.com bzw. www.coniatos.de. Lars Eisenblatt, Coniatos AG Kreuzberger Ring 13 65205 Wiesbaden Tel.: 0611 77840-00 Fax: 0180 1673490 E-Mail: [email protected] ORDIX News 3/2008 21 Datenbanken Reihe Oracle Objekttypen von A – Z (Teil VII): LOB, LOB Partition, LOB Subpartition, Materialized Views, Operator Dieser Artikel richtet sich an Datenbankadministratoren und Entwickler, die einen Überblick über die Objekttypen von Oracle bekommen möchten. Im siebten Teil der Reihe Objekttypen beginnen wir mit „L“ wie LOB und weiteren LOB-bezogenen Objekttypen wie LOB Partition und LOB Subpartition. Außerdem stellen wir den Objekttyp Materialized View und den benutzerdefinierten Objekttyp Operator vor. LOB Large Object Der Objekttyp LOB speichert unstrukturierte textuelle oder binäre Daten, wie z. B. Grafiken oder Musikdateien, bis zu einer Größe von 128 Terabytes. Bei jeder Verwendung der internen Datentypen CLOB, BLOB, NCLOB und dem externen Datentyp BFILE wird ein Objekt vom Typ LOB erzeugt. Die folgende Auflistung beschreibt die Eigenschaften und Anwendungsbereiche der einzelnen LOB Datentypen: • • 22 ORDIX News 3/2008 CLOB: In einem Character Large Object werden lange Texte gespeichert. Der Vorteil gegenüber VARCHAR2(…) liegt in der nahezu freien Größe. Der Datentyp VARCHAR2 ist auf 4000 Byte begrenzt. Oracle verwendet für den Zugriff von Anwendungsprogrammen auf LOBs so genannte Locatoren. Ein 2000 Zeichen langes LOB ist in der Regel langsamer zu verarbeiten als ein 2000 Zeichen langer VARCHAR2. BLOB: In den Binary Large Objects speichert man solche Anwendungsdaten, die vom Datenbanksystem nicht interpretiert, sondern nur gespeichert bzw. archiviert werden sollen. Der Datentyp BLOB ist der Nachfolger des Datentyps LONG RAW. • NCLOB: Der NCLOB nimmt die Textdaten im Unicode nationalen Zeichensatz auf. • BFILE: Die Daten eines Bfiles befinden sich in externen Dateien im Dateisystem. Auf BFILE Daten kann ausschließlich lesend zugegriffen werden. In Abbildung 1 ist die Definition einer Tabelle aufgeführt, die jeweils eine Spalte der oben aufgeführten Datentypen enthält. Für den Zugriff auf die BLOB Spalte Photo wird, wie in der Abbildung 2 gezeigt, ein Locator erstellt. LOB Partition, LOB Index Einem internen LOB Objekt wird jeweils ein LOB Segment und ein LOB Index Segment zugeordnet. Diese beinhalten die physikalischen Strukturen des LOB Objekts. Wenn eine Tabelle, die ein LOB Objekt beinhaltet, partitioniert ist, so ist auch deren LOB Segment partitioniert. Dieses Segment wird dann als „LOB Partition“ bezeichnet. LOB Partitions sind somit eigenständige Objekttypen im Sinne der View dba_objects. Gleiches gilt für Subpartitionen. Es ist in diesem Zusammenhang interessant anzumerken, dass kein Segmenttyp LOB Index Partition existiert. Oracle markiert Datenbanken den partitionierten LOB Index als eine Index Partition. Sowohl LOB Partitionen, als auch LOB Subpartitionen sind eigene Objekttypen sowie auch Segmenttypen. Eine LOB Partition wird durch den Namen des LOBs (beispielsweise „SYS_LOB0000008121C00008$$“), den Partitionsnamen der Table (z. B. P0) und den LOB_Partition_Namen (z. B. „SYS_LOB_ P1“) gekennzeichnet. Der LOB_INDEX_Partition_Name lautet dann z. B. SYS_IL_P2. Create Table Wasserfall ( Name Varchar2 (80), Photo BLOB, Beschreibung NCLOB, Lage CLOB, Webseite BFILE ); Abb. 1: Beispiel für die Definition einer Tabelle mit unterschiedlichen LOB Datentypen. Die folgenden Data Dictionary Views enthalten Informationen zu den LOB Objekten • • • • • DBA_LOBS Declare v_photo blob, begin select photo into v_photo from DBA_LOB_TEMPLATES DBA_LOB_PARTITIONS DBA_LOB_SUBPARTITIONS DBA_SEGMENTS Details zur Verwendung von LOBs können Sie auch dem ORDIX News Artikel „LOB - Oracle Large Object“ [1] entnehmen. Abb. 2: Beispiel für die Definition eines BLOB Locators. Materialized Views CREATE MATERIALIZED VIEW ONEWS TABLESPACE DB1 NOCACHE NOLOGGING NOCOMPRESS NOPARALLEL BUILD IMMEDIATE USING INDEX TABLESPACE USERS REFRESH FAST ON DEMAND WITH PRIMARY KEY AS SELECT * FROM ALL_OBJECTS; Eine Materialized View (MV) ist ein Datenbankobjekt, welches die Ergebnismenge einer View zu einem bestimmten Zeitpunkt in einer eigenständigen Tabelle speichert. Materialized Views werden im Unterschied zu klassischen Views gewöhnlich nicht explizit in einer SQL-Query abgefragt. Durch das so genannte Query Rewrite bestimmt der Optimizer, ob der Zugriff auf eine Materialized View effizienter als auf deren Ursprungsdaten ist. Die SQL-Query einer Materialized View (siehe Abbildung 3) bezieht sich auf Tabelle(n), View(s) oder weitere Materialized View(s). Zusammengenommen werden diese Objekte als Basistabellen (Begriff der Datenreplikation) oder auch als Detailtabellen (Begriff aus dem Datawarehouse-Bereich) bezeichnet. Änderungen in den Basistabellen, auf die sich die Materialized Views beziehen, werden auf diese übertragen. Die Aktualisierung der Daten kann explizit auf Anweisung (on-demand) oder automatisch durchgeführt werden. Die Datenmenge kann vollständig (COMPLETE Refresh) oder nur auf die jeweiligen Datenänderungen bezogen sein (FAST Refresh). Eine MV kann wie eine Tabelle (siehe Abbildung 4) partitioniert werden. Mit folgenden Paketen stehen Prozeduren zur Administration von MV zur Verfügung: Abb. 3: Beispiel für die Definition einer Materialized View. • • • • DBMS_SNAPSHOT DBMS_MVIEW DBMS_SNAPSHOT_UTIL DBMS_OFFLINE_SNAPSHOT Ein Materialized View Objekt ist mit einer internen Tabelle verknüpft, gegebenenfalls wird eine zusätzliche View erstellt. Oracle nutzt diese Objekte, um die Daten der Materialized Views zu verwalten. Zur Erstellung einer MV werden also die Berechtigungen zur Erstellung einer View vorausgesetzt. ORDIX News 3/2008 23 Datenbanken Anwendungsgebiete von MVs In Datawarehouse-Anwendungen werden Materialized Views als Ablage für berechnete (ggf. aggregierte) Daten genutzt, z. B. Umsatz pro Tag. Ein weiteres Einsatzgebiet ist die Daten-Replikation zwischen verteilten Datenbanken. Materialized Views können je nach Anwendung redundante Daten enthalten. Eine MV wird als Simple bezeichnet, wenn ein Datensatz der MV auf einen Datensatz der Basistabelle(n) zurückgeführt werden kann. Eine MV wird als Complex MV bezeichnet, wenn ein Datensatz nicht auf einen Datensatz der Basistabelle(n) zurückgeführt werden kann (z. B. durch Aggregationen). Es handelt sich hierbei jedoch nicht um eigene Objekttypen, sondern um eine formale Unterscheidung, die CREATE MATERIALIZED VIEW onews_partition LOGGING PARTITION BY RANGE (OWNER,OBJECT_NAME) SUBPARTITION BY HASH (OBJECT_NAME) ( PARTITION OWNER VALUES LESS THAN (MAXVALUE, MAXVALUE) LOGGING NOCOMPRESS ( SUBPARTITION OWNER_SP1 ) ) NOCACHE NOCOMPRESS NOPARALLEL BUILD IMMEDIATE NEVER REFRESH AS SELECT * FROM ALL_OBJECTS; aber Auswirkungen auf die möglichen Aktualisierungsverfahren hat. Materialized View Logs dienen zur Speicherung aller Änderungen auf einer Tabelle. MV Logs dienen zur schnellen Bewirtschaftung von Materialized Views. MV Logs sind vom Objekttyp TABLE. Zu einer MV Log Tabelle wird mindestens ein Index erstellt. In Abbildung 5 ist ein Beispiel für die Erstellung einer MV Log aufgeführt, und Abbildung 6 zeigt einen Beispieldatensatz aus einer MV Logs Tabelle. Folgende Views im Data Dictionary enthalten Informationen zu Materialized Views oder Materialized View Logs • • • • • • • • • dba_registered_mviews dba_base_table_mviews dba_mviews dba_mview_aggregates dba_mview_comments dba_mview_detail_relations dba_mview_keys dba_mview_logs dba_mview_refresh_times Weitere Informationen zu Materialized Views finden Sie in dem ORDIX News Artikel „DBMS_MVIEW – DBMS_SNAPSHOT“ [2]. Operator Objekt Abb. 4: Beispiel für die Definition einer partitionierten Materialized View. CREATE MATERIALIZED VIEW LOG ON EMP NOCACHE LOGGING NOPARALLEL WITH PRIMARY KEY EXCLUDING NEW VALUES; Abb. 5: Beispiel für die Definition einer Create Materialized View Log. EMPNO 7893 SNAPTIME$$ 01.01.2008 DMLTYPE$$ U OLD_NEW$$ U CHANGE_VECTOR$$ 0400 Abb. 6: Beispieldatensatz eines Materialized Log Objects. 24 ORDIX News 3/2008 Ein Operator ist ein Objekttyp, mit dessen Hilfe benutzerdefinierte relationale oder logische, arithmetische Operatoren, wie z. B. eigene Berechnungen oder eigene Vergleiche, erstellt werden [3]. Ein Operator Objekt verweist auf eine Funktion, ein Package oder eine Prozedur, die beim Aufruf des Operators an dessen Stelle ausgeführt wird. Ein benutzerdefinierter Operator ist domänenbezogen, er kann also nur mit dafür vorgesehenen Datentypen genutzt werden. Die Funktionsweise eines benutzerdefinierten Operator Objektes soll anhand des folgenden Beispiels näher erläutert werden: create operator <Operatorname> binding (<Datentypliste>) return <Datentyp> using <Funktionsname>; Datenbanken Operatoren werden in zwei Schritten implementiert. Zunächst ist eine PL/SQL-Routine zu schreiben, die die gewünschte Funktion ausführt. Eine solche ist z. B. eine Funktion fn_contains, die überprüft, ob ein String in einem anderen String enthalten ist. Anschließend ist ein Datenbankobjekt vom Typ Operator anzulegen, das dem Datenbank-Server die definierte Funktion als Operator auf einen neuen Datentyp erklärt. CREATE OR REPLACE FUNCTION fn_contains( stringin VARCHAR2, valuein VARCHAR2) RETURN NUMBER IS BEGIN IF INSTR(stringin, valuein, 1, 1) = 0 THEN RETURN 0; END IF; RETURN 1; END fn_contains; In Abbildung 7 ist die Funktion fn_contains aufgeführt, die überprüft, ob ein String in einem anderen String enthalten ist. In der Abbildung 8 wird ein benutzerdefinierter Operator contains erstellt, der mit der Funktion fn_contains verknüpft ist. In der Abbildung 9 ist aufgeführt, wie der neue Operator in einer WHERE-Klausel eingesetzt wird. Abb. 7: Beispiel für die Definition einer Operator-Funktion. Der Funktionsname ist dabei der Name der zuvor definierten PL/SQL-Routine, deren Signatur natürlich mit der hier angegebenen übereinstimmen muss. Diese Deklaration ist erforderlich, damit benutzerdefinierte Indexe und Anfrageoptimierungen vom DatenbankServer verwendet werden können. Abb. 8: Beispiel für die Definition eines Operators mit einer einfachen Bindung. Operatoren kommen im Umfeld des ODCI (Oracle Data Cartridge Interface) zum Einsatz. Hiermit können komplexe Datentypen wie z. B. geographische Daten (Oracle Spatial) indiziert werden. Für alltägliche Datentypen werden normalerweise keine Operatoren benötigt. Die Data Dictionary Views dba_operators und dba_operator_comments enthalten Informationen zu benutzerdefinierten Operatoren. In der View dba_operators ist aufgelistet, über welche Anzahl von Bindungen ein Operator verfügt. Zur Administration von Operatoren werden folgende Berechtigungen benötigt: CREATE OR REPLACE OPERATOR contains BINDING(VARCHAR2, VARCHAR2) RETURN NUMBER USING fn_contains; SELECT * FROM optab WHERE contains(name, 'a') = 1; Abb. 9: Beispiel für die Nutzung eines Operators in einer WHERE-Klausel. Glossar ODCI Partition / Unter Partitionierung versteht man die physikalische UnterteiPartitionierung lung einer Tabelle in mehrere, in der Regel auf unterschiedlichen Devices ablegte Einheiten (Partitionen). Ziele der Partitionierung sind u. a. die Optimierung der Performance sowie die Vereinfachung der Administration. Replikation • • • • Oracle Data Cartridge Interface. Dieses Interface ermöglicht es dem Entwickler, eigens implementierte, objektspezifische Indexe so in die Datenbank zu integrieren, dass für den Nutzer die gewohnte Funktionalität erhalten bleibt. create any operator Replikation dient dazu, Daten an mehreren Orten verfügbar zu machen, mit dem Ziel der Datensicherung und zur Verkürzung der Antwortzeiten. create operator drop any operator execute any operator Die Reihe Objekttypen von A - Z werden wir in einer der nächsten ORDIX News fortsetzen. Links ► [1] ORDIX News Artikel „LOB - Oracle Large Object“: http://www.ordix.de/ORDIXNews/2_2006/Datenbanken/lob.html ► [2] ORDIX News Artikel „DBMS_MVIEW – DBMS_SNAPSHOT“: http://www.ordix.de/ORDIXNews/2_2002/db_2.html ► [3] Operatoren: Oracle Dokumentation: Oracle® Database Data Cartridge Developer‘s Guide: http://otn.oracle.com Dirk Hansmeier ([email protected]). ORDIX News 3/2008 25 - heraustrennbare Übersicht - Datenbanken Datenbank-Hochverfügbarkeitslösungen für Entscheider Datenbank-Modellierung Oracle SQL Oracle SQL für Umsteiger Oracle SQL für Experten Oracle Datenbankprogrammierung mit PL/SQL Grundlagen Oracle Datenbankprogrammierung mit PL/SQL Aufbau Oracle Datenbankadministration Grundlagen Oracle Datenbankadministration Aufbau Oracle Backup und Recovery Oracle Tuning und Monitoring Oracle Troubleshooting Workshop Oracle Real Application Cluster (RAC) Oracle 11g Neuheiten Oracle Security Oracle Data Guard Oracle RMAN Oracle Grid Control Oracle Streams Advanced Queuing Oracle Replikation IBM Informix SQL IBM Informix Dynamic Server Administration IBM Informix Dynamic Server Tuning und Monitoring IBM Informix Dynamic Server Backup und Recovery IBM Informix Dynamic Server 11 Neuheiten IBM Informix Dynamic Server Hochverfügbarkeits-Technologien unter Unix IBM DB2 für Linux/Unix/Windows SQL Grundlagen IBM DB2 für Linux/Unix/Windows Administration IBM DB2 für Linux/Unix/Windows Monitoring, Tuning und Hochverfügbarkeit MySQL Administration Microsoft SQL Server Administration Microsoft SQL Server Hochverfügbarkeits-Workshop Programmierung PHP Programmierung Grundlagen PHP Programmierung Aufbau Perl Programmierung Grundlagen Perl Programmierung Aufbau Shell, Awk und Sed Awk Intensiv-Workshop Einführung in XML XML Programmierung unter Java mit DOM und SAX Oracle und XML Java-JEE Einführung in die objektorientierte Programmierung Java Programmierung Grundlagen Java Programmierung Aufbau Java GUI Entwicklung mit Swing JEE für Entscheider Einführung in JEE JSP und Servlet Programmierung EJB Programmierung Web-Anwendungen mit JavaServer Faces (JSF) Entwickeln mit dem Spring-Framework Java Web Services Hibernate und die Java Persistence API Java Performance Tuning Web- und Applikations-Server Apache Web-Server Installation und Administration Tomcat Konfiguration und Administration WebSphere Application Server Installation und Administration Administration und Konfiguration für JBoss Betriebssysteme Unix/Linux Grundlagen für Einsteiger Linux Systemadministration Networking für Unix-Systemadministratoren Server-Virtualisierung mit XEN Linux Hochverfügbarkeits-Cluster Unix/Linux Security OpenLDAP - Praxiseinsatz im Netzwerk Solaris Systemadministration Grundlagen Solaris Systemadministration Aufbau Solaris kompakt für erfahrene Unix-Administratoren Solaris 10 für erfahrene Systemadministratoren Solaris Containers Zettabyte Filesystem (ZFS) Workshop AIX Systemadministration Grundlagen IPv6 für Entscheider IPv6 für Systemadministratoren Systemmanagement Systemüberwachung mit Nagios Grundlagen Systemüberwachung mit Nagios Aufbau Projektmanagement IT-Projektmanagement Grundlagen des IT-Controlling Projekte steuern und überwachen Wiesbaden Lippstadt 550,00 890,00 1890,00 890,00 1290,00 1890,00 1890,00 1990,00 1990,00 1990,00 1990,00 1990,00 1990,00 1990,00 1290,00 1590,00 1590,00 1290,00 1290,00 1290,00 1790,00 1990,00 1990,00 1290,00 590,00 1590,00 1890,00 1990,00 1290,00 1190,00 1790,00 790,00 1690,00 1190,00 1690,00 1690,00 1690,00 1190,00 1190,00 890,00 1190,00 1190,00 1690,00 1690,00 1690,00 590,00 1290,00 1590,00 1590,00 1590,00 1190,00 1190,00 1690,00 1290,00 1190,00 1190,00 1390,00 1190,00 1690,00 1690,00 1690,00 1190,00 1290,00 1090,00 1490,00 1990,00 1990,00 1990,00 1990,00 1290,00 890,00 1990,00 590,00 1190,00 1190,00 890,00 1990,00 1290,00 1190,00 *) Preise pro Seminar pro Teilnehmer in Euro. Alle Preise gelten zzgl. ges. MwSt. **) Inhousepreise auf Anfrage. Für Informationen und Fragen zu individuell zugeschnittenen Seminaren, Ausbildungsreihen oder Inhouse-Schulungen stehen wir jederzeit gerne zur Verfügung. Auf Wunsch senden wir Ihnen auch unser komplettes Seminarprogramm zu. 26 ORDIX News 3/2008 KW 52 KW 51 KW 50 KW 49 Dezember KW 48 KW 47 KW 46 KW 45 November KW 44 KW 43 KW 41 Oktober KW 40 KW 39 KW 38 KW 37 September Preis in EURO*)**) KW 42 Seminartermine http://training.ordix.de Online-Anmeldung und stets aktuelle Seminarinhalte und Termine! KW 17 KW 16 KW 15 KW 14 April KW 13 KW 12 KW 11 KW 10 März KW 9 KW 8 KW 7 KW 6 Februar KW 5 KW 4 KW 3 KW 2 Januar September 2008 - April 2009 Preis in EURO*)**) 550,00 890,00 1890,00 890,00 1290,00 1890,00 1890,00 1990,00 1990,00 1990,00 1990,00 1990,00 1990,00 1990,00 1290,00 1590,00 1590,00 1290,00 1290,00 1290,00 1790,00 1990,00 1990,00 1290,00 590,00 1590,00 1890,00 1990,00 1290,00 1190,00 1790,00 790,00 1690,00 1190,00 1690,00 1690,00 1690,00 1190,00 1190,00 890,00 1190,00 1190,00 1690,00 1690,00 1690,00 590,00 1290,00 1590,00 1590,00 1590,00 1190,00 1190,00 1690,00 1290,00 1190,00 1190,00 1390,00 1190,00 1690,00 1690,00 1690,00 1190,00 1290,00 1090,00 1490,00 1990,00 1990,00 1990,00 1990,00 1290,00 890,00 1990,00 590,00 1190,00 1190,00 890,00 1990,00 1290,00 1190,00 Datenbanken Datenbank-Hochverfügbarkeitslösungen für Entscheider Datenbank-Modellierung Oracle SQL Oracle SQL für Umsteiger Oracle SQL für Experten Oracle Datenbankprogrammierung mit PL/SQL Grundlagen Oracle Datenbankprogrammierung mit PL/SQL Aufbau Oracle Datenbankadministration Grundlagen Oracle Datenbankadministration Aufbau Oracle Backup und Recovery Oracle Tuning und Monitoring Oracle Troubleshooting Workshop Oracle Real Application Cluster (RAC) Oracle 11g Neuheiten Oracle Security Oracle Data Guard Oracle RMAN Oracle Grid Control Oracle Streams Advanced Queuing Oracle Replikation IBM Informix SQL IBM Informix Dynamic Server Administration IBM Informix Dynamic Server Tuning und Monitoring IBM Informix Dynamic Server Backup und Recovery IBM Informix Dynamic Server 11 Neuheiten IBM Informix Dynamic Server Hochverfügbarkeits-Technologien unter Unix IBM DB2 für Linux/Unix/Windows SQL Grundlagen IBM DB2 für Linux/Unix/Windows Administration IBM DB2 für Linux/Unix/Windows Monitoring, Tuning und Hochverfügbarkeit MySQL Administration Microsoft SQL Server Administration Microsoft SQL Server Hochverfügbarkeits-Workshop Programmierung PHP Programmierung Grundlagen PHP Programmierung Aufbau Perl Programmierung Grundlagen Perl Programmierung Aufbau Shell, Awk und Sed Awk Intensiv-Workshop Einführung in XML XML Programmierung unter Java mit DOM und SAX Oracle und XML Java-JEE Einführung in die objektorientierte Programmierung Java Programmierung Grundlagen Java Programmierung Aufbau Java GUI Entwicklung mit Swing JEE für Entscheider Einführung in JEE JSP und Servlet Programmierung EJB Programmierung Web-Anwendungen mit JavaServer Faces (JSF) Entwickeln mit dem Spring-Framework Java Web Services Hibernate und die Java Persistence API Java Performance Tuning Web- und Applikations-Server Apache Web-Server Installation und Administration Tomcat Konfiguration und Administration WebSphere Application Server Installation und Administration Administration und Konfiguration für JBoss Betriebssysteme Unix/Linux Grundlagen für Einsteiger Linux Systemadministration Networking für Unix-Systemadministratoren Server-Virtualisierung mit XEN Linux Hochverfügbarkeits-Cluster Unix/Linux Security OpenLDAP - Praxiseinsatz im Netzwerk Solaris Systemadministration Grundlagen Solaris Systemadministration Aufbau Solaris kompakt für erfahrene Unix-Administratoren Solaris 10 für erfahrene Systemadministratoren Solaris Containers Zettabyte Filesystem (ZFS) Workshop AIX Systemadministration Grundlagen IPv6 für Entscheider IPv6 für Systemadministratoren Systemmanagement Systemüberwachung mit Nagios Grundlagen Systemüberwachung mit Nagios Aufbau Projektmanagement IT-Projektmanagement Grundlagen des IT-Controlling Projekte steuern und überwachen Informationen und Anmeldung: ORDIX AG Westernmauer 12 - 16 33098 Paderborn Tel.: 05251 1063-0 ORDIX AG Kreuzberger Ring 13 65205 Wiesbaden Tel.: 0611 77840-00 zentrales Fax: bzw. E-Mail: Online-Anmeldung: 0180 1 ORDIX 0 0180 1 67349 0 [email protected] http://training.ordix.de ORDIX News 3/2008 27 Java/JEE Performance-Tests mit Hibernate (Teil I) First-/Second Level und Query Cache - schneller als die Polizei erlaubt ... Dieser Artikel richtet sich an Softwareentwickler- und architekten, die Hibernate performant einsetzen möchten. Das Framework Hibernate ist inzwischen sehr weit verbreitet. Ein Grund dafür ist sicherlich die gute Performance von Hibernate. Aus diesem Anlass starten wir eine Artikelreihe über Performance-Tests mit Hibernate. In dieser Ausgabe beleuchten wir die Auswirkungen des First- und Second Level Cache und des Query Cache. Vorwort In der ORDIX News 3/2006 haben wir bereits über die Grundlagen des Caching mit Hibernate [1] berichtet. Es ist sinnvoll, sich diese Grundlagen zu verinnerlichen, bevor Sie sich mit diesem Artikel auseinandersetzen. Vorbereitung Für unsere Performance-Tests wurde ein Klassenmodell entworfen, das eine Vorlesung mit Studenten und Dozenten in Kombination mit einer Bibliothek modelliert (siehe Abbildung 1). Das objektrelationale Mapping wurde mit Annotations realisiert. In diesem Artikel beschränken wir uns jedoch auf die Klasse Student. Weiterhin wurden verschiedene DatenbankSchemata mit einer unterschiedlichen Anzahl an Datensätzen angelegt, um bei den Tests flexibel zu sein. 28 ORDIX News 3/2008 Zur Messung der Ergebnisse wurde mit Hilfe von Java eine Stoppuhr entwickelt, die neben dem Starten und Stoppen der Zeit in Millisekunden auch den Durchschnittswert ermittelt. Messungen starten und enden mit einer Transaktion. Dazwischen finden die Testabläufe statt. Der Aufbau der Verbindung zur Datenbank fließt dabei nicht in die Testergebnisse mit ein. Die Performance-Tests wurden auf einem Intel® Core™ 2 CPU 4300 @ 1.80 GHz mit 1 GB RAM durchgeführt. Als Betriebssystem wurde Microsoft Windows XP Professional (Version 2002) mit Service Pack 2 verwendet. Eclipse 3.2 mit dem JDK 1.6 Update 4 diente als Entwicklungsumgebung. Mit drei verschiedenen Testszenarien (siehe Abbildung 2) untersuchen wir im Folgenden anhand der eben vorgestellten Umgebung die Auswirkungen des First- und Second Level Cache und des Query Cache. Java/JEE First Level Cache - kurzlebig aber effektiv Der First Level Cache ist standardmäßig aktiviert und kann nicht ausgeschaltet werden. Er ist mehrfach vorhanden und wird für die Dauer der Session von der aktuellen Hibernate Session selbst implementiert. Im ersten Szenario (siehe Abbildung 2) geht es um die Analyse der Geschwindigkeit des First Level Cache und die Vorteile, die sich aus der Nutzung ergeben. Die Statistik zeigt, dass die erste Abfrage (siehe Abbildung 3) mit 1453 ms fast doppelt so viel Zeit benötigt wie die zweite Abfrage (734 ms). Die weiteren Messergebnisse schwanken zunächst noch geringfügig und pendeln sich dann im Bereich zwischen 600 ms und 670 ms ein. First Level Cache - Der Standard steigert Performance Die Messergebnisse lassen sich folgendermaßen erklären: Zunächst öffnet die SessionFactory eine Session mit der Datenbank. Das hat die Aktivierung des First Level Cache zur Folge. Danach prüft die erste Abfrage, ob die Objekte im Cache vorhanden sind. Das ist nicht der Fall, weil der Cache leer ist. Anschließend findet ein Zugriff auf die Datenbank statt. Dabei übermittelt Hibernate das generierte SelectStatement an die Datenbank, speichert die zurückgelieferten Daten in Objekten und lädt diese in den dazugehörigen Cache-Bereich. Die zweite Abfrage prüft erneut, ob die Objekte im Cache vorhanden sind. Zu diesem Zeitpunkt kann Hibernate die Daten direkt aus dem First Level Cache beziehen, weil die erste Abfrage die benötigten Daten bereits im Cache abgelegt hat. Die weiteren Abfragen verfolgen die gleiche Strategie. Der Einsatz des First Level Cache führt demzufolge zu Performance-Steigerungen, da durch den Zugriff auf das schnellere Speichermedium deutlich schnellere Antwortzeiten erzielt werden können. Zudem wird die Datenbanklast reduziert, da Hibernate nicht mehr bei jedem Laden eines Objekts die Informationen aus der Datenbank beziehen muss. Student 1 Lehrmaterial * Materialnr: long Ausleihdatum: String Materialnr: long Name: String Adresse: String * * Buch Zeitschrift ISBN: long Titel: String Autor: String Magazin: String Ausgabe: String Vorlesung ID: long Name: String Dauer: int Inhalt: String 1 * Dozent Profnr: long Name: String GebDatum: String 1 1 Lehrstuhl Bezeichnung: String Fachbereich: String Abb. 1: Klassendiagramm. Szenario First Level Cache Szenario Second Level Cache Szenario Query Cache Abfrage Selektiere alle Studenten mit dem Namen „Larry“ Iteration der Abfragen 100 Anzahl der gefundenen Studenten in der DB 10.000 Aktive Caches First Level Cache 100 (2 Threads, die 100 (einmal mit jeweils nacheinund ohne Query ander 50 Abfragen Cache) ausführen) First Level Cache, Second Level Cache Cache Mode Nicht vorhanden Read Only Cache Provider Nicht vorhanden EHCache First Level Cache, Second Level Cache Abb. 2: Übersicht über die drei Testszenarien. Second Level Cache - ein langes Leben und nur einmal pro Applikation vorhanden. Des Weiteren ist er langlebiger, weil er für die Lebensdauer einer SessionFactory existiert. Das zweite Szenario (siehe Abbildung 2) untersucht die Performance-Steigerung durch den Einsatz des Second Level Cache, die erst bei mehreren Threads zum Tragen kommt. Im Gegensatz zum First Level Cache ist der Second Level Cache optional zuschaltbar Abbildung 4 zeigt die Messergebnisse der beiden durchgeführten Threads. Es ist deutlich ORDIX News 3/2008 29 Java/JEE zu erkennen, dass beim ersten Thread die erste Abfrage mehr Zeit benötigt, als die darauf folgenden. Die Messungen pendeln sich anschließend zwischen 600 ms und 800 ms ein. Der zweite Thread bewegt sich ebenfalls in diesem Bereich. Second Level Cache für gleiche Abfragen innerhalb einer SessionFactory Der erste Thread baut mit Hilfe der SessionFactory eine Session mit der Datenbank auf, 1600 First Level Cache 1400 1200 Zeit in ms 1000 Nachdem der erste Thread beendet ist, startet der zweite Thread. Dieser baut ebenfalls mit Hilfe der SessionFactory eine neue Session auf und aktiviert dadurch die beiden Caches. Der First Level Cache ist bei der ersten Abfrage leer, da dieser nur für die Lebensdauer einer Session existiert. Der Second Level Cache existiert hingegen für die Lebensdauer einer SessionFactory und wurde bereits zuvor durch den ersten Thread mit Objekten befüllt. Startet der zweite Thread die erste Abfrage, wird zunächst erfolglos der First Level Cache durchsucht. Anschließend prüft Hibernate den Second Level Cache. Dieser beinhaltet die gesuchten Objekte, weil es sich bei den beiden Threads um die gleiche Abfrage handelt. Aus diesem Grund benötigt die erste Abfrage des zweiten Threads deutlich weniger Zeit als die erste Abfrage des ersten Threads. 800 600 400 200 0 die eine Aktivierung des First- und des Second Level Cache zur Folge hat. Es findet die erste Abfrage statt. Die Daten werden in Objekte gespeichert und anschließend in den First- und den Second Level Cache geladen. Die darauf folgenden Abfragen des ersten Threads laden die Objekte aus dem First Level Cache. Dadurch benötigt die erste Abfrage mehr Zeit als die zweite. 0 20 40 60 80 100 120 Durchläufe Abb. 3: Messergebnisse des First Level Cache. 1800 1. Thread (First Level Cache) 2. Thread (Second Level Cache) 1600 1400 Der Second Level Cache wird insbesondere auf Ebene einer Virtual Machine oder eines Clusters eingesetzt. Bei der ersten Möglichkeit werden alle Objekte, die in einer Virtual Machine gespeichert oder geladen werden gecacht. Wenn z. B. mehrere Benutzer den gleichen Buchtitel abfragen, muss der Buchtitel nicht für jeden Benutzer neu geladen werden, sondern kann direkt aus dem Second Level Cache bezogen werden. Bei einem Cluster werden ebenfalls alle Objekte geladen, auch wenn die Applikation über mehrere Rechner verteilt ist. Zeit in ms 1200 Es gibt aber auch Situationen, in denen der Einsatz des Second Level Cache nicht empfehlenswert ist, z. B. bei einer großen Einfügeoperation. In diesem Fall ist es ratsam, den Second Level Cache zu deaktivieren, weil sonst unnötiger Overhead durch Speichern der Objekte in den Second Level Cache entsteht. 1000 800 600 400 200 0 0 20 40 60 80 Durchläufe Abb. 4: Messergebnisse des First- und Second Level Cache. 30 ORDIX News 3/2008 100 120 Query Cache - bei wiederholten Abfragen Der Query Cache ist ebenfalls optional zuschaltbar und ist bei Abfragen sinnvoll, die sich oft wiederholen. Neben SQL-Anwei- Java/JEE 1800 ohne Query Cache mit Query Cache 1600 1400 1200 1000 Zeit in ms sungen (einschließlich aller eingebundenen Parameter) enthält der Query Cache auch die Identifikatoren der Ergebnismenge. Mit dem Query Cache ist auch immer ein ZeitstempelCache aktiv, der prüft, ob die Ergebnismenge der Abfrage noch aktuell ist. Es stellt sich nun die Frage, wie viel Performance-Gewinn der Query Cache bei gleichen Abfragen bringt. Um diese Frage zu beantworten, testen wir nun das dritte Szenario. 800 600 Abbildung 5 zeigt, dass durch die Aktivierung des Query Cache die Abfragen wesentlich schneller erfolgen. Im Durchschnitt benötigen die Abfragen ohne Query Cache 688 ms. Aktiviert man den Query Cache, ist eine deutliche Leistungssteigerung zu erkennen. Unter Verwendung des Query Cache benötigen die Abfragen durchschnittlich 545 ms. Das entspricht einem Performance-Vorteil von circa 20 Prozent. Abb. 5: Messergebnisse des Query Cache. Query Cache - großer Erfolg bei sinnvollem Einsatz Glossar Dieser Effekt hat folgenden Hintergrund: Cache Ein Cache erhöht die Leistung einer Anwendung, indem wiederholte Zugriffe auf Datenstrukturen durch Zwischenspeicherung im Hauptspeicher beschleunigt werden. Timestamp Ein Zeitstempel, der den Zeitpunkt der letzten Bearbeitung von Datensätzen speichert. Nach der ersten Abfrage werden alle drei Caches gefüllt. Der First- und der Second Level Cache speichern die Objekte, während der Query Cache das SQL-Statement und die Identifikatoren der Ergebnismenge speichert. Weiterhin wird ein Zeitstempel gesetzt. Die zweite Abfrage prüft, ob der Query Cache das SQL-Statement beinhaltet. Unter Verwendung der gleichen Abfrage ist die Suche erfolgreich. Anschließend findet eine Prüfung des Zeitstempels statt. Da keine Änderungen in der Tabelle durchgeführt wurden, ist der Zeitstempel aktuell und die Ergebnismenge wird nicht verworfen. Im nächsten Schritt sendet Hibernate die Identifikatoren der Ergebnismenge an den Second Level Cache und durchsucht diesen. Der Second Level Cache liefert anschließend die Objekte zurück und die Session speichert diese zum Beispiel in einer Liste. Ein Datenbankzugriff wird dadurch vollständig vermieden, was – ähnlich wie beim Firstund Second Level Cache – zu PerformanceSteigerungen und einer Datenbankentlastung führt. Der Query Cache bietet sich nicht an, wenn die Tabelle oft modifiziert wird, weil dann der Zeitstempel häufig nicht mehr aktuell ist und die Ergebnismenge verworfen und neu geladen werden muss. 400 200 0 0 20 40 60 80 100 120 Durchläufe Link ► [1] http://www.ordix.de/ORDIXNews/artikelreihen.html#hibernate ► [2] Seminarempfehlung „Hibernate und die Java Persistence API“: http://training.ordix.de/seminar.php?nr=549 Fazit Das Cache-System bietet effiziente Möglichkeiten, um Performance-Optimierungen zu erzielen. Bei falschem Einsatz kann das Caching aber auch das Gegenteil bewirken. Als Beispiel sei hier das Modifizieren von Tabellen unter Verwendung des Query Cache genannt. Im nächsten Teil der Reihe werden die verschiedenen Caching-Strategien des EHCache näher unter die Lupe genommen und bewertet. ORDIX verfügt in diesem Bereich über Erfahrung aus vielen Projekten. Gerne geben wir diese an Sie weiter [2]. Besuchen Sie unseren Trainingsshop oder sprechen Sie uns an! Alexander Keil ([email protected]). ORDIX News 3/2008 31 Projektmanagement IT-Projektcontrolling (Teil I): Service statt Kontrolle Dieser Artikel richtet sich an ITManager und Projektmanager. Während das IT-Controlling die Gesamtheit der IT eines Unternehmens im Blick hat, bestehend aus IT-Betrieb, Anwendungsentwicklung und IT-Services, konzentriert sich das IT-Projektcontrolling auf konkrete IT-Projekte und deren spezifische Aufgabenstellung. Dabei sind Projektcontroller keine Kontrolleure, sondern bieten dem (Projekt-) Management die notwendige Unterstützung für die Steuerung ihrer Vorhaben. In diesem ersten Teil geben wir einen Überblick über das IT-Projektcontrolling. Im zweiten Teil werden wir dann weiter in die Tiefe gehen und uns mit Kennzahlen und Kennzahlensystemen beschäftigen. Projektcontrolling ist nach DIN 69901 wie folgt definiert: „Sicherung des Erreichens der Projektziele durch: Soll-Ist-Vergleich, Feststellung der Abweichungen, Bewerten der Konsequenzen und Vorschlagen von Korrekturmaßnahmen, Mitwirkung bei der Maßnahmenplanung und Kontrolle der Durchführung“. Daher ist Projektcontrolling keine „Kontrollinstanz“, für die es häufig gehalten wird, sondern eine Servicefunktion des Projektmanagements, mit der Aufgabe, die Projektleitung zu unterstützen. 32 ORDIX News 3/2008 Das Spektrum des IT-Projektcontrollings Beim Projektcontrolling wird unterschieden zwischen strategischem Projektcontrolling, Multiprojektcontrolling und Einzelprojektcontrolling. Mit Blick auf die Unternehmensebene spricht man von Multiprojektcontrolling bzw. strategischem Projektcontrolling. Lenkt man den Blick auf die Durchführung einzelner ITProjekte auf Basis eines genehmigten Projektantrags, spricht man von Einzelprojektcontrolling. Projektmanagement Strategisches Projektcontrolling Beim strategischen Projektcontrolling geht es insbesondere darum, die Informationen und Instrumente bereitzustellen, um Projekte bzw. Vorhaben effektiv zu bewerten und im Hinblick auf die Strategie des Unternehmens auszuwählen. Planung Berichtswesen Ressourcen-Mgt. Multiprojektcontrolling Beim Multiprojektcontrolling werden mehrere tatsächlich ausgewählte Projekte mit unterschiedlichen Stati und Fertigstellungsterminen zusammenfassend betrachtet. Ziel ist es, die Projekte gemäß der strategischen Zielsetzung des Unternehmens optimal zu koordinieren und – meist auf ein Geschäftsjahr oder Kalenderjahr bezogen – bestmöglich zeitlich und kapazitätsgerecht zu steuern. Einzelprojektcontrolling Das Einzelprojektcontrolling ist auf die Laufzeit eines Projektes bezogen und damit kalenderunabhängig. Ziel des Einzelprojektcontrollings ist es, das Projektmanagement so zu unterstützen, dass ein Projekt bezüglich Qualität, Funktionalität, Kosten und Zeit erfolgreich abgewickelt wird. Zusammenfassend kann man sagen, dass, wie in Abbildung 1 dargestellt, beim Einzelprojektcontrolling die Unterstützung der Planung, des Berichtswesens und des Ressourcen- und Terminmanagements im Vordergrund stehen. Aufgaben des IT-Projektcontrollings Das Controller-Leitbild der International Group of Controlling (IGC) [1] nennt als wichtigste Aufgabe eines Controllers die Mitgestaltung und Begleitung der Managementprozesse Zielfindung, Planung und Steuerung. Dabei trägt er Mitverantwortung für die Zielerreichung. Das bedeutet, seine Aufgaben gehen weit über die Planung und Kontrolle von Kosten hinaus. Überträgt man das allgemeine Leitbild eines Controllers also auf den IT-Projektcontroller, sind seine Aufgaben vor allem: • Informationen über das jeweilige Projekt beschaffen und bereitstellen • Abweichungen vom Plan erkennen • Maßnahmen zur Korrektur vorschlagen Termin-Mgt. Risiko-Mgt. QM Grad der Unterstützung Projektbewertung Projektauswahl Einzelprojektcontrolling (operativ) Multiprojektcontrolling Strategisches Projektcontrolling Abb. 1: Das Spektrum des IT-Projektcontrollings. dem Projektleiter. Dabei ist zu beachten, dass er selbst kein Entscheider ist, sondern dafür sorgt, dass der verantwortliche Projektleiter transparente Informationen bekommt, auf deren Basis dieser dann Entscheidungen fällt. Steuern und Regeln im Projekt Der Projektcontroller muss steuern und regeln. Die deutsche Sprache unterscheidet übrigens sehr genau zwischen „steuern“ und „regeln“, im Englischen spricht man dagegen in beiden Fällen einfach von „to control“ – daher also der Name. In der Praxis heißt das, dass es beim IT-Projektcontrolling einerseits um die Feststellung der Abweichung vom Projektplan geht und andererseits um den Umgang mit den Konsequenzen und Maßnahmen, die sich daraus ergeben. Der Regelkreis Dadurch entstehen Schnittstellen zu allen Projektmanagementdisziplinen, vor allem zur Projektinitialisierung, Planung und zum Berichtswesen. Der IT-Projektcontroller befindet sich also in ständigem Dialog mit allen Projektmanagement-Instanzen, insbesondere mit Beim Projektcontrolling geht man also wie in der Technik nach so genannten Regelkreisen vor. Das Modell des Regelkreises (siehe Abbildung 2) entspricht genau dem bereits beschriebenen: Bei der Projektplanung werden Sollwerte festgelegt. Während der Projektlaufzeit werden systematisch die Istwerte er- ORDIX News 3/2008 33 Projektmanagement fasst. Wenn beim Abgleich der Daten Differenzen festgestellt werden, wird nachjustiert. Lieber ungefähr richtig, als genau falsch Dieses Vorgehen ist vergleichbar mit einem technischen Regler, z. B. dem ABS-System im PKW. Ein Lautstärkeregler am Autoradio dagegen ist eigentlich gar kein Regler, sondern steuert nur: Stellt man lauter ist es lauter. Hier wird nichts geregelt. Sollwerte werden in der Planungsphase festgelegt. Istwerte werden während der Projektlaufzeit erhoben. In der Praxis gibt es bei der Erhebung der Kennzahlen häufig zwei Probleme: Wesentlich ist, dass bereits in einer sehr frühen Phase, schon während der Projektinitialisierung, darauf geachtet werden muss, welche Stellgrößen im Projekt genutzt werden sollen. Diese Kennzahlen sind zunächst qualitativ zu erfassen und frühzeitig mit Sollwerten zu belegen. Dann werden die Messstellen definiert. Dabei geht es nicht nur um die „klassischen“ Kennzahlen wie Termine und Budget, sondern auch um Kennzahlen wie z. B. Skill-Level, Krankenstand, Risiko-Index, Anzahl ChangeRequest oder Anzahl Tests pro Modul. Maßnahmen (Stellgrößen) Projektplanung Äußere Einflussgrößen Projektcontrolling Informationsversorgung Berichtswesen Plandaten (Steuergrößen) Istdaten (Steuergrößen) Projektdurchführung Abb. 2: Einfacher Regelkreis des IT-Projektcontrollings. Links ► [1] IGC: http://www.igc-controlling.org/DE/index.php 1. Nicht alle notwendigen Kennzahlen werden berücksichtigt. Sie werden zwar zu einem späteren Zeitpunkt abgefragt, aber niemand hat sie geplant oder sie wurden nicht systematisch erfasst. 2. Nicht alle Kennzahlen sind objektiv messbar, sondern beruhen auf subjektiven Einschätzungen. Der wohl berühmteste Vertreter der zweiten Kategorie ist der fachliche Fertigstellungsgrad (FFG), der tatsächliche Arbeitsfortschritt im Projekt. Eine präzise Messung funktioniert nur in den seltensten Fällen. Das liegt einerseits an der Granularität der Arbeitspakete und andererseits an der Überprüfbarkeit des tatsächlichen Fortschritts. Insbesondere in Softwareentwicklungsprojekten basiert der Fertigstellungsgrad oft nur auf der subjektiven Einschätzung des jeweiligen Entwicklers. Verlässlicher sind dagegen die einfach messbaren Kennzahlen, insbesondere Budget und Termine. Fazit IT-Projektcontrolling spielt eine bedeutende Rolle als Projektmanagement-Instrument und dient als Navigationshilfe während der Projektdurchführung. Das IT-Projektcontrolling dient als Steuerungsinstrument und als Frühwarnsystem. Ohne Projektcontrolling wäre es unwahrscheinlich, ein Projekt „in time and budget“ durchzuführen. Nach dieser Einführung in das Thema ITProjektcontrolling werden wir uns im zweiten Teil intensiver mit Kennzahlen und Kennzahlensystemen befassen. Des Weiteren werden wir den Umgang mit dem FFG erörtern und Controllingmethoden darstellen, die aus Kennzahlen aussagekräftige Informationen machen. ► Seminarempfehlungen: [2] IT-Projektmanagement: http://training.ordix.de/seminar.php?nr=223 [3] IT-Controlling: http://training.ordix.de/seminar.php?nr=224 Rainer Restat ([email protected]). 34 ORDIX News 3/2008 Aktuell Rückblick Chess Classic 2008 2 x ORDIX Open: für die Großen und für die Kleinen Die Landeshauptstadt Mainz wurde vom 28.07. bis zum 02.08.2008 mit den Chess Classic 2008 wieder zum Schauplatz der internationalen Schachprominenz. Seit numehr 15 Jahren präsentieren sich hier die Besten der SchachWeltrangliste. Das ORDIX Open war stets im Programm ... seit 2007 zusätzlich auch im „Mini“-Format. ORDIX Open Gesiegt hat dieses Jahr im ORDIX Open der Russe Ian Nepomniachtchi als Nachfolger von David Navaras, ORDIX Open Sieger 2007. Mit 9,5/11 gewann Nepomniachtchi mit einem halben Punkt Vorsprung vor dem Ukrainer Pavel Eljanov. Das ORDIX Open ist eines der größten Schnellschachturniere der Welt. 692 Teilnehmer lieferten sich spannende SchachMatches beim 15. ORDIX Open. Dem Sieger winkte neben der attraktiven Gewinnsumme auch die Qualifikation der GRENKELEASING Rapid World Championship im kommenden Jahr. Die Bedeutung des ORDIX Open belegt auch die Zusammensetzung der Teilnehmer. Gemeldet waren 163 Titelträger – darunter 53 Großmeister, 44 internationale Meister und 66 Fide-Meister. Im Mini ORDIX Open siegte Dennis Wagner (links). Sieger des ORDIX Open 2008 ist Ian Nepomniachtchi. Links ► Rückblick ORDIX Open und Mini ORDIX Open 2007: http://www.ordix.de/ORDIXNews/3_2007/Aktuell/14_ordix_open.html Interessant ist das ORDIX Open gerade deshalb, weil man hier auch als Amateur die Möglichkeit hat, einmal gegen eine echte Schachgröße zu spielen. Attraktiv sind zudem die acht Kategorien, in denen Rating-Preise zu gewinnen sind. Mini ORDIX Open Dennis Wagner entschied den Gesamtsieg beim Mini ORDIX Open für sich. Schon in 2007 war er deutscher Meister der U-10. Er trat gegen 103 weitere Nachwuchsspieler des Schnellschachs an. ► Weitere Infos zu den Chess Classic 2008: http://chesstigers.de/ccm8.php Als „Mini“-Format des großen ORDIX Open bietet dieses Turnier die gleichen professionellen Bedingungen: Genauso wie beim ORDIX Open durften auch hier die Besten auf der Bühne im Rampenlicht spielen. Zusätzlich wurden ihre Partien für alle Zuschauer in der Rheingoldhalle auf den großen Leinwänden, auf zahlreichen Monitoren und sogar im Internet live übertragen. Stefanie Heither ([email protected]). ORDIX News 3/2008 35 Datenbanken Oracle Real Application Cluster (RAC) 10g (Teil III): Automatic Storage Management Der Artikel richtet sich an Datenbankadministratoren und Entwickler, die Oracle RAC aufsetzen und betreiben. Mit der Oracle Version 10g wurde eine neue Funktion namens „Automatic Storage Management“ (ASM) eingeführt. Als Mischung eines logischen Volume Managers und eines automatischen Dateimanagements für Oracle-Dateitypen soll es Datenbankadministratoren die physische Konfiguration von Datenbanken erleichtern. ASM-Übersicht Mit ASM kann der DBA die Kontrolle über nahezu alle speicherrelevanten Konfigurationsdetails von Datenbanken übernehmen, die normalerweise in der Hand von System- oder Storage-Administratoren liegen. Dazu zählen z. B. folgende Details, die komplett im ASM konfiguriert werden: • • • Striping, I/O-Performance Tuning • • Überwachung von Dateisystemen Automatische Vergabe von Dateinamen Gruppierung von physischen Platten und Verteilung der Daten auf Platten Datenspiegelung (Mirroring) Dem ASM werden dazu vom Betriebssystem Raw Devices zur Verfügung gestellt, welche ASM dann strukturiert und verwaltet. Realisiert wird ASM als eine spezielle Form einer Datenbankinstanz, die ausschließlich der Konfiguration und dem Management des datenbankrelevanten Speichers dient. Diese Instanz hat, genau wie eine normale Datenbankinstanz, verschiedene Hintergrundprozesse und eine SGA. Der Initialisierungsparameter Instance_type definiert, ob es sich bei der Datenbankinstanz um eine ASM-Instanz handelt. ASM stellt eine vereinfachte Schnittstelle für das Management von Plattenspeichern zur Verfügung. Dabei verbindet es Funktionalitäten eines Cluster-Dateisystems mit denen eines logischen Volume Managers und bietet dabei: 36 ORDIX News 3/2008 • • I/O-Performance wie bei Raw Devices • Sicherheit vor versehentlichem Löschen von Daten • Spiegelung von Daten Verbesserung der Performance durch dynamisches Balancing Striping: Direct- und Asynchronous-I/O steigern die Performance ASM verwendet nicht den Filesystem-Cache des Betriebssystems, sondern greift stattdessen mit Direct-I/O direkt auf die Platten zu. Dabei realisiert ASM einen eigenen, speziell auf die Bedürfnisse des Datenbanksystems ausgelegten Cache-Algorithmus, der zu besseren Hit-Raten führt. Für Datenbanken, deren Dateien in Dateisystemen plaziert sind, empfiehlt Oracle die Nutzung der Direct-I/O-Funktion, die im Betriebssystem konfiguriert wird. Bei HP-UX müssen dazu z. B. spezielle Direct-I/O-Treiber in den Kernel eingebunden werden. Im Gegensatz dazu benötigt ASM diese Direct-I/O-Konfiguration des Betriebssystems jedoch nicht, sondern greift direkt auf die verwendeten Raw Devices zu. I/O-Requests werden bei ASM nach Möglichkeit auf verschiedene Platten verteilt, wodurch eine parallele Verarbeitung möglich wird. Insbesondere schreibintensive Vorgänge, wie das Herunterschreiben von geänderten Datenbankblöcken durch den Database-Writer bei der Durchführung von Checkpoints, profitieren in hohem Maße von dieser parallelen, asynchronen Verarbeitung. Datenbanken Node: ORACLE 1 Node: ORACLE 2 Cache Fusion SGA DBWR LGWR SGA ... DBWR LGWR Oracle RAC 10g RDBMS Layer Oracle ASM, Cluster File-System, RAW Devices Storage Management Layer evtl. 3rd Party Volume Manager Volume Manager Layer ... evtl. 3rd Party Clusterware DB Oracle Clusterware OS/Netzwerk Clusterware Layer OS/Netzwerk Layer Storage Layer Abb. 1: Darstellung des Oracle RAC Hard-/Software Stacks. Vereinfachtes Storage Management Automatische Dateinamensvergabe ASM vereinfacht das Storage Management innerhalb der Datenbank. Es besteht keine Notwendigkeit mehr, die externen Namen für Datenbankdateien zu verwalten, da ASM automatisch jeder neuen Datei - abhängig vom Typ der anzulegenden Datei - einen eindeutigen Namen innerhalb einer Dateisystemstruktur zuweist. Einzig der Name der zu verwendenden Gruppe von Platten ist dabei anzugeben. Standard Plattengruppen Definition Wie bei OMF kann im Parameter DB_ CREATE_FILE_DEST eine Standard-Plattengruppe definiert werden. Dann besteht keine Notwendigkeit mehr, Pfadangaben für Dateien zu hinterlegen. Insbesondere bei der Verwendung von weiteren Datenbankfunktionen, wie Auto Extent und Bigfile Tablespaces, beschränkt sich die Definition neuer Tablespaces dann auf CREATE TABLESPACE TEST;. Automatische I/O-Verteilung in Plattengruppen Weiterhin vereinfacht ASM den Umgang mit den benötigten Plattenbereichen der Datenbank. Mit einfachen Befehlen werden dem Datenbanksystem weitere Platten zur Verfügung gestellt. Dabei werden die Platten zu so genannten Plattengruppen zusammengefasst. Diese dienen als Storage Pools, wobei die in diesen Plattengruppen angelegten Dateien gleichmäßig über alle beteiligten Platten verteilt werden. Dadurch soll eine I/O-Verteilung und damit Performance-Gewinn erreicht werden. Reicht der Platz in einer Plattengruppe nicht mehr, können den Plattengruppen im laufenden Betrieb weitere Platten hinzugefügt werden. Anschließend erfolgt bei einem solchen Vorgang automatisch eine erneute Umverteilung der Daten in der Plattengruppe (Rebalancing). ASM versucht die I/O-Verteilung im System nach Möglichkeit dynamisch zu optimieren. Stellt ASM z. B. fest, dass bestimmte Bereiche der Platten besonders beansprucht werden, werden eben diese Daten nach Möglichkeit neu verteilt. Schutz vor Datenverlust Werden Platten aus einer Diskgruppe durch den Administrator entfernt, werden vor der Freigabe dieser Platten deren Inhalte auf die übrigbleibenden Platten der Diskgruppe verteilt. Ist das nicht möglich, kann die Platte nicht entfernt werden. Somit kann also mit Administratormitteln kein Datenverlust entstehen. Datenspiegelung Neben dem Striping kann ASM auch ein softwareseitiges Spiegeln der Daten übernehmen. Bei der Erstellung einer Plattengruppe kann der Administrator die Redundanz konfigurieren: • • • Normal Redundancy: 2-Wege Spiegelung High Redundancy: 3-Wege Spiegelung External Redundancy: keine Spiegelung durch ASM Soll ASM die Spiegelung tatsächlich verwalten, müssen die Platten einer Plattengruppe innerhalb dieser Spiegelung in so genannte Failure-Gruppen entsprechend dem einge- ORDIX News 3/2008 37 Datenbanken stellten Redundanztyp aufgeteilt werden. Dabei spiegelt ASM nicht den kompletten Bereich der Platten als Ganzes, sondern spiegelt einzelne Extents der angelegten Dateien auf verschiedenen Platten. Wichtigster Aspekt dabei ist, dass damit die Failure-Gruppen in Größe und Anzahl der beteiligten Platten nicht identisch sein müssen, was die Verwaltung der Plattengruppen weiterhin vereinfacht. Mit ASM_DISKGROUPS wird definiert, welche Plattengruppen beim Start der ASM-Instanz aktiviert werden. Mit ASM_POWER_LIMIT wird festgelegt, wie viel Systemleistung ASM für das automatische Rebalancing von Daten verwenden darf. Dieser Parameter ist von 1 bis 10 einstellbar, wobei 1 die geringste Belastung für das System darstellt. Definition von Plattengruppen Installation und Konfiguration von ASM Eine ASM-Instanz wird mit dem Database Configuration Assistant (DBCA) installiert. Voraussetzung für das Arbeiten von ASM sind ein aktiver CSS-Daemon (cluster synchronisation service) sowie ein aktiver Listener. Dieser CSS-Daemon wird bei der Installation der Cluster Ready Services bei RAC-Installationen automatisch mit installiert. Bei Nicht-RAC-Systemen muss dieser Daemon manuell mit dem Befehl localconfig add installiert und konfiguriert werden. Durch verschiedene Initialisierungsparameter kann die ASM-Instanz konfiguriert werden. Hier einige Beispiele: • • • Instance_type = Asm_diskgroups = Asm_power_limit = ASM (DG1, DG2) 1 CREATE DISKGROUP DG1 EXTERNAL REDUNDANCY DISK '/dev/sde1', '/dev/sdf1' ; Abb. 2: Mit CREATE DISKGROUP werden Diskgruppen angelegt. ALTER DISKGROUP DG1 ADD DISK '/dev/sdg1' ; ALTER DISKGROUP DG1 DROP DISK '/dev/sde1' ; Abb. 3: Mit ALTER DISKGROUP werden Diskgruppen verwaltet. Glossar SGA System Global Area. SGA ist der von Oracle allokierte Hauptspeicher auf dem Datenbankserver. DBCA Database Configuration Assistant. Grafischer Assistent zur Erstellung und Konfiguration von Oracle Datenbanken und anderen Oracle Komponenten. OMF Oracle Managed Files. OMF ermöglichen, dass man die Verwaltung von Daten-, Online Redolog-Dateien und Control-Dateien auf Betriebssystemebene der Instanz überlassen kann. OCFS Oracle Cluster Filesystem. OCFS ist ein von Oracle geliefertes Cluster-Dateisystem für gemeinsam genutzte Dateien; vor Version 2 nur für zu Oracle Datenbanken gehörende Dateien zugelassen. Die Verwaltung des ASM erfolgt mittels sqlplus in der ASM-Instanz. Standardmäßig hat die ASM-Instanz eines Standalone-Systems die SID=+ASM, bei RAC-Systemen werden die einzelnen ASM-Instanzen der beteiligten Knoten mit +ASM1 bis +ASMn gekennzeichnet. Mit den Befehlen in den Abbildungen 2 und 3 werden Plattengruppen angelegt und verwaltet. Innerhalb der Datenbank werden ASM-Plattengruppen mit dem Zusatz „+“ angesprochen. Das Anlegen eines Tablespaces in einer bestimmten Plattengruppe erfolgt z. B. mit CREATE TABLESPACE TEST DATAFILE '+DG1'. Die weitere Namensvergabe und Ablage in bestimmten Pfaden erfolgt entsprechend den vorgegebenen Regeln, die denen der Funktion OMF von Oracle entsprechen. Fazit ASM stellt somit ein modernes Mittel zur Abstraktion zwischen physikalischer Ablage von Datenbanken und ihren logischen Komponenten zur Verfügung. Gleichzeitig versucht ASM, diese Ablage bezüglich I/O-Performance zu optimieren. Zudem steht ASM als Teil von Oracle schon in der Standard Edition zur Verfügung, es erfordert also keine zusätzliche Lizenz. ASM erleichtert dem Administrator den Umgang mit den Massenspeichern und die Verwaltung von Dateinamen. Eine vom Administrator definierte und einzuhaltende Namenskonvention ist nicht mehr notwendig. Zusätzlich optimiert ASM automatisch den Zugriff auf die Daten der Datenbank und erzielt damit eine verbesserte Gesamtleistung des I/O-Systems. Besonders für Nutzer der Oracle Standard Edition ist ASM wichtig, denn ASM stellt für sie die einzig mögliche Option für die Installation eines Real Application Clusters dar. Andere Optionen wie z. B. OCFS oder andere ClusterDateisysteme stehen erst mit der Enterprise Edition zur Verfügung. Klaus Garstecki ([email protected]). 38 ORDIX News 3/2008 Open Source System-Logging unter Linux und Unix – syslog-ng (Teil I): Die Revolution der neuen Generation Ein häufig vernachlässigtes Thema ist das Speichern und Auswerten von Log-Meldungen. Dabei bieten sie eine sehr gute Möglichkeit, Unregelmäßigkeiten auf einem System aufzudecken. Aber wer kennt es nicht? Riesige Logfiles mit Unmengen an uninteressanten Informationen, die auch noch von vielen verschiedenen Anwendungen stammen. Syslog-ng Dieser Artikel richtet sich an Systemadministratoren, die einen effizienteren SyslogDaemon suchen oder sich mit dem syslog-ng beschäftigen wollen. bietet im Gegensatz zum altbewährten syslog wesentlich mehr Funktionen, um Log-Meldungen zu filtern, bevor sie weggeschrieben werden. Seine wahre Stärke spielt er aber erst aus, wenn er als zentraler Server für Log-Meldungen im Netzwerk dient. Dieses Thema wird in einer der nächsten ORDIX News erörtert. Dieser Artikel erläutert zunächst die grundlegende Konfiguration mit Schwerpunkt auf das Filtern von Log-Meldungen. Einführung New Generation? Ganz neu ist das Projekt in Wirklichkeit nicht mehr. Die Entwicklung begann bereits 1998, als Balázs Scheidler den nsyslogd (BSD) auf Linux portierte. In den letzten zehn Jahren hat sich der syslog-ng von einem kleinen Projekt zum Standard Syslog-Daemon in vielen Distributionen entwickelt. Zum Beispiel setzt SuSE seit der Version 9.3 standardmäßig auf den syslog-ng, den es in zwei Versionen gibt: Eine Open Source Variante (OSE) und die so genannte Premium Edition (PE). Beide Varianten werden von der Firma BalaBit IT Security entwickelt. syslog, syslog-ng (OSE) und syslog-ng (PE) im Vergleich Bevor wir genauer auf die Open Source Edition eingehen, sollen die Unterschiede der ORDIX News 3/2008 39 Open Source einzelnen Syslog-Daemons aufgezeigt werden. Die Tabelle in Abbildung 1 zeigt die Funktionen, die der syslog-ng zusätzlich zu dem syslogd unterstützt. Auch werden die Unterschiede zwischen den beiden syslog-ng-Varianten deutlich aufgezeigt. Im Laufe des Artikels wird der Aufbau der Konfiguration näher erläutert. Ablauf eines Log-Vorgangs Unter /etc/syslog-ng/syslog-ng.conf liegt standardmäßig die Konfiguration des syslog-ng. Sie lässt sich am besten verstehen, wenn man sich den Ablauf eines LogVorgangs visualisiert (siehe Abbildung 2). 1. Eine Applikation generiert eine Log-Meldung und schickt diese beispielsweise an den default Log-Socket des Systems. 2. Aus diesem Socket (source) liest der syslog-ng die Meldungen. 3. Ein oder mehrere Source-Objekte, Filter und Destinationen bilden eine so genannte Log-Anweisung, in der definiert wird, dass ... syslogd syslog-ng (OSE) syslog-ng (PE) Übertragung von Meldungen mittels TCP (verbindungsorientiert) X X Filtern von Meldungen anhand ihres Inhalts X X Nutzt Makros, um dynamisch Zieldateien, Verzeichnisse und Tabellen anzulegen X X X X IPv6 Support Meldungen per TLS verschlüsselt übertragen X Zwischenspeichern von Meldungen auf der Festplatte, um bei einem Ausfall der Netzwerkverbindung keine Informationen zu verlieren X Direktes Speichern von Meldungen in einer Datenbank X Meldungen, die zu einem Ziel gesendet werden, können in der Anzahl limitiert werden X Windows Support X ORDIX News 3/2008 ... die Meldungen aus dem Source-Objekt, die auf den Filter passen, an das im Destination angegebene Ziel geschickt werden. Source-Objekt Ein Source-Objekt beschreibt die Quelle aus der Syslog, die Meldungen empfangen soll. Es können beliebig viele Source-Objekte konfiguriert werden. Um mit syslog-ng alle Meldungen zu empfangen, die auch der alte syslogd standardmäßig empfangen hat, müsste man folgendes Objekt konfigurieren: source s_src { unix-stream("/dev/log"); internal(); }; Source sagt aus, dass es sich bei dem folgenden Statement um ein Source-Objekt handelt, s_src ist nur ein Name für das Objekt. In den geschweiften Klammern steht der ausschlaggebende Teil: Unix-stream ("/dev/log") öffnet den Socket /dev/log (default Log-Socket) und liest alle eingehenden Meldungen. Mit internal() werden zusätzlich die internen Meldungen des SyslogDaemons aufgefangen. Syslog-ng kann Meldungen noch aus vielen anderen Quellen, wie z. B. einer Pipe oder einem TCP-Socket lesen. Auf jede Möglichkeit einzugehen, würde jedoch den Umfang dieses Artikels sprengen. Die Dokumentation der Entwickler bietet aber sehr gute und detaillierte Informationen [1]. Filter-Objekt Abhängig vom OS Abb. 1: Unterschiede der einzelnen Syslog-Daemons. 40 4. Welche Meldungen an eine Destination weitergeschickt werden, wird über einen Filter definiert. Dabei ist es nicht nur möglich, nach der Facility und der Priorität zu filtern, sondern es können unter anderem auch reguläre Ausdrücke auf den Nachrichtentext angewendet werden. filter f_example { priority(err...emerg); match("test"); }; Dieser Filter würde auf alle Meldungen passen, die vom Level error bis emergency sind und im Nachrichtentext „test“ enthalten. Da das Filter-Objekt sehr mächtig ist, sollen an dieser Stelle noch einige Möglichkeiten Open Source aufgezeigt werden. Zu den im Beispiel schon genannten Funktionen kommen noch folgende hinzu: • facility(facility[,facility]) Filtern nach den angegebenen Facilities • filter(filtername) Ruft einen anderen Filter auf und überprüft ihn • host(regexp) Der Reguläre Ausdruck muss auf den Host-Namen passen Applikation Applikation Source • netmask(ip/mask) Überprüft die IP-Adresse des sendenden Hosts • program(regexp) Der Reguläre Ausdruck muss auf den Programmnamen passen Applikation Source Filter Destination Log-Anweisung syslog-ng Abb. 2: Aufbau von syslog-ng. Links ► [1] syslog-ng Administrator Guide: http://www.balabit.com/dl/html/syslog-ng-admin-guide_en.html/bk01-toc.html Destination-Objekt Eine Destination ist im einfachsten Fall eine Datei. Es ist also das Ziel gemeint, an das die Meldungen geschickt werden sollen. Im folgenden Konfigurationsabschnitt wird das Ziel d_messages definiert, hinter dem sich die Datei /var/log/messages verbirgt. Glossar Syslog priority Beschreibt die Wichtigkeit einer Log-Meldung. Die Werte reichen von debug (geringe Priorität) bis emergency (hohe Priorität). Syslog facility Gibt an, wer die Log-Meldung erzeugt hat. Es gibt 24 verschiedene Facilities, unter anderem „Kernel Messages“ und „Mail System“. destination d_messages { file("/var/log/messages"); }; Als Ziel muss aber nicht immer eine Datei definiert werden, auch andere Ziele sind möglich: Wählt man als Ziel z. B. usertty("root"), werden die Meldungen an das Terminal vom User root geschickt. im Vorfeld sinnvoll auf verschiedene Dateien aufzuteilen und uninteressante Meldungen herauszufiltern. Ausblick Log-Anweisung Schlussendlich werden die einzelnen Objekte in einer Log-Anweisung zusammengefasst. Erst hier wird festgelegt, welche Meldungen, von welchen Quellen, an welche Ziele geschickt werden sollen. log { source(s_src); filter(f_example); destination(d_messages); }; So können flexibel verschiedene Source-, Filter- und Destination-Objekte kombiniert werden. Das ermöglicht es, die Meldungen schon Der syslog-ng erlaubt wesentlich mehr Filtermöglichkeiten als der alte Syslog-Daemon und er hat sich in den letzten Jahren zum Standard in vielen Distributionen entwickelt. Und da unserer Erfahrung nach nichts gegen den Einsatz spricht, können wir Ihnen den syslog-ng uneingeschränkt empfehlen. Im nächsten Teil des Artikels möchten wir darauf eingehen, welche Vorteile das zentrale Speichern von Log-Meldungen bietet und welche Möglichkeiten es gibt, die Log-Meldungen verschlüsselt über das Netzwerk zu übertragen. Marius Dorlöchter ([email protected]). ORDIX News 3/2008 41 IT-Strategie Reihe SOA (Teil I): Was ist SOA? Dieser Artikel richtet sich an Entscheider, SoftwareArchitekten sowie Entwickler, die sich mit SOA vertraut machen wollen. Wenn es um die Gestaltung unternehmensweiter Anwendungslandschaften geht, ist „Serviceorientierte Architektur“, kurz SOA, das derzeit meist verwendete Schlagwort. Dieses Schlagwort wird häufig gleichgesetzt mit Begriffen, wie z. B. Web-Services oder Enterprise Application Integration (EAI), was allerdings nicht ganz korrekt ist. Aus diesem Grund erläutert dieser Artikel was unter SOA zu verstehen ist und gibt Antworten auf die häufig in Zusammenhang mit SOA gestellten Fragen. Warum eigentlich SOA? Betrachtet man die Entwicklung der Informationstechnologie der letzten Jahre, so stellt man einen Trend zu immer abstrakter werdenden Programmiersprachen fest. Ziel der Abstraktion ist dabei die Beherrschung der ständig zunehmenden Komplexität der IT-Landschaften. Die letzte Abstraktionsstufe nach den prozeduralen und objektorientierten Paradigmen stellen Web-Services und serviceorientierte Architekturen dar. Was sind die wesentlichen Merkmale einer SOA? SOA kann als ein abstraktes Konzept einer Software-Architektur bezeichnet werden, bei dem im Mittelpunkt fachlich getriebene und modulare Services bzw. Dienste stehen. Dabei spielen folgende Instanzen eine wesentliche Rolle: 42 ORDIX News 3/2008 • • • Anbieter Verzeichnis Konsument Die Hauptaufgabe eines Anbieters ist die Erstellung, die Beschreibung und die Veröffentlichung seiner Dienste in einem Verzeichnis. Der Konsument dagegen durchsucht das Verzeichnis des Anbieters und wählt einen gewünschten Dienst aus. Danach findet eine dynamische Anbindung des Konsumenten an den Anbieter statt und schließlich greift der Konsument auf die Methoden des Anbieters zu. Das Besondere an dem hier beschriebenen Verfahren ist die dynamische Bindung und die daraus resultierende, so genannte lose Kopplung. Mit einer losen Kopplung ist eine Bindung zur Laufzeit gemeint, bei der im Gegensatz zur Bindung zum Übersetzungszeitpunkt nicht bekannt ist, wie die Aufrufabhängigkeiten sind. IT-Strategie Ein weiteres, wesentliches Merkmal einer SOA ist die flexible Ausrichtung der IT auf die Geschäftsprozesse. Dabei werden die Geschäftsprozesse als ein Verbund von verschiedenen Services betrachtet. Ändert sich ein Prozess, so kann durch Neukombination bzw. Orchestrierung der entsprechenden Services sehr schnell und flexibel auf die geänderten Prozesse reagiert werden. Dies ist möglich durch die geringeren technischen Abhängigkeiten der Services untereinander. Kann man SOA kaufen? Durch die Versprechungen vieler Softwarehersteller kann schnell der Eindruck entstehen, dass mit dem Kauf einer SOA-Lösung gleichzeitig auch eine serviceorientierte Architektur eingekauft wird und die Einführung der SOA im Unternehmen nicht allzu weit entfernt sei. In Wirklichkeit ist ein SOA-Produkt, wie z. B. ESB oder BPEL-Engine, kein Garant für die erfolgreiche Einführung von SOA in einem Unternehmen. Der Grund liegt hier in der Tatsache, dass SOA kein Produkt, sondern vielmehr ein Architekturkonzept bzw. ein Paradigma ist, nach dem im optimalen Fall die gesamte IT-Landschaft erst ausgerichtet werden muss. Applikation 1 Auf der technologischen Ebene sind in der letzten Zeit zwar einige SOA-Produkte entstanden. In den meisten Fällen handelt es sich dabei allerdings um Weiterentwicklungen bereits vorhandener Produkte. Aufgrund der Tatsache, dass SOA momentan ein Modewort ist, können derartige Produkte derzeit gut unter der Marke „SOA“ verkauft werden. Eine gesunde Skepsis ist hier also sicher angebracht. Ist SOA ein neues EAI? Enterprise Application Integration (EAI) ist eine Technologie für die Integration von An- Applikation 3 Broker Applikation 8 Applikation 7 Applikation 4 Applikation 6 Applikation 5 Abb. 1: Das „Hub and Spoke“-Modell von EAI. Service Registry stellt Servicebeschreibung bereit hinterlegt Servicebeschreibung SOA-Infrastruktur Ist SOA nur ein alter Wein in neuen Schläuchen? Beim genauen Betrachten von SOA stellt man fest, dass die Ideen, die SOA ausmachen, wie z. B. lose Kopplung, Wiederverwendung, Kapselung oder verteilte Entwicklung, nicht vollkommen neu sind. Das Neue an SOA ist lediglich die Ganzheitlichkeit des Konzeptes und die unternehmensweite bzw. unternehmensübergreifende Sichtweise. Applikation 2 sendet Serviceabfrage sendet Serviceantwort Servicenehmer Servicegeber Abb. 2: Das verteilte SOA-Konzept. wendungssystemen (Applications). Dabei liegt der Schwerpunkt von EAI auf der technischen Definition von Applikationsschnittstellen mit dem Ziel, die Unternehmenslandschaften miteinander zu verbinden. Bei einer SOA stehen dagegen fachliche Services im Vordergrund, die in der Regel anwendungsübergreifend agieren. Demzufolge sind die Schnittstellen bei einer SOA fachlich orientiert und bei EAI eher technischer Natur. Außerdem verfolgt EAI für den Austausch von Nachrichten einen so genannten „Hub and Spoke“-Ansatz. Bei diesem Modell steht eine zentrale Middleware-Komponente im Mittel- ORDIX News 3/2008 43 IT-Strategie Strategien Unternehmensarchitektur SOA Anwendungsarchitektur Technische Module Abb. 3: SOA als Architektur für unternehmensweiten Einsatz. Glossar ESB Enterprise Service Bus. ESB ist eine Kommunikationsinfrastruktur (Middleware) im Umfeld von serviceorientierten Architekturen. Die Aufgaben eines ESB sind beispielsweise Messaging, Data Security, Transformation oder Load Balancing. Derzeit gibt es für ESB keinen einheitlichen Standard. BPEL Business Process Execution Language. BPEL ist eine XML-basierte Sprache und wurde im Jahr 2002 von IBM, BEA und Microsoft eingeführt. Diese Sprache dient der Beschreibung von Geschäftsprozessen, deren einzelne Aktivitäten durch Webservices implementiert werden. CORBA Common Object Request Broker Architecture. CORBA ist eine Spezifikation für eine objektorientierte Middleware, deren Kern ein so genannter Object Request Broker (ORB) ist und definiert die plattformübergreifenden Protokolle und Dienste. EJB Enterprise Java Beans. EJB sind standardisierte Komponenten, aus denen JEE-konforme Anwendungen erstellt werden, die auf einem JEE-Application Server laufen. Für unterschiedliche Zwecke definiert der JEE-Standard verschiedene Arten von EJBs wie z. B. Session Beans, Entity Beans und Message-driven Beans. EAI Enterprise Application Integration. EAI ist ein Konzept zur unternehmensweiten Integration von Applikationen auf unterschiedlichen Plattformen, um Geschäftsfunktionen entlang der Wertschöpfungskette zu verbinden. SOAGovernance Mit SOA-Governance werden die Verantwortlichkeiten, Entscheidungen und Rollen zur Regulierung und Kontrolle einer serviceorientierten Architektur (SOA) bezeichnet. Hub and Spoke Mit „Hub and Spoke“ ist gemeint, dass eine Verbindung zwischen zwei Endknoten A und B nicht direkt, sondern über einen Zentralknoten stattfindet. Dabei entsteht eine sogenannte Sterntopologie, in der jeder einzelne Knoten mit einem Zentralknoten verbunden ist und über diesen mit anderen Knoten kommuniziert. Marshalling Marshalling bezeichnet eine Umwandlung von zu transportierenden Anwendungsdaten in eine transportgerechte Form. In einer SOA werden beim Marshalling binäre Objekte in der Regel in das Datenaustauschformat XML umgewandelt. Unmarshalling Mit Unmarshalling ist das Extrahieren von Anwendungsdaten aus einer Nachricht und die Wiederherstellung der Datenstruktur mit deren Werten gemeint. In einer serviceorientierten Architektur werden XML-Daten in der Regel zurück in binäre Objekte transferiert. 44 ORDIX News 3/2008 punkt, über die der komplette Nachrichtenaustausch stattfindet (siehe Abbildung 1). SOA dagegen richtet sich nach einem verteilten Konzept, bei dem eine dynamische Bindung im Vordergrund steht (siehe Abbildung 2). Aus den genannten Gründen kann SOA als ein Architekturparadigma nicht mit einer Integrationstechnologie wie EAI verglichen werden. Sind Web-Services für SOA zwingend notwendig? Die Verwendung von Web-Services und deren assoziierten Technologien wird häufig mit dem Begriff SOA gleichgesetzt. Dabei sind Web-Services eine mögliche Implementierungstechnologie unter anderen, wie CORBA oder Enterprise Java Beans (EJB), mit der SOA realisiert werden kann. Da Web-Services allerdings über einige standardisierte Protokolle zur technologie- und unternehmensübergreifenden Kommunikation verfügen, eignen sich diese besonders gut für die Implementierung von SOA. Was hat SOA mit einem Städtebebauungsplan gemeinsam? Auf der Ebene der Städtebebauung werden Stadtteile wie Industriegebiete, Wohngebiete oder die Kernstadt und die wesentlichen Verbindungen zwischen diesen Gebieten - wie Straßen oder Brücken - festgelegt. Damit werden die Vorgaben und der grobe Rahmen für die Bebauung einer Stadt festgelegt. Die Architektur und das Innenleben eines einzelnen Hauses werden auf dieser Ebene vernachlässigt und einem Hausarchitekten überlassen. Überträgt man diesen Sachverhalt auf die IT, so stellt man einige Gemeinsamkeiten zwischen der Städtebebauung und der serviceorientierten Architektur fest. Auch bei der SOA bewegt man sich im optimalen Fall auf der groben Unternehmensebene und legt den Rahmen bzw. die Service-Domänen für die unternehmensweite SOA fest (siehe Abbildung 3). Mit einer Service-Domäne ist ein so genannter Container gemeint, der logisch eng zusammengehörende Funktionalitäten bzw. Services bündelt. Das Innenleben bzw. die interne Implementierung eines Services überlässt man in aller Regel einem technischen Software-Architekten, der wie ein Hausarchitekt agiert. IT-Strategie Wie sieht es mit SOA und Performance aus? Des Weiteren lässt sich sagen, dass in einer serviceorientierten Architekturlandschaft die Performance zu einer echten Herausforderung werden kann. Da SOA häufig mit WebServices und damit mit dem Datenaustauschformat XML realisiert wird, ist hier aufgrund der XML-Tags innerhalb der XML-Dokumente mit einem erhöhten Datenumfang und demzufolge mit längeren Verarbeitungszeiten zu rechnen. Darüber hinaus müssen beim Versenden und Empfangen von Objektdaten in einer SOA zusätzliche Verarbeitungsschritte durchgeführt werden (Marshalling/Unmarshalling). Der Grund liegt darin, dass XML im Gegensatz zu anderen binären Protokollen, wie z. B. CORBA oder RMI, in aller Regel nur Textzeichen enthält. Beim Versenden müssen die binären Objektdaten demzufolge zuerst in eine Textdarstellung überführt und beim Empfangen der textbasierten Objektdaten wieder in eine binäre Form transferiert werden. Resümee Die wesentlichen Vorteile einer SOA können erst dann erzielt werden, wenn SOA unternehmensweit eingesetzt wird. Bis dahin ist es allerdings ein weiter Weg, der in der Anfangsphase hohe Investitionen zur Folge hat. Diese Investitionen machen sich erst dann wieder bezahlt, wenn nach der SOA-Ausrichtung neue Anforderungen schneller, effizienter und vor allem kostengünstiger realisiert werden können. Zudem kann man sagen, dass das primäre Ziel von SOA nicht die Minimierung der Komplexität von Geschäftsprozessen und der ITLandschaft ist, sondern vielmehr die Beherrschung der Komplexität. Da auch auf der organisatorischen Ebene eines Unternehmens einige Herausforderungen bei der Einführung einer SOA zu meistern sind, werden wir uns im nächsten Teil dieser SOAReihe mit der serviceorientierten Organisation (SOA-Governance) beschäftigen. Markus Fiegler ([email protected]). Larry Ratlos: Datenbankeintrag per Skript entfernen Larry hat die Aufgabe bekommen, auf 20 Datenbank-Servern seiner Firma den Eintrag für die Testdatenbank „LOGTEST01“ aus der tnsnames.ora zu entfernen. „Da schreibe ich mir einfach ein Skript und rufe das dann auf jedem Server auf“ denkt sich Larry. Um sein Skript erstellen zu können, schaut er sich die Datei zunächst mal auf einem Server an. Sie liegt unter $ORACLE_ HOME/network/admin/tnsnames.ora. Schnell hat er den Eintrag gefunden: LOGTEST01 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = 192.168.1.1 ) (PORT = 1521) )) (CONNECT_DATA = (SERVICE_NAME = LOGISTIK_TEST) )) „Ok, dann entferne ich einfach überall die 8 Zeilen ab der Zeile, in der LOGTEST01 am Anfang steht“, denkt sich Larry. Zur Sicherheit vergleicht er die Datei aber nochmal auf einem anderen Server. Hier sieht der Eintrag jedoch so aus: Die Lösung des Rätsels aus 2/2008 finden Sie im Internet unter http://www.ordix.de/ ORDIXNews/3_2008/Aktuell/ larry_ratlos_32008.html LOGTEST01 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = 192.168.1.1 )(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = LOGISTIK_TEST)) ) Können Sie Larry helfen? Larry ist mal wieder ratlos. Wie muss sein Skript aussehen, damit er nicht tatsächlich auf jedem Server von Hand die tnsnames.ora editieren muss? Senden Sie Ihre Lösung bis zum 17.10.2008 an [email protected]. ORDIX News 3/2008 45 Datenbanken Oracle Enterprise Manager Grid Control (Teil IV): Datenbankadministration mit Grid Control Dieser Artikel richtet sich an Datenbankadministratoren, die Grid Control zur Administration von Oracle Datenbanken einsetzen möchten. Im täglichen IT-Betrieb müssen an Komplexität stetig zunehmende IT-Landschaften durch immer weniger Personal betrieben werden. Wir zeigen, wie Oracle Datenbanken mit dem Enterprise Manager Grid Control 10g effizient administriert werden können. Allgemeines Mit Enterprise Manager Grid Control 10g können grundsätzlich Oracle Datenbanken der Releases 8.1.7.4 und höher administriert werden. Es gibt jedoch für die verfügbaren Grid Control Versionen und Agenten einige Einschränkungen hinsichtlich der verwaltbaren Ziele. Diese können der Metalink Note 412431.1 [1] entnommen werden. Aufteilung in Hauptbereiche Nachdem man sich auf der Startseite der Oracle Grid Control das zu administrierende Datenbankziel ausgesucht und dorthin navigiert hat, präsentiert sich Grid Control mit der Standardseite der gewählten Datenbank. Folgt man dort dem Link „Administration“, gelangt man auf die Administrationsseite, die in folgende Hauptbereiche unterteilt ist: • Datenbankverwaltung • Schema Einen Überblick über alle Punkte finden Sie in Abbildung 1. Im Folgenden möchten wir die interessantesten „Stellschrauben“ für die Bereiche Datenbankverwaltung und Schema vorstellen. Datenbankverwaltung Nachfolgend stellen wir Ihnen die wichtigsten Funktionen des Bereichs „Datenbankverwaltung“ vor. 46 ORDIX News 3/2008 Speicherung Aus jedem Unterabschnitt des Abschnittes Speicherung heraus ist ein direkter Wechsel zu jedem anderen Unterabschnitt mittels DropDown-Liste möglich; z. B. von Tablespaces zu Redo Log-Gruppen. Dies erleichert die Navigation. Speicherung – Kontrolldateien Der Link „Kontrolldateien“ führt auf eine Seite mit drei Registern, nämlich „Allgemein“, „Erweitert“ und „Record-Sektion“. Unter „Allgemein“ werden lediglich die vorhandenen Kontrolldateien angezeigt. Des Weiteren besteht die Möglichkeit, die Kontrolldateien per Klick zum Trace zu sichern. Sofort wird der Befehl alter database backup controlfile to trace; ausgeführt. Leider wird der Name der erzeugten Datei nicht angezeigt, so dass der Administrator diese in der User Dump Dest der Datenbank suchen muss. Einen Namen für die Sicherung der Kontrolldatei anzugeben, ist ebenfalls nicht möglich. Im Register „Erweitert“ werden weitere Informationen, wie die Datenbank-ID, der Typ der Kontrolldatei, Erstellungsdatum, aktuelle LogSequence-Nummer, letzte SCN mit Änderungsdatum sowie der Status zum Backup der Kontrolldatei angezeigt. Hier besteht auch die Möglichkeit, über einen entsprechenden Link das automatische Backup für die Kontrolldatei zu konfigurieren. Der Link für die Aktivierung des automatischen Backups der Kontrolldatei verzweigt auf einen Bereich der Grid Control, in dem eine vollständige Backup Policy und Konfiguration des RMAN hinterlegt werden kann. Datenbanken Unter „Record-Sektion“ wird der innerhalb der Kontrolldatei von Detailinformationen zur physischen Struktur der Datenbank belegte Speicherplatz in Anzahl Bytes angezeigt. Speicherung – Tablespaces Im Bereich der Tablespace-Verwaltung ist vom Anzeigen der Inhalte und des Füllgrades über das Hinzufügen von Dateien, Löschen und Offline-Setzen, Read-Only-Setzen, Reorganisation von Tabellen und Indizes, Anzeige von Abhängigkeiten, Erstellen von Tablespaces bis zum Start von Segment Advisor-Läufen jede Art der Administration möglich. Durch entsprechend intuitive Benutzerführung können hier Tätigkeiten, die ansonsten aufwändig über die Kommandozeile einzugeben sind, mit wenigen Mausklicks erledigt werden. Speicherung – Temporäre TablespaceGruppen In diesem Bereich können, wie der Name bereits andeutet, temporäre Tablespace-Gruppen erstellt und verwaltet werden. Speicherung – Datendateien Die Verwaltung von Datendateien ermöglicht Aktionen ähnlich wie bei der Administration von Tablespaces. Auch erlaubt die intuitiv gestaltete Benutzerführung eine leichte Navigation zur Erreichung der Administrationsziele. Datenbankverwaltung Speicherung Kontrolldateien Tablespaces Temporäre Tablespace Gruppen Datendateien Rollback Segmente Redo Log-Gruppen und Archive Logs Datenbankkonfiguration Speicherparameter Undo-Management Alle Initialisierungsparameter Verwendung von Datenbank Features Oracle Scheduler Jobs Jobketten Ausführungspläne Programme Job-Klassen Fenster Window-Gruppen Globale Attribute Statistikverwaltung Automatisches Workload Repository Optimizer-Statistiken verwalten Datenbank wechseln Zu ASM migrieren Zu Cluster-Datenbank konvertieren Tablespace zu lokal verwaltetem Tablespace machen Resource Manager Überwachung Nutzungsgruppen Nutzungsgruppenzuordnungen Pläne Speicherung – Rollback-Segmente Hier werden alle in der Datenbank vorhandenen Rollback-Segmente angezeigt, sofern nicht das seit Oracle Release 9i per Standard aktive Automatic Undo Management (AUM) aktiv ist. Wird in der Datenbank AUM benutzt, ist nur das SYSTEM Rollback-Segment zu sehen und administrierbar. Dann ist es auch nicht möglich, weitere Rollback-Segmente zu erstellen. Versucht man dies, wird eine entsprechende Fehlermeldung ausgegeben. Speicherung – Redo Log-Gruppen In diesem Abschnitt können die Online Redo Log-Dateien und Redo Log-Gruppen verwaltet werden. Zusätzlich kann hier manuell ein Checkpoint ausgelöst werden. Außerdem gibt Grid Control Empfehlungen zur Größe der Online Redo Log-Dateien aus. Dazu ist es allerdings erforderlich, dass der dynamisch änderbare Datenbankinitialisierungsparameter FAST_START_MTTR_TARGET gesetzt ist. In diesem Zusammenhang ist aber zu beachten, dass ein Setzen des Initialisierungsparameters LOG_CHECKPOINT_INTERVAL den Schema Datenbankobjekte Tabellen Indizes Views Synonyme Sequences Datenbank-Links Directory-Objekte Objekte reorganisieren Programme Packages Package Bodys Prozeduren Funktionen Trigger Java-Klassen Java-Quellen XML-Datenbank Konfiguration Ressourcen Zugriffskontrolllisten XML-Schemata XMLType-Tabellen XMLType-Views Benutzer & Berechtigungen Benutzer Rollen Profile Audit-Einstellungen Materialized Views Materialized Views Materialized View-Logs Refresh-Gruppen BI & OLAP Dimensionen Cubes OLAP-Dimensionen Kennzahlenordner Benutzerdefinierte Typen Array-Typen Objekttypen Tabellentypen Change Management Dictionary-Baselines Dictionary-Vergleiche Datenmaskierung Definitionen Format-Library Abb. 1. Überblick über das Administrationsmenü. Parameter FAST_START_MTTR_TARGET überschreibt und Grid Control dann keine Empfehlung mehr ausgeben kann. Speicherung – Archive Logs Die Bezeichnung dieses Unterabschnittes impliziert, dass hier eine Verwaltung von archivierten Redo Log-Dateien möglich sei. Dies ist jedoch leider nicht der Fall. Man kann sich hier lediglich die vorhandenen Dateien samt einiger Detailinformationen anzeigen lassen. Praktisch wäre es, wenn sich in diesem Kontext direkt ein Backup der archivierten Redo Log-Dateien starten ließe. ORDIX News 3/2008 47 Datenbanken Datenbankkonfiguration – Speicherparameter Hier lassen sich SGA und PGA verwalten. Außerdem gibt es so genannte Advisories, die Empfehlungen für die Größen dieser Speicherbereiche auf Basis historischer, im Automatic Workload Repository (AWR) abgelegter Daten ausgeben. Datenbankkonfiguration – Undo Management Im Administrationsbereich des Undo Managements ist eine Möglichkeit zum Wechsel zwischen manuellem und automatischem Undo Management nicht, wie erwartet, vorgesehen. Dieser ist nur über eine Änderung des entsprechenden Initialisierungsparameters unter „Alle Initialisierungsparameter“ möglich. Die Nutzung des Automatic Undo Management dürfte heute in der Praxis aber auch die Regel sein. Grid Control bietet hier als zusätzliche Unterstützung Diagramme an, die die Nutzung des Undo Tablespace innerhalb eines Zeitintervalls anzeigen und so helfen sollen, potentielle Probleme zu erkennen. Außerdem steht ein Undo Advisor für das Sizing des Undo Tablespace zur Verfügung. Datenbankkonfiguration – Alle Initialisierungsparameter In diesem Unterabschnitt kann man sich alle Initialisierungsparameter anzeigen lassen und diese auch ändern. Je nach Parameter erfordert eine Änderung einen Neustart der Datenbank. Es stehen hier sowohl die init_<oracle_sid>.ora als auch die Serverparameterdatei (SPFILE), sofern letzteres angelegt wurde, zur Verfügung. Im Gegensatz zur Administration auf der Shell können statische Parameter im Grid nur geändert werden, wenn man als User mit dem SYSDBAPrivileg auf der Datenbank arbeitet. Datenbankkonfiguration – Verwendung von Datenbankfunktionen Grundsätzlich ist bei einer Datenbank zwischen zusätzlich zur Enterprise Edition lizenzierbaren Optionen sowie Funktionen der Datenbank zu unterscheiden. Grid Control stellt hier Informationen über verfügbare Funktionen samt deren High Watermark und weitere statistische Daten zur Verfügung. Darüber hinausgehende Informationen zu Optionen und Funktionen können den Lizenzierungsbestimmungen des jeweiligen Datenbankversion entnommen werden. Dieser Unterbereich ist nur für Datenbanken der Version 10g verfügbar. 48 ORDIX News 3/2008 Oracle Scheduler Dieser Bereich wird nur bei Datenbanken der Version 10g angezeigt, da er den mit Oracle 10g eingeführten Job Scheduler (dba_scheduler_jobs) betrifft. Das in früheren Versionen integrierte Job-System (dba_jobs) unterstützt Grid Control 10g nicht. Hier ist die gesamte Funktionalität des neuen Schedulers verfügbar; d. h. alles, was über das API per Kommandozeile ausgeführt werden kann, ist auch innerhalb der einzelnen Unterabschnitte des Bereiches „Oracle Scheduler“ durchführbar. Statistikverwaltung – Automatisches Workload Repository Auch dieser Bereich wird nur bei Datenbanken der Version 10g angezeigt, da das AWR mit Oracle 10g neu eingeführt wurde. Hier besteht die Möglichkeit, die Snapshot-Konfiguration zu bearbeiten sowie beibehaltene Snapshot Sets und SQL Tuning Sets zu erstellen, AWR-Berichte zu erzeugen, den Automatic Database Diagnostics Monitor (ADDM) auszuführen, Snapshot-Bereiche zu löschen und Zeiträume zu vergleichen. Statistikverwaltung – Optimizer-Statistiken verwalten Dieser Unterabschnitt unterscheidet sich zwischen 10g und älteren Versionen. Für ältere Versionen können lediglich Optimizer-Statistiken erfasst und gelöscht werden. Bei 10g hingegen können außerdem ältere Optimizer-Statistiken wiederhergestellt, Statistiken gesperrt sowie diese Sperren wieder aufgehoben werden. Des Weiteren bietet Grid Control hier eine direkte Verlinkung zum Job Scheduler. Datenbank wechseln – zu ASM migrieren Oracle bietet seit Version 10g einen eigenen Volume Manager an, mit dem die Verwaltung von Dateisystemen vereinfacht werden und der die Volume Manager anderer Hersteller ersetzen soll. Diese Software wird als Automatic Storage Management (ASM) bezeichnet. In diesem Bereich von Grid Control wird die Möglichkeit geboten, eine Datenbank auf ASM umzustellen. Bevor eine solche Maßnahme durchgeführt wird, sollten jedoch unbedingt die Metalink Note 252219.1 [1] sowie die entsprechenden Dokumente im Oracle Technology Network [2] beachtet werden. Datenbank wechseln – zu Cluster-Datenbank konvertieren Für Datenbanken ab Release 10g steht mit Grid Control die Möglichkeit zur Verfügung, eine so genannte Single Instance Datenbank Datenbanken als Instanz in einen Oracle Real Application Cluster (RAC) einzubinden. RAC ist eine leistungsstarke Hochverfügbarkeitslösung von Oracle, die in der ORDIX News bereits ausführlich beschrieben wurde [3]. Datenbank wechseln – Tablespace zu lokal verwaltetem Tablespace machen Lokal verwaltete Tablespaces wurden bereits mit Oracle Release 8i eingeführt. Seit Oracle 9i sind sie der Standard. Lokal verwaltete Tablespaces bieten gegenüber von im Data Dictionary verwalteten Tablespaces Performance-Vorteile, da die Verwaltung der Extents im Tablespace über eine lokale Bitmap erfolgt. Mit Grid Control ist es nun möglich, so genannte „dictionary managed Tablespaces“ auf lokale Verwaltung umzustellen. Dieses Verfahren ist allerdings nicht zu empfehlen, da das Bitmap nicht am Anfang der Datafiles liegt und die alte Extent-Struktur keinesfalls verändert wird. Lediglich neue Extents werden nach dem neuen Verfahren allokiert. Resource Manager Die Funktionalitäten des Resource Managers wurden ebenfalls in Grid Control integriert. Unter „Pläne“ ist es möglich, Pläne zu definieren, aktivieren, deaktivieren, bearbeiten und zu löschen. Der Bereich „Nutzungsgruppen“ erlaubt es, Nutzungsgruppen zu erstellen, zu bearbeiten und zu löschen. Die Zuordnung von Nutzern zu Nutzungsgruppen sowie die Festlegung von Prioritäten sind ebenfalls möglich. Schließlich steht unter „Überwachung“ noch ein Resource Monitor zur Verfügung, mit dem die tatsächliche Ressourcennutzung durch Nutzungsgruppen überwacht werden kann. Schema Der Bereich Schema ermöglicht die vollständige Administration sämtlicher Schemaobjekte, wobei Grid Control diese in „Datenbankobjekte“, „Benutzerdefinierte Typen“, „Materialized Views“ und „Programme“ aufteilt. Mit letzteren sind Packages, Prozeduren, Java Klassen etc., also in der Datenbank abgelegter, ausführbarer Code gemeint. Bei der Verwaltung von Schemaobjekten ist es auf der Startseite des jeweiligen Objekttyps möglich, über eine Drop-Down-Liste einfach zur Startseite eines beliebigen anderen Objekttyps zu wechseln. Dies ermöglicht eine einfache und effiziente Navigation. In diesem Kontext ist auch eine Reorganisation von Datenbankobjekten möglich. Diese Funktionalität darf jedoch nur genutzt werden, wenn das Database Tuning Pack zur Enterprise Manager Grid Control lizenziert wurde. Des Weiteren enthält dieser Bereich die Benutzer- und Rollenverwaltung sowie Möglichkeiten zur Verwaltung der XML-Datenbank, für BI & OLAP, Change Management und Datenmaskierung. Leider ist es hier nicht möglich, sich die DDL zu einem Objekt speicherbar erzeugen zu lassen. Diese kann lediglich angezeigt werden. Schema – XML-Datenbank Dieser Bereich ist für die Administration der XML-Datenbank vorgesehen. Die XML-Datenbank ist seit Oracle 9i verfügbar, im Kernel der Datenbank integriert und ermöglicht die Verarbeitung von XML in der Datenbank. Unter „Konfiguration“ können Einstellungen für den XML-DB-Protokoll-Server vorgenommen werden, während der Unterabschnitt „Ressourcen“ für die Verwaltung von XML-Ressourcen vorgesehen ist. Des Weiteren wird unter „XML-Datenbank“ die Möglichkeit geboten, Zugriffskontrollisten für XML-Objekte zu administrieren. Auch XML-Schemata, XMLType-Tabellen und XML-Type-Views können hier verwaltet werden. Schema – Benutzer & Berechtigungen In diesem Bereich ist die komplette Administration für Benutzer, Rollen, Profile und Auditing implementiert, wofür es jeweils separate Unterabschnitte gibt. Auch hier ist wieder eine effiziente Navigationsmöglichkeit vorhanden, die es erlaubt, mittels Drop-Down-Liste von den jeweiligen Startseiten, mit Ausnahme des Auditing, auf die Startseiten der anderen Unterabschnitte zu wechseln. Zusätzlich wird in der Drop-Down-Liste noch ein Wechsel zu „Directory Objekt“ angeboten. Dies ist sinnvoll, weil Benutzer und Rollen Berechtigungen auf derartige Objekte haben können. Bei dem in diesem Kontext administrierbaren Auditing handelt es sich um das StandardAuditing. Fine Grained Auditing ist in Grid Control nicht verfügbar. Schema – BI & OLAP In diesem Bereich sind administrative Tätigkeiten für Business Intelligence (BI) und Online Analytical Processing (OLAP) möglich. Diese betreffen Dimensionen, Cubes, OLAPDimensionen und Kennzahlenordner. Auf den Startseiten dieser Objekttypen ist es möglich, mittels Drop-Down-Liste zu jedem beliebigen Objekttyp innerhalb der Datenbank zu wechseln. Dies ist hilfreich, da diverse Objekttypen (z. B. Tabellen) direkt oder indi- ORDIX News 3/2008 49 Datenbanken rekt Bestandteil von Dimensionen und Cubes werden können. Es können hier vollständige Dimensionen und Cubes einschließlich Ebenen, Hierarchien und Attributen sowie OLAPOptionen erstellt und verwaltet werden. Da Datenbanken tendenziell neben der traditionellen Transaktionsverarbeitung gleichzeitig immer mehr analytische Aufgaben durchführen müssen, stellt der Bereich BI & OLAP in Grid Control mit seinen grundlegenden administrativen Funktionen eine Möglichkeit dar, diesen Anforderungen teilweise gerecht zu werden, ohne sofort weitere Werkzeuge wie beispielsweise den Warehouse Builder einsetzen zu müssen. Schema – Change Management Hier können Dictionary Baselines erstellt und Vergleiche vorgenommen werden. Folgende Vergleiche sind möglich: • • • Datenbank mit Datenbank Baseline mit Baseline Datenbank mit Baseline Dabei sind verschiedene Filter, z. B. auf Schemata, einstellbar. Dadurch lassen sich Unterschiede zwischen Objekten zu verschiedenen Zeitpunkten leicht erkennen. Leider ist es nicht möglich, sich aus dem Ergebnisfenster eines Vergleiches heraus direkt die entsprechende Objekt-DDL speicherbar erzeugen zu lassen. Diese kann lediglich angezeigt werden. Die Nutzung dieser Funktionalität erfordert die zusätzliche Lizenzierung des Data base Change Management Pack. Schema – Daten maskieren Datenmaskierung ermöglicht es, Daten anders darzustellen, als sie im Original aussehen. Dies erfolgt, indem die Originaldaten mit falschen Daten eines ähnlichen Typs überschrieben werden. So etwas kann aus rechtlichen Gründen, z. B. Datenschutz, in Testoder Entwicklungsumgebungen erforderlich sein. Im Unterabschnitt „Definitionen“ können Datenmaskierungen definiert und ausgeführt werden. Datenmaskierungen basieren immer auf festgelegten Formaten. Diese können unter „Format Library“ definiert und bearbeitet werden. Ein Import von Masken- und Formatdefinitionen ist ebenfalls möglich. Für die Datenmaskierung ist zusätzlich zu Grid Control die Lizenzierung des Data Masking Pack erforderlich. Datenmaskierung steht ab Grid Control Release 10.2.0.4.0 zur Verfügung und kann auf Datenbanken ab Version 9i, Release 2, Enterprise Edition durchgeführt werden. Glossar SCN System Change Number. Eine Oracle-interne Nummer, die für jeden internen Befehl inkrementiert wird. Fazit SPFILE Server Parameter File. Weiterentwicklung der traditionellen Datenbankinitialisierungsdatei init<oracle_sid.ora>. Ein SPFILE ermöglicht die persistente Speicherung von zur Laufzeit an den Datenbankinitialisierungsparametern vorgenommenen Änderungen, so dass diese auch nach einem Neustart erhalten bleiben. RMAN Recovery Manager. Oracles Werkzeug zur Sicherung und Wiederherstellung von Datenbanken (Backup, Restore, Recovery und Konvertierung). Grid Control stellt ein mächtiges aber auch sehr komplexes Werkzeug für die Administration von Datenbanken dar. Die integrierte Hilfe kann gut bei der Einarbeitung unterstützen, ersetzt jedoch keinesfalls das Know-how eines erfahrenen Datenbankadministrators. Die verfügbaren Funktionalitäten sind sehr umfangreich und dürften nur wenige Wünsche offen lassen. Allerdings sollte Oracle die Übersetzung der Link-Bezeichnungen in Zukunft deutlich verbessern, da diese teilweise doch recht missverständlich und in Abhängigkeit von der verwendeten Grid Control Version und der installierten Software unterschiedlich sind. Links ► [1] Oracle Doku aus Metalink: (Zugriff nur für registrierte User) • • Note 412431.1: Oracle Enterprise Manager 10g Grid Control Certification Checker Note 252219.1: Steps to migrate/move a database from non-ASM to ASM and vice-versa ► [2] Dokumentation zum Oracle Enterprise Manager Grid Control: http://otn.oracle.com ► [3] Artikelreihe Oracle RAC: http://www.ordix.de/ORDIXNews/artikelreihen.html#oracle_rac Diese Reihe wird in einer der nächsten ORDIX News mit dem Thema „Wartung“ fortgesetzt. Wenn Sie sich einen detaillierteren Einblick in Grid Control verschaffen möchten, empfehlen wir Ihnen unser Seminar „Oracle Grid Control“ [4]. ► [4] ORDIX Seminar „Oracle Grid Control: http://training.ordix.de/seminar.php?nr=552 Wilhelm Breßer ([email protected]). 50 ORDIX News 3/2008 Aktuell 6 Vorträge und 1 Schulungstag von ORDIX auf der DOAG Konferenz 2008 ORDIX Spezialisten präsentieren geballtes Oracle Know-how Seit 20 Jahren ist die Deutsche Oracle Anwenderkonferenz die Know-how-Plattform der deutschsprachigen Oracle Community. Mit neuem Namen und neuem Konzept startet die “DOAG Konferenz + Ausstellung 2008” im Dezember in Nürnberg nun erstmalig 3-tägig durch. Auch ORDIX schickt wieder seine Oracle Spezialisten ins Rennen ... 6 Mal geballtes Oracle Know-how Das CongressCenter Nürnberg Ost erwartet Anfang Dezember wieder mehrere tausend Oracle-Anwender, die sich in mehr als 250 Fachvorträgen über neueste Trends, Produkte und Technologien im Oracle-Umfeld informieren möchten. ORDIX stellt auf der begleitenden DOAG Ausstellung und in 6 hochkarätigen Vorträgen seine Leistungen im Oracle-Umfeld vor: • • Compression - Anwendungsmöglichkeiten und Praxiseinsatz Referent: Klaus Reimers, ORDIX AG, Köln SQL Performance auf RAC Piraten des Interconnects Referent: Martin Hoermann, ORDIX AG, Münster • Oracle Audit Vault - das zentrale Data Warehouse für Audit Daten Referentin: Kathleen Hock, ORDIX AG, Wiesbaden • PL/SQL Web-Services mit Oracle 11g Referent: Markus Fiegler, ORDIX AG, Paderborn • Sicherheitsaspekte in PL/SQL Referentin: Beate Künneke, ORDIX AG, Paderborn • Der RAC “Overhead” - Möglichkeiten und Grenzen Referent: Guido Saxler, ORDIX AG, Köln Kommen Sie zum ORDIX Stand und diskutieren Sie Ihre Oracle Themen mit unseren Oracle Spezialisten. Schulungstag Direkt im Anschluss an die Konferenz bietet die DOAG am 4. Dezember 2008 den DOAG Schulungstag an. In diesem Rahmen präsentiert ORDIX das Seminar Hochverfügbarkeit mit Physical Data Guard als Kompaktkurs. Die Hochverfügbarkeit von Daten wird heute zunehmend wichtiger und die Forderung nach 7x24 Stunden Verfügbarkeit steigt. Seit der Version 7.3 bietet Oracle die physikalische Standby-Datenbank an, die mit Oracle 9 zu Data Guard weiterentwickelt wurde. Wer sich für weiterführende Inhalte zu den Vortrags- oder den Schulungsthemen interessiert, für den lohnt sich ein Blick auf die Bandbreite an Oracle Seminaren im ORDIX Trainingsshop unter http://training.ordix.de. ORDIX News 3/2008 51 Wir lieben Projektmanagement! Ein starkes Team für zielsicher gesteuerte Projekte Professionelles Projektmanagement und hohe Fachkompetenz sind entscheidende Erfolgsfaktoren für ein optimales Projektergebnis. Für unsere Kunden übernehmen wir gesamtverantwortlich die Projektleitung oder unterstützen Ihre Projektmanager durch gezieltes Coaching. Wir identifizieren uns mit den Projektzielen unserer Kunden und übernehmen nachhaltig Verantwortung in den Projekten - von der Initialisierung und Planung über die Durchführung bis hin zur Überführung in den Betrieb. Weitere Informationen finden Sie im Internet unter http://www.ordix.de. Für ein persönliches Gespräch wenden Sie sich an Frau Jana Kreschel: [email protected]