SOAP Web-Services mit PHP 5

Werbung
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]
Herunterladen