ORDIX News Das IT-Magazin der ORDIX AG Ausgabe 1/2002 Java Servlets - noch ein weiteres Konzept? Die vereinfachte Entwicklung von Web-Anwendungen Service Reporting: Selbstdarstellung der IT-Abteilung Dynamische PDF-Dateien mit PHP erstellen Oracle Tuning mit Statspack Der Nachfolger von utlbstat/utlestat EDITORIAL • ORDIX NEWS • Paderborn, März 2002 €: Jetzt ist er da Alle haben auf ihn gewartet. Wirklich alle? Jetzt ist er jedenfalls da, der EURO. Und, obwohl der Umtausch und die Gewöhnung an das neue Geld schneller gingen, als viele erwartet haben: glücklich ist Otto-Normalverbraucher nicht so richtig. Das „EURO-Glättungsgesetz“ haben so einige anscheinend missverstanden bzw. sehr zu ihren Gunsten ausgelegt. Nachdem die ersten Münzen auseinandergefallen waren und man herausgefunden hatte, dass die Preise zwar meistens niedriger waren als bisher, aber selten nur halb so hoch, fühlen sich heute viele betrogen. Ein paar Chefökonomen von Banken laufen deshalb auch schon herum und rufen zum Boykott einiger Branchen auf. Dabei vergessen sie, dass ein Boykott zu Zeiten einer Rezession - oder vorsichtiger ausgedrückt: einer rückläufigen Konjunktur - sicherlich nicht sinnvoll ist. Ganz zu schweigen davon, dass gerade auch die Banken ihre Preise im Zuge des „EURO-Glättungsgesetzes“ kräftig nach oben bewegt haben, nur eben rechtzeitig - nämlich weit vor dem 1.1.2002. Da kommt einem Normalbürger doch glattweg in den Sinn: Wenn die EU unseren Finanzminister rügt, weil er zu wenig spart, bekommen wir dann die D-Mark zurück? Wenn das aber noch nicht ausreicht, sollten wir unbedingt unseren Möchtegern-Bundeskanzler aus dem schönen Amigo- ... Entschuldigung Bayernland wählen, denn der will ja noch mehr Schulden machen. Dann klappt es vielleicht ganz sicher mit der D-Mark?!? Im Zuge der Maßnahme, wieder mehr Schulden zu machen, ergeben sich gegebenenfalls noch mehr Vorteile. Mehr Schulden bedeuten ja, dass mehr Zinsen gezahlt werden müssen. Vielleicht lassen sich dann auch die Banken erweichen und senken ihre Gebühren wieder. Das mit der D-Mark und den Gebühren sind aber nur Träume. Das mit dem neuen Bundeskanzler eher weniger. Vor uns braucht sich keiner zu fürchten: Weder unsere Dienstleistungspreise noch andere Leistungen wurden weder frühzeitig noch jetzt zur Umstellung erhöht. Die ORDIX News ist für Sie auch weiterhin kostenlos und beinhaltet auch dieses Mal wieder einige interessante Themen aus den Bereichen Java, Oracle (u. a. Tuning), Informix (weniger technisch - eher zukunftsorientiert), SAN und System Management. Sollte das nicht ausreichend für Sie sein, stehen wir Ihnen gerne mit Rede und Antwort auf der CeBit, die uns auch zu unserem Titelbild animiert hat, zur Verfügung. Viel Spaß beim Lesen wünscht Ausgabe 1/2002 3 • ORDIX NEWS • STANDARDS Inhalt Ausgabe 1/2002 Standards 0 3 ....Editorial 0 4 ....Inhalt 1 7 ....Impressum Java 0 5 ....Java Servlets - noch ein weiteres Konzept? Die Entwicklung einer Web-Anwendung kann sehr aufwändig sein. Mit Java Servlets geht es auch einfacher. Systeme & Datenbanken 0 8 ....Tuning mit Statspack Mit Statspack bietet Oracle ab der Version 8.1.6 ein Werkzeug zur detaillierten Performanceanalyse einer Oracle-Datenbank. Als Nachfolger von utlbstat/utlestat bietet Statspack zahlreiche Vorteile. 3 0 ....Oracle Packages Teil VII: Debugging von PL/SQL mit DBMS_DEBUG Hilfreich beim Entwickeln von Stored Procedures: Die Palette an nützlichen Packages scheint kein Ende zu nehmen ... 1 8 ....¿Habla usted español? Immer häufiger müssen Anwendungen für den internationalen Einsatz vorbereitet werden. Java unterstützt den Prozess mit einem umfangreichen Funktionspaket. 4 1.... Informix: Fragen an die Zukunft Was tun, wenn man Informix als Datenbanksystem nutzt? Wichtige Fragen, bevor Sie sich entscheiden, zu migrieren. 3 8 ....Entwurfsmuster Teil II: Implementierung von Entwurfsmustern Wie und wann lassen sich Entwurfsmuster in der Praxis einsetzen? Codefragmente, Strukturdiagramme und Beschreibungen bringen „Licht ins Dunkel“. Systeme & Netze System Management 1 6 ....Neue Funktionen in DashBoard 6.4 Wir beschreiben die neuen Funktionen zur Messung des Antwortzeitverhaltens. 2 6 ....Service Reporting: Selbstdarstellung der IT-Abteilung Projekterfahrungen mit den Einsatzmöglichkeiten und nötigen Voraussetzungen. Aktuell 1 5 ....Gute Resonanz auf der Product- & Trend Show 2002 Highlights und News von der diesjährigen Fujitsu Siemens Computers Messe in Paderborn. 2 5 ....ORDIX auf der CeBIT in Hannover Besuchen Sie uns auf dem BMC-Stand in Halle 3 Stand C45 oder auf dem Oracle-Partnerstand der DOAG in Halle 4 Stand A58. Wir stellen verschiedenes zu BMC PATROL sowie zu den Themen "Performanceanalysen und Tuning von OracleDatenbanken" und "Informix/Oracle Migration" vor. 4 2 2.... Dynamische PDF-Dateien mit PHP erstellen Statische PDF-Dokumente waren gestern: Heute gibt es dynamische PDFs - doch zu welchem Preis? PHP - inzwischen ein häufig genutztes Werkzeug zur Programmierung von Web-Applikationen - bietet diese Möglichkeit. 2 8 ....Management von Mailinglisten mit Majordomo E-Mail-Adresslisten ermöglichen Mailingaktionen und Datenpflege ohne großen Zeit- und Administrations-Aufwand. 3 4 ....SAN-Technik Die wichtigsten Begriffe für Einsteiger und Fortgeschrittene zusammengefasst: Grundlagen-Wissen zur „Fibre Channel“-Technik. Systeme & Applikationen 2 1 ....Neues von der R/3-Überwachung Die neue Version der PATROL for R/3 Suite bietet jetzt u. a. eine erleichterte Anbindung an die PATROL Konsole und erweiterte Möglichkeiten der Reporterstellung. Aus- & Weiterbildung 4 2 ....Seminarübersicht Preise, Termine ... bis Juni 2002. Ausgabe 1/2002 • ORDIX NEWS • JAVA Java Servlets noch ein weiteres Konzept? Möchte man eine Web-Anwendung implementieren, so stehen einem mittlerweile diverse Konzepte und Techniken zur Verfügung. Bei näherem Hinsehen entdeckt man aber, dass es sich dabei oft um zwar mächtige, jedoch proprietäre Lösungen handelt, die z. B. nur unter Verwendung eines bestimmten Web- oder Applikationsservers nutzbar sind. Greift man dagegen auf altbewährte Konzepte wie z. B. das CGI zurück, so bleiben eventuell neue Techniken und deren Vorteile auf der Strecke. Die Folge ist nicht selten ein höherer Implementierungsaufwand, um den heutigen Anforderungen gerecht zu werden. Genau hier setzt der von Sun ins Leben gerufene Java Community Process (JCP) mit seiner ServletSpezifikation an. Servlets sind serverseitige Komponenten, die in Java geschrieben sind und den Kern einer Web-Anwendung bilden. Im einfachsten Fall besteht eine WebAnwendung aus einem einzigen Servlet, welches mit einer URL assoziiert ist und auf Anforderung eine Web-Seite dynamisch generiert. Im Normalfall besteht eine Web-Anwendung dann eher aus einer Menge von Servlets, statischen Web-Seiten und weiteren Ressourcen (z. B. einer Datenbank), die in einem gemeinsamen Kontext stehen. Um die Implementierung von Servlets zu vereinfachen und dem Entwickler die Möglichkeit zu geben, sich nur auf das Wesentliche zu konzentrieren, hat JCP einen bestimmten Weg beschritten. Wie im Java-Umfeld üblich, gibt es ein Application Programming Interface (API). Im Servlet API spiegeln sich die Anforderungen an eine moderne Web-Anwendung wider. Ein Teil des API ist generisch, d. h. unabhängig von einem bestimmten Protokoll, implementiert. So gibt es beispielsweise die Klasse javax.servlet.GenericServlet, die ein protokollunabhängiges Servlet definiert. Solche Klassen können Ausgabe 1/2002 zur Implementierung eigener protokollabhängiger Klassen und Interfaces benutzt werden. Das Hypertext Transfer Protocoll (HTTP) wird von der API als einziges Protokoll in Form von fertig implementierten Klassen und Interfaces unterstützt. Um ein HTTP-Servlet zu schreiben, muss der Entwickler nicht mehr tun, als die abstrakte Klasse javax.servlet.http.HttpServlet abzuleiten und die gewünschten Methoden zu überschreiben. Auch die üblichen Aufgaben, wie z. B. die Dekodierung von Übergabeparametern, werden von der API übernommen. Abb. 1 zeigt den Sourcecode eines einfachen package de.ordix.servlet; import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class DateServlet extends HttpServlet{ public void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOExeption{ String title=“Datumsservlet“; // MIME-Typ setzen response.setContentType(„text/html“); // HTML-Seite dynamisch schreiben PrintWriter out=response.getWriter(); out.println(„<HTML><HEAD><TITLE>“); out.println(title); out.println(„</TITLE></HEAD><BODY>“); out.println(„<H1>“ + title + „</H1>“); out.println(„<P>Heute ist der „+(new Date()).toString()); out.println(„</BODY></HTML>“); out.close(); } } Abb. 1: Sourcecode des Beispiel-Servlets. 5 • ORDIX NEWS • Servlets, das eine HTML-Seite mit dem aktuellen Datum generiert. Ist das Alles? Die Sourcecodelänge lässt vermuten, dass viele elementare Aktionen (Instanziierung und Aufruf des Servlets, Übermittlung der Anfrage und der Antwort, zur Verfügungstellung von Laufzeitinformationen usw.) nicht von dem Servlet selbst durchgeführt werden. Dafür ist, wie es die Spezifikation verlangt, ein Servlet-Container verantwortlich. Dieser stellt für ein Servlet die Laufzeitumgebung dar. Ein Servlet-Container bietet Kommunikationsdienste an, über die Anfragen und Antworten übermittelt werden, dekodiert MIME-basierte Anfragen und kodiert MIMEbasierte Antworten. Zusätzlich beinhaltet und verwaltet er Servlets während ihrer Lebensspanne. Technisch gesehen kann ein Servlet-Container eine eigenständige Anwendung, ein Teil eines Web- oder Applikationsservers oder ein Add-on sein. Die Realisierung überlässt Sun den Drittherstellern. Der Vorteil für den Entwickler ist die Unabhängigkeit von einem bestimmten Servlet-Container. Solange sich ein Servlet-Container an die Spezifikation hält, kann er jedes Servlet aufnehmen und ausführen. Die Anzahl der Servlet-Container, die übrigens selbst nicht in Java implementiert sein müssen, wächst ständig. Hier hat man inzwischen eine recht große Auswahl. In der Entwicklungs- und Testphase lassen sich deshalb z. B. kleine, lokal laufende und eventuell kostenlose Servlet-Container verwenden. Im Wirkbetrieb sollte man dagegen auf einen großen und performanten Servlet-Container setzen. Servlet Kontext Ein Servlet läuft immer in einem Servlet-Kontext ab. Dieser Kontext definiert die Sichtweise eines Servlets auf die Web-Anwendung, innerhalb der es ausgeführt wird. Über diesen Kontext kann das Servlet auf Ressourcen, wie z. B. andere Servlets zugreifen oder Parameter setzen, auf die andere Servlets im gleichen Kontext zugreifen können. Session Kontext Neben einem Servlet-Kontext definiert die Spezifikation auch einen Session-Kontext. Über diesen Kon- 6 JAVA text lassen sich mehrere Anfragen eines Clients logisch einer Session zuordnen. Im Falle des zustandslosen HTTP ist das wichtig, da es ansonsten keine Möglichkeit gibt, zwei aufeinanderfolgende Anfragen eines Clients als „zusammengehörig“ zu erkennen. Anwendungszustände wie „Benutzer authentifiziert“ oder „drei Bücher vom Kunden xyz im Warenkorb“ könnten deshalb nicht realisiert werden. Aus diesem Grund definiert die Spezifikation das Interface HttpSession. Dieses erlaubt dem Servlet-Container, diverse Möglichkeiten zur Verfolgung einer Session zu implementieren, ohne dass sich der Entwickler mit unterschiedlichen Implementierungsdetails auseinandersetzen muss. Die zugrundeliegenden Techniken können auf Cookies, URL Rewriting oder SSL Sessions beruhen. Darüber hinaus können Attribute an eine Session gekoppelt werden, die für alle in demselben Servlet-Kontext laufenden Servlets sichtbar sind. Einige der weiteren Möglichkeiten sind das Setzen eines Session Timeouts oder die Abfrage des Zeitpunktes des letzten Clientzugriffs. Deployment Descriptors Um eine aus Servlets aufgebaute Web-Anwendung in einem ServletContainer zu installieren, muss eine Art „Ausführanweisung“ i n XML erstellt werden. Dieser Deployment Descriptor teilt dem Servlet-Container mit, aus welchen Servlets die Web-Anwendung besteht, welche Initialisierungsparameter verwendet werden sollen oder welche Sicherheitseinstellungen zu benutzen sind. Ein wichtiger Bestandteil des Deployment Descriptors ist auch die Assoziation einer URL mit der Web-Anwendung oder einer stati- Ausgabe 1/2002 • ORDIX NEWS • JAVA <!DOCTYPE web-app PUBLIC „-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN“ „http://java.sun.com/j2ee/dtds/web-app_2_2.dtd“> <web-app> <!— General description of your web application —> <display-name>Datumsanwendung</display-name> <description> Diese Anwendung generiert eine HTML-Seite mit dem aktuellen Datum als Inhalt. </description> <servlet> <servlet-name>DateServlet</servlet-name> <servlet-class> de.ordix.servlet.DateServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>DateServlet</servlet-name> <url-pattern>/Date</url-pattern> </servlet-mapping> <session-config> <session-timeout>15</session-timeout> </session-config> </web-app> Abb. 2: Deployment Descriptor des Beispiel-Servlets. schen HTML-Startseite. Abb. 2 zeigt einen sehr einfachen Deployment Descriptor für das in Abb. 1 vorgestellte Servlet. Der Deployment Descriptor, der in einer Datei mit dem Namen web.xml gespeichert wird, muss an einer bestimmten Stelle in einer von der Spezifikation festgelegten Verzeichnisstruk tur abgelegt werden. Diese beinhaltet auch das Verzeichnis lib, in das Bibliotheken und Java-Klassen abgelegt werden müssen, auf die ein Servlet zur Laufzeit zugreifen will. Ein Beispiel hierfür sind JDBC-Treiber. Der CLASSPATH wird von dem Servlet-Container automatisch um Einträge aus diesem Verzeichnis erweitert. Und was bringt’s? Welche Vorteile hat nun der Einsatz von Servlets gegenüber dem Ausgabe 1/2002 Einsatz von CGI-Skripten? Zum einen wird Java als moderne, objektorientierte und plattformunabhängige Programmiersprache eingesetzt. Damit hat der Entwickler auch Zugriff auf das vollständige Java API. Zum anderen sind Servlets im Durchschnitt schneller als CGI-Skripte, da sie ein anderes Prozessmodell einsetzen und nicht für jede Anfrage neu gestartet werden müssen. Das FastCGI bleibt bei dieser Betrachtung außen vor. Weitere Vorteile ergeben sich aus den Konzepten, die der Servlet-Spezifikation zugrunde liegen. Diese greift dieser Artikel jedoch aus Platzgründen nicht weiter auf. Auf jeden Fall lohnt sich für den Entwickler von WebAnwendungen ein detaillierter Blick auf das Thema „Java Servlets“. Nicht ohne Grund wächst die Anzahl servletbasierter Web-Anwendungen ständig. Auch ORDIX beschäftigt sich mit diesem Thema in diversen Projekten und vermittelt das Know-how u. a. in dem Seminar “JSP und Servlet Programmierung mit Tomcat“. Christoph Borowski ([email protected]). 7 • ORDIX NEWS • SYSTEME & DATENBANKEN Tuning mit Statspack Mit Statspack liefert Oracle ein Werkzeug zur detaillierten Analyse von Datenbanken. Im Gegensatz zu klassischen Werkzeugen wie dem Tuning Pack des Enterprise Managers, dem BMC SQL-Explorer oder den Quest Werkzeugen liefert Statspack große Mengen an Messpunkten, die vom Datenbankadministrator selbst analysiert und interpretiert werden müssen. Das klassische SQL-Tuning wird mit Statspack nicht betrieben. Wie lassen sich in einer großen Datenbank, auf der zahlreiche Benutzer arbeiten und auf der nachts eine Stapelverarbeitung stattfindet, Schwachstellen aufdecken? Wie können aus den gesammelten Werten Zeitreihenanalysen bereitgestellt werden? Wie können diese Daten für Managementpräsentationen aufbereitet werden? Diese Fragen beantwortet Statspack mit seiner detaillierten Serveranalyse. Am Beispiel von heißen Datenbankblöcken wird aufgezeigt, wie die Performance von Datenbanken massiv verbessert werden kann. Stellen wir uns eine einfache Tabelle vor, in die sehr viele Transaktionen parallel Datensätze einfügen. Nach der Optimierung des INSERT-Befehls (Array Verarbeitung) und der Allokation von ausreichend Speicherplatz, sollte der Server eigentlich effizient arbeiten. Storage Parameter Transaktionen pro Sekunde Faktor 243 1522 100% 626% Standard Tabelle Freelists + Freelist Groups Abb. 1: Auswirkungen von heißen DB-Blöcken. Aufgrund von massiven Wartezuständen lässt sich die Datenbank aber nur sehr schlecht auslasten. Es ist trotz oder gerade wegen der einfachen Verarbeitungslogik nicht skalierbar. Abb. 1 zeigt, wie mit Hilfe der Storage Parameter Freelists und Freelist Groups eine Verbesserung der Performance auf über 600 Prozent erreicht wird. Wie solche Verbesserungen mit Statspack zu erreichen sind, werden wir im Folgenden erläutern. Heiße Datenbankblöcke Greift eine Transaktion verändernd auf einen Datenbankblock zu, so muss dieser für die Dauer der Verarbeitung geschützt sein. Dieser Schutz ist notwendig bei einem INSERT, einem DELETE oder einem UPDATE. Neben der Veränderung der eigentlichen Daten kann es zu einer Blockreorganisation, einer Veränderung der Freispeicherlisten oder dem Hinzu- 8 fügen eines Slots in der Interested Transaction List kommen. Diese Veränderungen verzögern die Freigabe des Blockes dann zusätzlich. Falls nun eine Transaktion T1 eine Veränderung des Blocks 4711 vornimmt und einen kurzen Augenblick später eine Transaktion T2 auf diesen Block ebenfalls zugreifen möchte, muss die Transaktion T2 warten, bis die Transaktion T1 diesen Block wieder freigibt. Die Transaktion T2 löst nach dem missglückten Zugriffsversuch das Ereignis buffer busy waits aus. Auf einer Mehr-CPU-Maschine beginnt die Transaktion mit dem sogenannten „Spinning“, auf einer EinCPU-Maschine legt sich die Transaktion sofort schlafen. Im ersten Fall wird so aktiv CPU-Zeit verbraucht. Auch im zweiten Fall erzeugt das Auslagern des Prozesses eine höhere Systemlast. In beiden Fällen erhöht sich die Ausführungszeit der zweiten Transaktion. Fügen fünf Transaktionen parallel Datensätze am „Ende“ einer Tabelle ein, so kommt es zu den in Abb. 2 dargestellten Wartezuständen. Eine Transaktion nach der anderen muss auf die Freigabe des gewünschten Blockes warten. Dabei ist die Einhaltung einer Reihenfolge nicht gewährleistet. Bei einer solchen Konstellation gibt es drei Hinweise, die in den Serverstatistiken dieses Problem aufzeigen: Ausgabe 1/2002 SYSTEME & DATENBANKEN • ORDIX NEWS • dann mit sehr großer Wahrscheinlichkeit die heißen Blöcke. Eine detaillierte Beschreibung dieses Vorgehens würde allerdings den Rahmen dieses Artikels sprengen, kann man aber beispielsweise beim Besuch unseres Seminars „Oracle Tuning und Monitoring“ erfahren. Nachdem die Tabelle, aus der die heißen Blöcke stammen, identifiziert wurde, müssen Gegenmaßnahmen ergriffen werden. Diese sind abhängig vom Typ der Transaktion: Abb. 2: Buffer Busy Waits. 1. 2. 3. Das Ereignis buffer busy waits nimmt einen signifikanten Wert in der Spalte waits an. Bei Problemen ist dieses Ereignis im Statspack Report in der Regel unter den Top 5 Ereignissen zu finden. In den Latch Statistiken hat der Latch cache buffers chains in der Spalte Misses eine hohe Anzahl. In dem Block Wartestatistiken gibt es eine hohe Anzahl in der Spalte waits beim Blocktyp data block. Diese einzelnen Bereiche im Statspack Report werden im weiteren Verlauf des Artikels ausführlich dargestellt. Wenn anhand der Serverstatistiken festgestellt wird, dass in der SGA heiße Datenbankblöcke vorhanden sind, müssen diese im nächsten Schritt identifiziert werden. Hierzu muss der Latch ausfindig gemacht werden, bei dem die Anzahl in der Spalte sleeps innerhalb eines kurzen Zeitraums steigt. Weiterhin müssen die Blöcke selektiert werden, die zu Beginn und am Ende des kurzen Zeitraums von diesem Latch abgedeckt werden. Dies sind Ausgabe 1/2002 - Paralleles Einfügen: Erhöhen der Freispeicherlisten und der Freispeicherlisten-Gruppen. Freispeicherlisten-Gruppen können auch auf nicht OPS Systemen sinnvoll verwendet werden. Eine Erhöhung des INITRANS-Wertes kann eine weitere Verbesserung ergeben. - Paralleles Ändern: Folgt die Änderung unmittelbar nach dem Einfügen von Datensätzen, sind die zuvor genannten Maßnahmen durchzuführen. Sonst muss der Wert PCTFREE erhöht werden. Bei kleinen Tabellen kann es unter Umständen Sinn machen, den Wert auf 99 Prozent einzustellen. Der Wert INITRANS sollte auf jeden Fall erhöht werden. - Durch mehr Hash Buckets oder mehr Latch Children sollte sich das Problem heißer Blöcke ebenfalls reduzieren lassen. Diese Maßnahmen sollten allerdings nur dann gewählt werden, wenn alle anderen Maßnahmen nicht erfolgreich waren. Durch alle Maßnahmen soll erreicht werden, dass die Transaktionen nun auf unterschiedliche Blöcke Abb. 3: Beseitigung von Buffer Busy Waits. 9 • ORDIX NEWS • SYSTEME & DATENBANKEN zugreifen. Gelingt dies, kann - unter den beschriebenen Umständen - die Performance der gesamten Datenbank massiv verbessert werden. Statspack Grundlagen Die Installation von Statspack gestaltet sich denkbar einfach. Über das Skript ./rdmbs/admin/ spcreate.sql im ORACLE_HOME Verzeichnis wird der Benutzer perfstat, sowie das PL/SQL Paket statspack angelegt. Anschließend kann der Benutzer sogenannte Schnappschüsse über den Aufruf von statspack.snap(i_snap_level => 0); erzeugen. Ein Schnappschuss enthält alle wesentlichen aktuellen Werte über Statistiken, Events, I/ O-Zeiten, Parametereinstellungen und vieles mehr. Abb. 4: Erzeugung einzelner Schnappschüsse. Nun kommt der eigentliche Trick. Die Differenz eines Statistikwertes - oder eines beliebigen anderen Wertes - zwischen zwei Messpunkten stellt die für diesen Zeitraum geleistete Arbeit des Servers dar. Da alle Schnappschüsse in der Datenbank gespeichert werden, muss der Datenbankadministrator erst einmal nichts anderes tun, als regelmäßig Schnappschüsse zu erzeugen. Ein Intervall von 10 Minuten ermöglicht dabei das Auffinden von Spitzenwerten und ist gleichzeitig nicht zu CPU-intensiv (siehe Abb. 4). Zum Erzeugen der Messpunkte ist unter UNIX ein Cronjob die beste Wahl. Die oft empfohlene Variante von DBMS_JOB führt zu unregelmäßigen Messintervallen. STATSPACK report for DB Name DB Id DB2 1711619 Instance Inst Num DB2 Abb. 5: Report Header. 10 1 Release OPS Host 8.1.6.3.0 NO jupiter Zu jedem beliebigen Zeitpunkt kann der Administrator nun für jeden Zeitraum in der Vergangenheit einen Statistikreport generieren. Hierzu gibt er lediglich die Schnappschuss-ID seines gewünschten Startzeitpunktes und die Schnappschuss-ID des Endzeitpunktes an. Die Erstellung eines Reports erfolgt mit Hilfe des Skripts ORACLE_HOME/rdbms/admin/ spreport.sql. Das Ergebnis ist eine Datei mit dem Namen sp_47_48.lst, wobei 47 und 48 hier für die IDs des Start- und Endzeitpunktes des Reports stehen. Diese Datei enthält den Statistikreport. Der Report ist sehr umfangreich. Aus diesem Grund erfolgt an dieser Stelle eine selektierte Auswahl verschiedener Bereiche. Der Report beginnt mit einem Kopf, der bereits durch die Datenbank-ID andeutet, dass Statistiken für alle Datenbanken eines Unternehmens in einem gemeinsamen Datenpool gehalten werden können (siehe Abb. 5). Das Lastprofil Das Lastprofil gibt einen Überblick über die Datenbanklast. Sollen Reports unterschiedlicher Datenbanken oder unterschiedliche Reports einer Datenbank verglichen werden, so zeigt das Mengenvolumen im Lastprofil, ob ein Vergleich sinnvoll ist. Die Angaben erfolgen pro Sekunde und pro Transaktion. Die Anzahl der Transaktionen wird gemessen als Differenz der Anzahl der user commits aus v$sysstat. Beim Lastprofil handelt es sich um Systemstatistiken aus v$system (siehe Abb. 6). Die Darstellung der Statistiken hat sich gegenüber utlbstat/ utlestat nicht verändert. In diesem Abschnitt finden sich alle Oracle Statistiken, deren Ausgabe 1/2002 • ORDIX NEWS • SYSTEME & DATENBANKEN Per Second Per Transaction 2,310,656.32 57,151.72 12,857.09 2,858.28 6,065.74 1,939.00 182.01 188.13 2.55 435.25 40.07 57,660.70 1,426.18 320.84 71.33 151.37 48.39 4.54 4.69 0.06 10.86 dies ein nicht zu übersehender Hinweis auf ein Performance Problem. Wer nun nachrechnet und sich wundert, sei darauf hingewiesen, dass bei Mehr-CPU-Maschinen die Wartezeiten durchRows per Sort: 26.28 aus größer als Pct Blocks changed / Read: 22.50 die Messzeit Recursive Call Pct: 96.95 sein können. Mit Rollback / transaction Pct: 6.39 Statspack wird Abb. 6: Lastprofil im Überblick. der DBA bei der Analyse der ErWerte zwischen den beiden eignisse besser unterstützt als mit der Variante Schnappschüssen verändert wurStatistic Total per Second den (Abb. 7). Redo size: Logical reads: Block changes: Physical reads direct: Physical reads: Physical writes: User calls: Parses: Hard parses: Sorts: Transactions: Statistiken sind für sich gesehen weder gut noch schlecht. Erst der Vergleich mit anderen Reports zeigt, wie sich die Systemlast verändert hat. Statistiken stellen ein wesentliches Kriterium zur Analyse des Datenbankprofils dar. Ereignisse (Events) Neues hingegen findet sich im Bereich Ereignisse. Jeder Wartezustand in der Datenbank wird einem dedizierten Ereignis zugeordnet. Mit Hilfe dieser Ereignisse ist es möglich, genau herauszufinden, wie lange die Datenbankprozesse auf welche Ereignisse gewartet haben. Vielen Datenbank-Administratoren (DBAs) fällt es schwer, zwischen sogenannten NULL oder IDLE Ereignissen und „echten“ Ereignissen zu unterscheiden. Wenn beispielsweise der Prozess pmon in 10 Minuten 559 Sekunden wartet, ist dies vollkommen unproblematisch. Wenn hingegen im gleichen Zeitraum mehr als 1200 Sekunden für das Ereignis buffer busy waits verbraucht wurden, ist Ausgabe 1/2002 CPU used by this session CPU used when call started CR blocks created DBWR buffers scanned 312,534 400,740 39,412 156,140 per Trans 1,041.8 1,335.8 131.4 520.5 26.0 33.3 3.3 13.0 Abb. 7: DB-Statistiken. utlbstat/utlestat, da neben der herkömmlichen Liste aller Ereignisse zusätzlich die echten Top 5 Ereignisse aufgeführt werden. Top 5 Wait Events Event buffer busy waits Latch Free db file sequential read direct path read db file scattered read Waits Wait Time (cs) % Total Wt Time 990,529 2,506 83,386 6,839 15,814 89,588 85,177 80,898 56,912 37,693 18.75 17.83 16.93 11.91 7.89 Abb. 8: Beispielliste der „echten“ Top 5 Ereignisse. Die in Abb. 8 aufgeführte Liste gibt schon einen ersten Hinweis auf das Problem heißer Blöcke. Mit 18,75 Prozent der gesamten Wartezeit stehen die buffer busy waits an oberster Stelle. Auch das Ereignis Latch Free ist mit 17,83 Prozent durchaus signifikant. Sollte sich weiter unten im Report herausstellen, dass dies auf den Latch cache buffers chains zurückzuführen ist, verursachen die heißen Blöcke über 36 Prozent der gesamten Wartezustände. 11 • ORDIX NEWS • SYSTEME & DATENBANKEN Class Waits Tot Wait Time (cs) Avg Time (cs) data block undo block undo header segment header 2,288 595 46 295 2,977 138 10 5 1 0 0 0 Abb. 9: Sichtweise aus v$waitstat. Wartezustände nach Blocktypen Die Statistik in Abb. 9 zeigt die Wartezustände auf Oracle Blöcke, differenziert nach der Blockklasse. Die Wartezustände stellen die Differenz der Werte aus dem View v$waitstat zwischen den beiden Schnappschüssen dar. Die Summe aller waits und Get Requests Pct Get Miss Avg Sleeps /Miss Nowait Requests 344,580 43,202,137 2,289,752 0.0 1.8 0.3 0.0 0.0 0.0 0 2,185,969 1,059,417 Latch Name cache buffer handles cache buffers chains cache buffers lru chain insgesamt. Eine Trefferquote unter 95 Prozent muss nicht unbedingt tragisch sein, falls die Anzahl aller Anforderungen insgesamt sehr niedrig ist. Im oben aufgeführten Fall ist die Trefferquote auf dem Latch cache buffers chains mit 98,2 Prozent nicht besonders gut. Durch die Anzahl aller Zugriffe ergibt sich aber ein dramatisches Bild: Wie der Abb. 11 zu entnehmen ist, musste in 779.257 Fällen ein Prozess mit dem Spinning beginnen. Weiterhin musste in 2.960 Fällen der Prozess ausPct Nowait gelagert werden, da Miss der Zugriff am Ende des Spinning immer noch nicht gelang. 0.1 0.3 Die I/O Statistiken beginnen mit einer Zudie Summe der Wartezeit entsprechen in etwa den sammenfassung der Schreib- und Wartezuständen des Ereignisses buffer busy Leselast über alle Tablespaces. waits. Dieser Abschnitt ist also dann und nur dann Eine detaillierte Auflistung pro interessant, wenn buffer busy waits auftreten. Datendatei steht ebenfalls zur Verfügung. Insbesondere über lange Typischerweise stellt die Klasse data block, die Zeiträume lassen sich schleichenKlasse mit den höchsten Wartezuständen dar. de Verschlechterungen der Zugriffszeiten beim Vergleich mit alGet Spin & ten Schnappschüssen auffinRequests Misses Sleeps Sleeps 1-4 den (siehe Abb. 12). Abb. 10: Latch Statistiken prozentual. Latch Name cache buffers chains redo allocation library cache 43,202,137 1,948,006 1,629,193 779,257 50,369 16,647 2,960 85 273 776610/24... 50285/83/... 16444/150... Abb. 11: Latch Statistiken absolut. Latch Statistiken Die Trefferquote auf einem Latch - so wird empfohlen - soll über 99 Prozent liegen (vgl. Abb. 10). Viel wichtiger, neben der reinen Trefferquote, ist aber natürlich die Anzahl der Anforderungen auf einem Latch Tablespace INDEX_01 RBS DATEN_01 Reads Avg Read (ms) Writes Total Waits Avg Wait (ms) 29,568 28,698 20,061 12.7 4.6 13.2 347,211 111,889 53,684 13 638 294 80.8 2.3 0.2 Abb. 12: Tablespace I/O Statistiken. 12 Wie bereits angekündigt, sind dies nur einige ausgewählte Bereiche des Statspack Reports. Eine vollständige Betrachtung würde den Rahmen dieses Artikels sprengen. Der interessierte Leser findet im Literaturverzeichnis am Ende dieses Artikels weitergehende Bücher und Artikel. Statspack Erweiterungen von ORDIX Die ORDIX-Erweiterungen umfassen im Wesentlichen zwei Bereiche. Dies ist zum einen die Behebung von Fehlern im Standardreport und dessen Erweiterung. Zum anderen wurden Ausgabe 1/2002 • ORDIX NEWS • SYSTEME & DATENBANKEN STATSPACK report for DB Name DB Id DB1 Snap ID von - bis 18230 18231 18232 18233 18234 Instance 3661711619 - 18231 18232 18233 18234 18235 DB1 Zeit von - bis 14.05 14.05 14.05 14.05 14.05 22:05-22:10 22:10-22:15 22:15-22:20 22:20-22:25 22:25-22:30 Inst Num 1 Release OPS Host 8.1.6.3.0 NO saturn Buffer Hit Physical reads Logical reads Physical rds. Direct 97.43 92.58 94.33 99.51 99.21 205,550 102,738 53,691 52,824 160,930 8,001,434 1,384,547 946,742 10,820,352 20,275,698 32,851 0 0 0 0 Abb. 13: Lese-Last als Zeitreihe. eine Menge von Skripts zur Zeitreihenanalyse entworfen. Gerade diese zweite Erweiterung schöpft das Potential von Statspack vollständig aus. Da die heißen Blöcke bereits ausführlich behandelt wurden, wird an dieser Stelle Wert auf weitere, spezielle Auswertungen gelegt. Erweiterung des Standardreports Bei der Verwendung von parallelen Abfragen verwendet Oracle sogenannte P h y s i c a l reads Direct . Bei diesen Lesevorgängen werden die Blöcke nicht in den DB-Block Buffer gelesen, sondern direkt in den Private Buffer in der PGA. Im Statspack werden Physical reads Direct nicht überall korrekt berücksichtigt. Daraus ergibt sich eine falsche Berechnung der Buffer Hit Ratio, die teilweise sogar negative Werte annimmt. Zeitreihenanalysen – I/O Statistiken Etwas genauer soll an dieser Stelle auf die Zeitreihenanalysen eingegangen werden. Beispielsweise ist die I/O Statistik eine gute Ausgangsbasis für die Analyse der Systemlast. Wie bereits zuvor erwähnt, berücksichtigt dieser Report auch die Physical reads Direct. Schneller kann der DBA keinen Eindruck davon bekommen, wie hoch die lesende Last seines Datenbanksystems ist und wie gut die Trefferquote ist. Ein Beispiel finden Sie in Abb. 13. Hilfreich ist dieser Report, weil die Buffer Hit Ratio ohne die absolute Anzahl der Physical reads nicht aussagekräftig ist. Selbstverständlich ist es relativ einfach möglich, die Daten auch tabellarisch abzuspeichern. Buffer Hit Ratio % 102 100 98 99,51 99,21 18233 18234 97,43 96 94,33 94 92,58 92 90 Im von ORDIX erweiterten Statspack Report wurde dieses Manko behoben. Diese Form von I/O findet an allen Stellen eine entsprechende Berücksichtigung. Eine sehr einfache Änderung besteht in der Erweiterung der Liste der IDLE Events, die in der aktuellen Version von Statspack noch nicht enthalten ist. Ausgabe 1/2002 88 18230 18231 18232 Start ID Abb. 14: Import der Zeitreihen in Excel. Diese Daten können dann, wie in Abb. 14 gezeigt, in Excel importiert und für Managemententscheidungen grafisch aufbereitet werden. Insbesondere bei großen Projekten ist dieser Aspekt besonders wichtig. 13 • ORDIX NEWS • SYSTEME & DATENBANKEN Zeitreihenanalysen – Auswertung einzelner Statistiken Der Statistik Report zeigt die Werte einer einzelnen Statistik für einen Bereich von Schnappschüssen. Nach Eingabe des Namens der Statistik Enter statistic name: table fetch continued row sowie des Schnappschussbereiches erzeugt der Report eine Liste aller Werte für diese Statistik. Abb. 15 zeigt die Statistik table fetch continued row, also die Anzahl aller selektierten chained und migrated rows. Dies ist z. B. sehr hilfreich, um kritische Zeiträume zu finden. Oft treten Probleme - wie hier die chained rows nur zu ganz bestimmten Zeiten auf. Mit der Zeitreihenanalyse kann bei einem konkreten Verdacht schnell für eine sehr große Zeitspanne ein konkreter Statistikwert analysiert werden. Statistic for: table fetch continued row SnapIDs 18230 18231 18232 18233 18234 18235 18236 18237 18238 - Time Rage STATS_VALUE 18231 18232 18233 18234 18235 18236 18237 18238 18239 14.05 14.05 14.05 14.05 14.05 14.05 14.05 14.05 14.05 22:05-22:10 22:10-22:15 22:15-22:20 22:20-22:25 22:25-22:30 22:30-22:35 22:35-22:40 22:40-22:45 22:45-22:50 190229 133 70 104 164 63 70 70 386564 Abb. 15: Statistiken als Zeitreihe. Fazit Mit Statspack steht ein sehr mächtiges Werkzeug zur Serveranalyse zur Verfügung. Folgende Vorteile bringt das Werkzeug mit: - sehr leichte Bedienung höchstmögliche Detaillierungsstufe vergangenheitsbezogen OPS fähig wenig Einfluss auf Performance geringer Speicherbedarf Programmcode steht frei zur Verfügung Mit den aufgezeigten Erweiterungen ist es möglich, in sehr kurzer Zeit die kritischen Phasen eines Tages oder einer Nacht zu identifizieren. Anschließend kann der benötigte Report über diesen Zeitraum 14 Literatur Oracle 8i Internal Services, O’Reilly, Steve Adams, ISBN 1-56592598-X Bewertung: W e r w i r k l i c h w i s s e n möchte, wie Oracle intern funktioniert. Absolut zu empfehlen. High Performance-Tuning with STATSPACK, Oracle Press, Donald K. Burleson, ISBN 0-07213378-3 Bewertung: Guter Überblick, viele Skripts, auch zur Präsentation, nicht sehr tiefgehend. Statspack – Serie, Connie Dialeris and Graham Wood, ORACLE Magazine, September / Oktober 2000 ff. Bewertung: Sehr gute Einführung in die Handhabung und Auswertung von Statspack. nachträglich generiert werden. Dies ist auch noch Wochen später möglich. Da Statspack kostenlos ausgeliefert wird, ist das Preis/ Leistungsverhältnis unschlagbar. Wenn Statspack erst einmal im Einsatz ist, möchte man es nicht mehr missen. Den genannten Vorteilen stehen allerdings auch einige Nachteile gegenüber. Der Anwender muss über ein sehr umfangreiches Datenbankwissen verfügen. Hinweise auf Probleme müssen selbst erarbeitet und analysiert werden. ORDIX bietet die hier vorgestellten Erweiterungen im Zuge von Beratungsleistungen an. Bei Bedarf können wir Ihnen gerne Referenz-Kunden nennen. Die Analyse von Statistiken ist ein großer Bestandteil unserer Oracle Tuning Trainings. Termine zu unseren Seminaren finden Sie auf der letzten Doppelseite dieser ORDIX News oder im Trainings-Shop im Internet unter http://training.ordix.de. Martin Hoermann ([email protected]). Ausgabe 1/2002 • ORDIX NEWS • AKTUELL Gute Resonanz auf der Product- & Trend Show 2002 Einmal im Jahr wird Paderborn für drei Tage zum Zentrum der ITWelt. Sechs Wochen vor der CeBIT findet die inzwischen traditionsreiche Product- & Trend Show von Wincor Nixdorf und Fujitsu Siemens Computers statt. Unter dem Motto „Powering the Information Age“ trafen sich vom 29.31.01.2002 mehr als 14.000 Kunden, Partner und Journalisten in den Welle-Messehallen. ORDIX arbeitet seit den Anfängen des Unternehmens (1990) eng mit beiden Datenbankprodukten und ist seit mehr als 8 Jahren Oracle- und Informix Partner. Gutes Datenbankund Produkt Know-how zahlt sich insbesondere bei Umstellungen aus. Da blickt ORDIX auf einen großen Erfahrungsschatz an diversen Umstellungsprojekten zurück. Dies sind sowohl Umstellungen von Informix auf Oracle als auch umgekehrt. Auch in diesem Jahr wurden die Besucher der Product- & Trend Show mit „heißen“ Show-Einlagen unterhalten. Auf der Insel „Migration2 “ stellten ORDIX und vier weitere Partnerunternehmen ihre unterschiedlichen Beratungsleistungen rund um das Thema Migration vor. Dem Kunden kommt dabei insbesondere die Unabhängigkeit in der Beratung zu gute, da das Systemhaus im Datenbankbereich keine herstellerabhängigen Schwerpunkte setzt und historisch bedingt von jeher „zwei Fraktionen“ im Unternehmen bestehen, die im regen Austausch miteinander konkurrieren. Unter dem Titel „Future Perspectives for Informix User“ beriet ORDIX insbesondere Informix-Anwender zur Frage: Migration (nach Oracle/ DB2/etc.) oder Neuentwicklung? Von der Machbarkeitsanalyse über Konzeption und Realisierung bis hin zur Einführung wurden die strategischen Optionen der Kunden erörtert. Lesen Sie hierzu auch den Artikel „Informix: Fragen an die Zukunft“ auf Seite 41. Zwischen den Fachgesprächen gab es diverse Programmpunkte, wie Werksführungen, Verlosungen und stündliche Show-Einlagen, die immer wieder für Erholung sorgten. Angesichts der mehr als frühlingshaften Temperaturen in der Halle waren allerdings die Cocktails unangefochten „der Renner“. Zukunftsperspektiven für Informix-Anwender veranschaulichten die ORDIX Berater ... Ausgabe 1/2002 ... während sich Zukunftsvisionen ganz anderer Natur - wie dieser Einkaufswagen - zum greifen nahe nebenan präsentierten: Die WincorWorld findet parallel zur Product& Trend Show statt. Sie zeigt Neuigkeiten u. a. im Bereich Banking und Kassensysteme. 15 • ORDIX NEWS • SYSTEM MANAGEMENT Neue Funktionen in DashBoard 6.4 Seit Oktober 2001 ist die neue Version 6.4 des BMC Produktes DashBoard verfügbar. Neben einigen Verbesserungen hat DashBoard in der Version 6.4 neue Funktionen bekommen. Im Folgenden werden die in der neuen Version zur Verfügung stehenden Funktionen zur Messung des Antwortzeitverhaltens (Applikation Response Time/ART) vorgestellt. Diesem Thema kommt neben der Verfügbarkeit im Zusammenhang mit den Service Vereinbarungen (SLA/SLV) eine immer größer werdende Bedeutung zu. In diesem Themengebiet ist der Unternehmensbereich System Management der ORDIX als Ergänzung zum klassischen Monitoring aktiv. 1. Messung des Antwortzeitverhaltens von einem Windows Client aus mittels PATROL EndTo-End Response Time Management (PETERT) 2. Messung des Antwortzeitverhaltens mit einer Probe (Netscout & Sniffer Pro mit ART MIB) Auf dem Windows Client wird die Applikation PETERT installiert, die Benutzer-Requests an den Server sendet und die gemessene Antwortzeit an die PATROL DashBoard-Applikation weitersendet. - - - - - PETERT erlaubt die Aufzeichnung einer Transaktion einer IP-basierenden Client/Server Applikation von einem Windows Client aus. Die Applikation kann diese Transaktion zu bestimmten Zeiten wiederholen, um Antwortzeitverhalten und Verfügbarkeit zu überprüfen. Sie sendet die so gewonnenen Informationen an die DashBoard Applikation zur Auswertung. - - Nimmt das durchschnittliche Antwortzeitverhalten (Differenz zwischen ausgehenden und ankommenden TCP oder UDP Paketen) auf. Ist verfügbar mit den Network Associates Proben Sniffer Pro und Netscout Proben. Entspricht annähernd den tatsächlichen Werten, da die Probe in der Nähe des Servers angebracht werden kann. Sämtliche ART-Funktionalitäten werden unterstützt. Mit dieser Methode liest DashBoard die gesammelte ART-Information der installierten Probe und wertet diese aus. Hierzu sind keine weiteren Agenten auf den Arbeitsstationen erforderlich. 3. Messung des Antwortzeitverhaltens mit dem Cisco Service Assurance Agent (SAA) - DashBoard 6.4 Benutzerschnittstelle mit “Class of Service”-Darstellung. 16 Misst das Antwortzeitverhalten zum Server und gibt diese Daten an die DashBoard-Applikation weiter. Bei Erreichen von Schwellwerten in Kooperation mit dem Cisco-SAA-Response-Time- Ausgabe 1/2002 • ORDIX NEWS • SYSTEM MANAGEMENT - Measurement wird automatisch das Diagnostik Modul gestartet. Sämtliche SAA Möglichkeiten werden unterstützt. Bei SAA-fähigen Cisco Geräten lässt sich mit DashBoard 6.4 der SAA konfigurieren und die damit gesammelten Informationen lassen sich auslesen. Die Metrics liegen mit dieser Methode nahe an den tatsächlichen Werten. DashBoard Funktionalität Mit Hilfe der neuen Funktionen kann man vielfältigen Netzproblemen auf den Grund gehen. Die Long-TermTrend Reports und graphischen Darstellungen helfen dabei. Insbesondere empfiehlt sich DashBoard 6.4 zur Diagnose von ORDIX News Impressum: Herausgeber: ORDIX AG, Aktiengesellschaft für Softwareentwicklung, Beratung, Schulung und Systemintegration, Paderborn Redaktion: Sascia Brinkmann, Helma Jenniches V.i.S.d.P.: Wolfgang Kögler Autoren dieser Ausgabe: - Laufzeitschwankungen nicht ausreichendem Anwortzeitverhalten zu langen Laufzeiten und lokalen Belastungen wie z. B. - Rechnerlast - Paket Input/Output und - Protokoll-Last. Ab Version 6.4 kann in den DashBoard-Diagrammen auch nach „Class of Service“ (COS) unterschieden werden. So ist z. B. folgende Aufteilung möglich: - COS0: SNA Verkehr COS1: ERP COS2: W3 COS4: Mail COS5: FTP usw. Die Schwellwerte, bei deren Erreichen Aktionen ausgelöst werden, lassen sich für jede Service-Klasse separat einstellen. Auch die Trend- und Long-Term-Trend Reports können nach COS unterteilt werden. Das DashBoard Benutzerinterface in unserer Abbildung zeigt die Einteilung der IP-Pakete in die COS-Klassen udp, snmp und default. Zusätzlich existiert nun eine manuelle und automatische Exportmöglichkeit in eine Oracle-Datenbank auf Basis des Common Information Model (CIM). Diese Daten können wiederum für das Service Reporting genutzt werden. Christoph Borowski, Martin Hoermann, Helma Jenniches, Matthias Jung, Wolfgang Kögler, Ralf Korczykowski, Lars Hendrik Korte, Beate Künneke, Mario Möllers, Christian Ramm, Uwe Rübesamen, Markus Schreier, Ingo Vogt Anschrift der Redaktion: Westernmauer 12 - 16 D-33098 Paderborn Fon: 0 52 51 / 10 63 - 0 Fax: 0 52 51 / 10 63 - 99 Druck: Druckerei Reike GmbH, Paderborn Gestaltung/Layout: Sascia Brinkmann Copyright: ORDIX AG. Alle Rechte vorbehalten. Die Zeitschrift ORDIX News hat eine Auflage von 7.500 Exemplaren. Sie wird von der ORDIX AG an ausgesuchte Kunden und an die Mitglieder der GUUG kostenlos verteilt. Außerdem finden Sie die neueste Ausgabe 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. Sie erreichen die Redaktion auch per E-Mail unter [email protected]. Wir freuen uns auf Ihr Feedback. Ralf Korczykowski ([email protected]). Ausgabe 1/2002 17 • ORDIX NEWS • JAVA ¿Habla usted español? ... Do you speak English? ... Sprechen Sie Deutsch? ... Parlez vous français? ... Wird Ihnen die Frage im Urlaub gestellt, schütteln sie den Kopf, lächeln freundlich dazu und jeder versteht es. Im Internet oder in einer Anwendung hilft Kopfschütteln in der Regel nicht weiter. Sie müssen die Frage richtig verstehen, um die richtige Antwort geben zu können. Dieses Problem löst der Entwickler, indem er die benötigten Übersetzungen zur Verfügung stellt. Diese Internationalisierung muss sich nahtlos in den Entwicklungsprozess integrieren. Java unterstützt dies durch eine Vielzahl von Möglichkeiten. Übersicht Java kategorisiert alle Sprachen anhand von drei Identifizierungsmerkmalen: • Das Sprachkürzel gemäß der ISO-369, mit dem die eigentliche Basissprache definiert wird. Beispiele: en (englisch), de (deutsch), fr (französisch), sp (spanisch). • Das Länderkürzel gemäß der ISO-3166, mit dem das Land definiert wird. Länderspezifische Besonderheiten werden hierdurch berücksichtigt. In Amerika beginnt das Datum mit dem Monat, während in England der Tag am Anfang steht. Typische Länderkürzel sind: US (Amerika), GB (Großbritannien), DE (Deutschland), AU (Österreich). • Das optionale Variantenkürzel, mit dem zusätzliche Unterscheidungen verarbeitet werden können. Diese sind frei definierbar und können z. B. eingesetzt werden, um Plattformabhängigkeiten (WIN, MAC, ...) zu verarbeiten oder regionale Besonderheiten zu integrieren. In der Praxis wird man dieses Kürzel aber eher selten einsetzen. Aus diesen Informationen lässt sich für jeden Anwender ein Sprach-Beschreibungs-Objekt „Locale“ erstellen. Java ermittelt hiermit die richtigen Übersetzungen und Darstellungen (Abb.1). Die Möglichkeiten, die Internationalisierung anzuwenden, gliedern sich im Wesentlichen in zwei Funktionsgruppen: Zahlen, Zeit- und Datumsangaben Zur Darstellung dieser Datentypen stehen dem Entwickler verschiedene Methoden zur Verfügung. Hier- 18 bei werden verschiedene Ausgabeformate zur Verfügung gestellt. Beispiel: Datum kurz: 10.01.2002; Datum lang: 10. Januar 2002. Zusätzlich existieren Parser zum Konvertieren von Eingabetexten in die entsprechenden Datentypen. Es werden die verschiedenen Formate unterstützt. Texte Texte können nicht automatisch übersetzt werden. Hier verwendet Java das Substitutionsprinzip. Für alle benötigten Texte wird ein eindeutiger Schlüssel definiert, dem der richtige Text zugeordnet wird. Alle Texte für eine Sprache werden in einer Textdatei abgelegt. Mit einer Methode lassen sich dann die richtigen Übersetzungen für die benötigte „Locale“ abrufen. Zusätzlich existieren Sortiermethoden, die z. B. Umlaute, Sonderzeichen und ähnliches berücksichtigen. Vorgehen Zum Projektstart sollte die Entscheidung getroffen werden, ob mehr als eine Sprache unterstützt werden soll oder nicht. Eine nachträgliche Entscheidung führt immer dazu, dass alle realisierten Modu- Ausgabe 1/2002 JAVA • ORDIX NEWS • le bzgl. der Ein-/Ausgaben überarbeitet werden müssen. Dies bringt nicht nur zusätzlichen Entwicklungsaufwand mit sich, sondern auch zusätzlichen Testaufwand. Unabhängig von dieser Entscheidung sollte man Ein-/Ausgabetexte grundsätzlich nicht im Sourcecode hinterlegen. Als nächstes wird eine Basissprache festgelegt, mit der die Entwicklung beginnt. Dies wird in der Regel Englisch sein. Zusätzliche Sprachen werden erst später eingeführt, wenn sich die Entwicklung gefestigt hat und damit auch klar ist, welche Informationen übersetzt werden müssen. Eine Musterimplementierung wird erstellt, mit der die Anwendung der Internationalisierung definiert wird. Anhand dieser werden alle beteiligten Entwickler geschult. Anschließend beginnt die eigentliche Entwicklung. Nachdem die ersten Masken/Funktionen fertiggestellt sind, werden die benötigten Übersetzungen erstellt. Diese können bei den ohnehin notwendigen Tests dann direkt mit überprüft werden. Implementierung Die eigentliche Implementierung erfolgt in vier Schritten. 1. Schritt: Properties-Dateien Für die Übersetzung von Texten werden Wertepaare Schlüssel = übersetzter Text benötigt. Diese werden für jede Sprache in eine Textdatei abgelegt. Es wird eine Basissprache benötigt, die alle verwendeten Schlüssel enthält. Diese wird in einer Datei ResourceName.properties abgelegt. Der ResourceName ist frei wählbar. Alle weiteren Übersetzungen werden jeweils in einer zusätzlichen Datei gespeichert. Der Name ent- Ausgabe 1/2002 Abb. 1: Ein Dialog in vier verschiedenen Sprachvariationen aufgerufen. Alle Felder sind sprachabhängig. hält neben dem ResourceNamen die zusätzlich benötigten Informationen über die Locale und lautet z. B. ResourceName_en_US.properties. Hierbei ist _en_US die ergänzende Locale-Information. Vorteilhaft ist, dass nicht alle Texte in alle Sprachen übersetzt werden müssen. Java ergänzt fehlende Texte einer Locale aus der Datei für die Sprache bzw. aus der Basissprache. Diese Dateien lassen sich mit einem speziellen Properties-Editor, einem Texteditor oder mit Excel (siehe Abb. 2) erstellen. Wird zur Erstellung ein Texteditor verwendet, muss das Properties-Format berücksichtigt werden. Bei der Erstellung in Excel werden in der ersten Spalte alle Schlüssel gepflegt, in Abb. 2: Excel-Sheet, mit dem die Texte für das Programmbeispiel in Abb. 1 erstellt wurden. 19 • ORDIX NEWS • der 2. Spalte die Texte der Basisübersetzung. Die weiteren Spalten enthalten die gewünschten Übersetzungen. Die Properties-Dateien lassen sich mit Hilfe einer Visual-Basic-Routine erstellen. Der Vorteil dieses Verfahrens ist, dass die eigentlichen Übersetzungen auch von einem Nicht-Entwickler gepflegt werden können. ResourceBundle resourceBundle = ResourceBundle.getBundle (″ ResourceName″ , loc); 2. Schritt: Locale erzeugen Damit Java erkennen kann, welche Sprachvariante genutzt werden soll, muss eine Locale angelegt werden. Diese kann manuell erfolgen: Locale loc = new Locale(″ de″ , ″ DE″ ); 4. Schritt: Anwendung Nach Abschluss der Vorbereitungen werden alle Ein-/Ausgaben unter Verwendung der Internationalisierungs-Methoden implementiert. So lassen sich zum Beispiel landesspezifische Texte mit der Methode getString() laden; ein Datum lässt sich mit einem DateFormatter-Objekt in das gewünschte Ausgabeformat konvertieren. Den Sourcecode für die Internationalisierung des Demo-Dialogs finden Sie in Abb. 3. Die aktuelle Locale kann aber auch mit einer Methode abgefragt werden. Dabei werden dann die Einstellungen des Betriebssystems berücksichtigt: Locale loc = Locale.getLocale(); 3. Schritt: ResourceBundles Die eigentlichen Texte müssen aus den PropertiesDateien geladen und im Arbeitsspeicher abgelegt werden. Hierzu werden ResourceBundle-Objekte verwendet: public void initData() { // fill fixed fields lLblDate.setText(resourceBundle.getString( "dlgCheckInDate")); lLblTime.setText(resourceBundle.getString( "dlgCheckInTime")); lLblSurName.setText(resourceBundle.getString( "dlgCheckInSurName")); lLblForName.setText(resourceBundle.getString( "dlgCheckInForName")); lLblBaggage.setText(resourceBundle.getString( "dlgCheckInBaggage")); rbnYes.setText(resourceBundle.getString("YES")); rbnNo.setText(resourceBundle.getString("NO")); // fill variable fields Date lActDate = new Date(); DateFormat lDateFormater = DateFormat.getDateInstance( DateFormat.FULL,resourceBundle.getLocale()); DateFormat lTimeFormater = DateFormat.getTimeInstance( DateFormat.MEDIUM,resourceBundle.getLocale()); txfDate.setText( lDateFormater.format(lActDate)); txfTime.setText( lTimeFormater.format(lActDate)); txfSurName.setText(resourceBundle.getString( "dlgCheckInSurNameDefault")); txfForName.setText(resourceBundle.getString( "dlgCheckInForNameDefault")); } // end initData() Abb. 3: Source-Beispiel für die Anwendung von Locale- und ResourceBundle-Objekten. 20 JAVA ResourceName stellt den im ersten Schritt beschriebenen, frei wählbaren Namen dar. Fazit Java bietet den Entwicklern ein umfangreiches Paket, um Anwendungen für den Einsatz in der großen weiten Welt vorzubereiten. Hierbei beschränkt sich dies nicht nur auf die Landessprache und Englisch. Zusätzliche Sprachen können ohne zusätzlichen Entwicklungsaufwand und ohne die Entwicklung hinzugefügt werden. Wird die Internationalisierung am Projektstart eingeführt, so bewegt sich der Aufwand für die Vorbereitung im Bereich von 2-5 Personentagen beim ersten Projekt. Zusätzlich muss noch der Aufwand für die Schulung der Mitarbeiter (ca. 2-4 Stunden/Mitarbeiter) berücksichtigt werden. Der Rest ist nur noch einfaches Anwenden und bedeutet keinen messbaren Mehraufwand. Alles in allem spricht nichts dagegen, mehrsprachig zu werden. Wir helfen Ihnen gerne dabei. Christian Ramm ([email protected]). Ausgabe 1/2002 SYSTEME & APPLIKATIONEN • ORDIX NEWS • Neues von der R/3-Überwachung In früheren Ausgaben (01/2001 und 02/2001) wurde an dieser Stelle die Überwachung von SAP R/3-Systemen mit Hilfe der PATROL for R/3 Suite vorgestellt. Von diesem Produkt gibt es seit Januar diesen Jahres ein neues Release, in das einige Änderungen und Erweiterungen implementiert wurden. Diese Neuheiten stellen wir Ihnen im folgenden Überblick vor. Der grundsätzliche Aufbau und die Funktionsweise des Produktes haben sich nicht verändert. Die Suite, die jetzt „PATROL for SAP Solution Suite Version 4.2.10“ heißt, umfasst weiterhin die vier Produkte Trak, S.L. Reporter, DB-Maintain und Manager. Auch die Art und der Umfang der Installation haben sich gegenüber älteren Releases nur unwesentlich geändert. Der eigene Namensraum Eine der gravierendsten Neuerungen ist der eigene Namensraum, den das Produkt jetzt von SAP bekommen hat. Für die Nutzung hat das den Vorteil, dass die Möglichkeit von Konflikten mit Eigenentwicklungen auf ein Minimum reduziert wurde. Sollte bereits eine ältere Version des Produktes im Einsatz gewesen sein, besteht innerhalb des Upgrades auf die neue Version die Möglichkeit, die zuvor gesammelten Daten in die neuen Tablespaces zu übernehmen, so dass die Historiendaten auch nach dem Wechsel zur neuen Version zur Verfügung stehen. Hinzugekommen ist dafür aber die Unterstützung des Releases 4.6D. Überwachung der “New Dimension Produkte” Ebenfalls neu ist die Möglichkeit der Überwachung der sogenannten „New Dimension Produkte“ SAP APO (Advanced Planner and Optimizer), SAP BW (Business Information Warehouse) und SAP ITS (Internet Transaction Server). Weitere Informationen zum genauen Umfang der Überwachung dieser Produkte finden Sie im Internet auf der BMC Homepage unter http://www.bmc.com/support.html. Einfachere Anbindung und erweiterte Reporterstellung Mit dem neuen Release wurde die Anbindung an die PATROL-Konsole wesentlich vereinfacht. Es werden keine zusätzlichen Transporte o. ä. benötigt, wie das beim letzten Release der Fall war. Die Suite ist somit jetzt voll in die PATROL-Produktpalette integriert. Zusätzlich wurde auch die Möglichkeit geschaffen, webbasierte Reports mit Hilfe der Service Reporting Infrastruktur zu erstellen. Hier werden die gesammelten Daten in einer externen Datenbank (nicht im SAP) gespeichert. Dieser Mechanismus wird in Zukunft das existierende WebReporting auf Excel-Basis ersetzen. Mit der aktuellen Version stehen aber noch beide Möglichkeiten zur Verfügung. Unterstützte Versionen Als weitere Neuerung unterstützt die Suite jetzt alle SAP Releases ab Version 4.0B, d. h. gegenüber den Vorversionen werden keine älteren Release-Stände mehr unterstützt. Ausgabe 1/2002 Weitere Informationen zu den Veränderungen und Erweiterungen der einzelnen Produkte finden Sie ebenfalls auf der oben genannten Internetseite. Diese enthält auch eine Aufstellung, welche Betriebssysteme und Datenbanken unterstützt werden. Mario Möllers ([email protected]). 21 • ORDIX NEWS • SYSTEME & NETZE Dynamische PDF-Dateien mit PHP erstellen Das Portable Document Format, kurz PDF, kann mittlerweile sicherlich als QuasiStandard zum Austausch von elektronischen Dokumenten bezeichnet werden. Kaum eine größere Web-Seite kommt heute noch ohne diesen Dateityp aus. Die Gründe hierfür sind naheliegend: PDFs können auf nahezu jedem Betriebssystem geöffnet werden. Die Dateigröße ist im Vergleich zur Originaldatei wesentlich reduziert und das Layout entspricht 100%ig der zugrundeliegenden Vorlage unabhängig von den auf dem System installierten Schriften, Software usw. PHP & PDF Einen Nachteil besitzen die klassisch erstellten PDF-Dokumente jedoch: Sie sind statisch. 2. Man erzeugt das Dokument im Speicher des Servers und schickt es direkt an den Browser, der die Anfrage gestellt hat. Die serverseitige Skriptsprache PHP bietet hier Abhilfe. PHP beinhaltet umfangreiche Funktionen, die es ermöglichen, PDF-Dokumente dynamisch zu generieren. Was wird hierfür benötigt? Im Wesentlichen beschränken sich die Anforderungen auf einen lauffähigen Web-Server (vorzugsweise Apache), der in der Lage ist, PHP-Skripte zu verarbeiten. Dabei spielt es keine Rolle, ob PHP als Web-Server-Modul oder als CGI-Programm arbeitet. An dieser Stelle gehen wir lediglich auf die zweite Variante ein, da sie in der Praxis vermutlich häufiger Anwendung finden wird. Es sei darauf hingewiesen, dass selbstverständlich nicht alle PDF-Funktionen, die unter PHP möglich sind, hier dokumentiert werden können. Die PDFlib Datei anlegen Unverzichtbar ist jedoch die PDFlib-Bibliothek, die in das arbeitende System integriert werden muss. (Eine Demo-Version kann unter www.pdflib.com bezogen werden.) Die Installation der Bibliothek geht anhand der mitgelieferten Anleitung recht einfach von statten. Um eine PDF-Datei anzulegen, die nicht im Filesystem des Servers abgelegt werden soll, genügen die folgenden Zeilen: Leider ist der offizielle Einsatz, d. h. alles, was über eine Evaluierung hinausgeht, nur mit einer Lizenz möglich. Die Kosten für die einfache PDFlib, die zur Erzeugung von PDF-Dokumenten vollkommen ausreicht, betragen dabei 500 US $ pro eingesetzter Web-Server-CPU. $pdf_datei = PDF_new(); PDF_open_file($pdf_datei); Zusätzlich hat man hier die Möglichkeit, diverse zusätzliche Dateiinformationen einzutragen, die in den Dokumenteigenschaften (im Acrobat Reader) später wieder angezeigt werden. PDFs erstellen Zur Erstellung eines PDFs gibt es generell zwei Optionen: 1. Man erzeugt das PDF im Filesystem und stellt es beispielsweise über einen Link zum Download bereit. 22 Beispielsweise kann sich hier der Verfasser eines Dokumentes „verewigen“: PDF_set_info($pdf_datei, ″ Creator″ , ″ ORDIX News″ ); Ausgabe 1/2002 • ORDIX NEWS • SYSTEME & NETZE Seiten definieren, Inhalte ausgeben Beim Anlegen eines PDF-Dokumentes ist es ungewöhnlich, dass die Inhalte seitenweise definiert werden. Man sollte sich also vorher überlegen, welche Inhalte an welcher Stelle beziehungsweise auf welcher Seite auftauchen sollen. Der Aufruf zur Erstellung einer Seite sieht wie folgt aus: ausgehend von der unteren linken Ecke einer Seite (0,0). Für die obere linke Ecke, an der die meisten Dokumente beginnen sollten, ergeben sich somit die Werte 0,842. Unter Berücksichtigung eines Randes ergeben sich dann beispielsweise die Werte 20,800. Hyperlinks werden anhand von Rechtecken definiert, deren linke untere Ecke analog zu der zuvor beschriebenen Vorgehensweise bestimmt wird. Zusätzlich wird über zwei weitere Parameter die obere rechte Ecke festgelegt: PDF_begin_page($pdf_datei, 595, 842); PDF_add_weblink($pdf_datei, 20, 812, 250, 800, ″ http://www.ordix.de″ ); Die Werte 595 und 842 definieren dabei die Seitenbreite und -höhe in Punkten. Für eine DIN A4 Seite ergibt sich damit die exemplarische Umrechnung für die Seitenbreite (210 mm/0,3528 = 595 Punkte). Der so definierte Bereich sollte den oben ausgegebenen Text „Diese PDF-Datei wurde mit PHP erstellt“ verlinken. Selbstverständlich können über diverse weitere Befehle auch grafische Inhalte, z. B. geometrische Figuren (Kreise, Rechtecke) und/oder Grafiken (GIF, JPG, PNG, TIF) hinterlegt werden. Aus platztechnischen Gründen soll an dieser Stelle auf diese Funktionen nicht näher eingegangen werden. Nachdem das Format der Seite geklärt ist, sollten nun noch Schriftart und -größe festgelegt werden: $font = PDF_findfont($pdf_datei, ″ Helvetica-Bold″ , ″ host″ , 0); PDF_setfont($pdfdatei, $font, 12.0); //der Wert 12.0 //definiert die //Schriftgröße in Punkten Nun steht der ersten Ausgabe von Inhalten nichts mehr im Wege: PDF_set_text_pos($pdfdatei, 20, 800); PDF_show($pdfdatei, ″ Diese PDF-Datei wurde mit PHP erstellt″ ); Der Befehl PDF_set_text_pos definiert, an welcher Stelle der Text auf der zuvor definierten Seite platziert werden soll. In diesem Zusammenhang stellt sich die Frage nach den Angaben 20, 800: Die Platzierung aller Inhalte erfolgt Ausgabe 1/2002 Die jeweils aktuelle PHP-Version können Sie unter www.php.net downloaden. Interessant ist auch die Möglichkeit, Lesezeichen einzurichten. Gerade bei längeren Dokumenten erleichtern diese die Navigation erheblich. Lesezeichen müssen immer im Zusammenhang mit der zu verlinkenden Datei stehen, d. h. sie müssen zwischen dem PDF_begin_page(x,y,z), das eine Seite einleitet und dem PDF_end_page(x), das eine Seite abschließt, definiert werden: PDF_add_bookmark($pdf_datei, ″ Name des Lesezeichens″ , 0,0); Selbstverständlich können mittels der Befehle PDF_begin_page(x,y,z) und PDF_end_page(x) beliebig viele Seiten in einem PDF-Dokument angelegt werden. Datei abschließen und verschicken Um eine PDF-Datei zu beenden, muss der Befehl PDF_close($pdf_datei); aufgerufen werden. 23 • ORDIX NEWS • # $buf = PDF_get_buffer($pdfdatei); # $len = strlen($buf); // OPTION 1: Direkte Anzeige # header("Content-type: application/pdf"); # header("Content-Length: $len"); # print $buf; SYSTEME & NETZE 1. 2. //OPTION 2: Download # header("Content-type: Attachment/ filename=ordix.pdf"); # header("Content-Length: $len"); # print $buf; Abb. 1: Festlegen, ob das PDF im Browser angezeigt werden soll, oder ob nur die Möglichkeit zum Download bestehen soll. Da wir uns anfangs für die direkte Übermittlung des Dokumentes an den anfragenden Browser entschieden haben, bestehen nun zwei weitere Auswahlmöglichkeiten: Das Dokument wird „ungefragt“ direkt im Browser über das Acrobat Reader Plug-In angezeigt. Es kann festgelegt werden, dass der Nutzer zunächst das bekannte Auswahlfenster sehen soll, bei dem er sich entscheiden kann, ob er das Dokument downloaden möchte (Übermittlung als Attachment), oder ob es direkt im Browser angezeigt werden soll. Diese Unterscheidung wird über unterschiedliche Header realisiert. Die ersten Befehlszeilen sind jedoch für beide Varianten gleich (siehe Abb. 1). Fazit <? // Datei anlegen $pdf_datei = PDF_new(); PDF_open_file($pdf_datei); PDF_set_info($pdf_datei, "Creator", "ORDIX AG"); PDF_set_info($pdf_datei, "Author", "Matthias Jung"); PDF_set_info($pdf_datei, "Title", "PHP kann auch PDFs erzeugen :-)"); // Seiten definieren PDF_begin_page($pdf_datei, 595, 842); // Schrift definieren $font = PDF_findfont($pdf_datei, "Helvetica-Bold", "host", 0); PDF_setfont($pdf_datei, $font, 12.0); PDF_set_text_pos(§pdf_datei, 20, 800); // Text ausgeben PDF_show($pdf_datei, "Diese PDF-Datei wurde mit PHP erstellt"); // Link anlegen PDF_add_weblink($pdf_datei, 20, 812, 250 , 800, "http://www.ordix.de"); // Lesezeichen setzen PDF_add_bookmark($pdf_datei, "Seite1", 0,0); PDF_end_page($pdf_datei); // Datei abschließen PDF_close($pdf_datei); $buf = PDF_get_buffer($pdf_datei); $len = strlen($buf); Die ohnehin mächtige Skriptsprache PHP liefert mit der PDFlib ein reizvolles Feature, um WebInhalte dynamisch zu präsentieren. Unschön ist allerdings, dass im Umfeld der Komponenten, die alle der GNU Public Licence unterliegen, die PDFlib mit ihren 500 US $ pro Server-CPU in einigen Fällen recht teuer werden kann. Zwar lassen sich im Internet auch einige andere, freie Lösungen für diesen Bereich finden, jedoch sind diese sowohl in der Installation, als auch in der Anwendung bei weitem nicht so komfortabel wie die PDFlib. // Datei verschicken (Variante "Direkte Anzeige") header("Content-type: application/pdf"); header("Content-Length: $len"); print $buf; ?> Abb. 2: Das vollständige Beispielskript zu diesem Artikel. 24 Matthias Jung ([email protected]). Ausgabe 1/2002 • ORDIX NEWS • AKTUELL Besuchen Sie die ORDIX AG auf der CeBIT 2002! ORDIX präsentiert sich mit zwei starken Partnerschaften auf der CeBIT vom 13.-20.03.2002. Am 13. März 2002 startet wieder die größte Messe für Automation, Informationstechnologie und Telekommunikation. Die CeBIT ist Anziehungspunkt für die gesamte Branche: Mit mehr als 830.000 Gästen aus über 100 Ländern und über 85 Prozent Fachbesuchern verzeichnete die CeBIT 2001 einen absoluten Besucherrekord. Die Ausstellungsfläche auf dem Messegelände in Hannover wurde noch einmal vergrößert und das Programm neu strukturiert. Nun kann es losgehen auf den rund 432.000 Quadratmetern. ORDIX präsentiert sich seinen Kunden gleich im Doppelpack: Migration und Datenbank-Performance in Halle 4, Stand A 58 Die strategischen Optionen für Informix Anwender bei Migrationen auf Oracle möchten wir Ihnen auf dem Oracle-Partnerstand der DOAG vorstellen. Für Migrationsprojekte bieten wir kompetente Beratung von der Machbarkeitsanalyse über Konzeption und Realisierung bis hin zur Einführung. Für Anwender von Oracle Datenbanken halten wir Performance-Analysen und TuningMaßnahmen parat. Daneben stellt die Überwachung von Datenbanken ein zentrales Themengebiet dar, das wir Ihnen gerne auf unserer Informationsinsel am DOAG Stand in Halle 4 präsentieren möchten. Ausgabe 1/2002 Business Management in Halle 3, Stand C 45 Das Schwerpunktthema am Partnerstand der Firma BMC Software lautet in diesem Jahr „Business Management“. Auf dem Stand in Halle 3 werden Lösungen und Produkte der Themenbereiche Enterprise System Management und Enterprise Data Management sowie SAP-Management, Storage- und Security-Management gezeigt. Gemeinsam mit den verschiedenen Partner-Unternehmen werden u. a. die folgenden Lösungen demonstriert: PATROL allgemein, INCONTROL, DashBoard, Visualis, ACSM, Mainframe Database Tools, Service Level Management sowie der PATROL Enterprise Manager. Ihre Anmeldung Bitte vereinbaren Sie im Vorfeld einen Termin, denn wir nehmen uns gerne genügend Zeit für Sie! Senden Sie Ihren Terminwunsch unter Angabe der Stand-Nummer per Post an: ORDIX AG, Westernmauer 12-16, 33098 Paderborn per E-Mail an: [email protected] oder per Fax an: 0 52 51/10 63-99. Sie erreichen uns stets auch über www.ordix.de. Auf der ORDIX Insel möchten unsere Mitarbeiter Ihnen Hilfestellungen im System Management vorstellen. Neben PATROL for SAP R/3, PATROL DashBoard (Netzwerkmanagement), PATROL für Oracle, UNIX und Windows zeigen wir Ihnen auch Ihre Möglichkeiten im Bereich Service Reporting/Service Level Management auf. Und vielleicht ist auch schon ein Blick auf die neue PATROL 7 Architektur möglich. Wir freuen uns auf Ihren Besuch! 25 • ORDIX NEWS • SYSTEM MANAGEMENT Service Reporting: Selbstdarstellung der IT-Abteilung In den Ausgaben 4/2000 und 2/2001 der ORDIX News wurden der Aufbau und die Neuentwicklungen in der Version 1.1.20 beschrieben. Nachdem wir Service Reporting in einigen Projekten eingesetzt haben, werden hier die Einsatzmöglichkeiten und Voraussetzungen beschrieben. „Probleme erkennen und beheben, bevor der Benutzer anruft.“ Dieses Ziel verfolgt ORDIX durch den Einsatz von PATROL-Produkten. Als Dienstleister innerhalb einer Firma verbessern IT-Abteilungen durch den Einsatz des PATROL Service Reporting die Qualität ihres Angebotes an die anderen Abteilungen: Das hektische Reagieren auf Ausfälle wird zur Ausnahme. Service Reporting bietet den EDV-Verantwortlichen die Möglichkeit, diese Qualität intern zu analysieren und nach außen zu dokumentieren. Dokumentation der Leistung Zunächst sammelt der PATROL Agent Informationen über alle Komponenten - also Rechner, Vernetzung, Betriebssysteme und Applikationen. Service Reporting stellt dann alle diese Informationen in automatisch erstellten Berichten übersichtlich, aussagekräftig und für die Adressaten leicht zugänglich dar. Die Berichte können gespeichert, ausge- Abb. 1: Service Reporting auf einem Web-Server. 26 druckt oder über einen Web-Server zur Verfügung gestellt werden. Gezielte Adressierung Ein gestuftes Zugriffskonzept für diesen Web-Server erlaubt den jeweils Verantwortlichen den Zugriff auf die für sie relevanten Berichte. Bei Nachfragen zu bestimmten Systemauslastungen müssen die wichtigen Parameter nicht erst gesammelt und in Berichtform zusammengefasst werden, sondern stehen bereits für einen frei zu wählenden Zeitraum zur Verfügung. Grundlage für Ressourcenplanung Die Berichte des Service Reporting erlauben eine qualifizierte Diskussion der vorhandenen und eventuell zusätzlich einzusetzenden Ressourcen: Die Daten der durchschnittlichen und der höchsten Auslastung wichtiger Komponenten steht den Verantwortlichen jederzeit zur Verfügung. Auf dieser Basis kann die Bewertung der vorhandenen Ressourcen und eine begründete Prognose des zukünftigen Bedarfs erfolgen. Zudem lassen sich langfristige Entwicklungen, die auch die Zusammenarbeit verschiedener Komponenten und daraus entstehende Wechselwirkungen umfassen können, in einer überschaubaren Form darstellen. Ausgabe 1/2002 SYSTEM MANAGEMENT “All inclusive” Service Reporting gehört zum Lieferumfang des PATROL-Basisproduktes, es fallen keine weiteren Lizenzgebühren an. Das umfasst die datensammelnden Komponenten von BMC, eine Oracle-Datenbank und die Reporting-Komponenten der Firma ACTUATE. Wenn Service Reporting implementiert wurde, stehen mit den QuickReports sofort lauffähige Berichte für wichtige Standardapplikationen wie etwa für Oracle-Datenbanken, SAP R/3, Exchange, sowie für die Betriebssysteme UNIX und NT - zur Verfügung. Diese Berichte können für die Rechner, auf denen PATROL Agenten und die entsprechenden Knowledge Module installiert sind, direkt abgerufen werden. Weitergehende Berichte können mit Hilfe von Templates über die gesammelten Daten erstellt werden. • ORDIX NEWS • Windows-Welt beheimatet. Deshalb sind viele der Administrationswerkzeuge, die ACTUATE für das Service Reporting zur Verfügung stellt, nur unter Windows verfügbar. Wer mit einer reinen Sun-Lösung arbeiten möchte, verfügt nicht über die komfortablen Möglichkeiten zur Administration, die eine NT- oder gemischte Lösung bieten. Abb. 2: Webgestützter Bericht. Wer darüber hinaus komplexere Berichte erstellen will, benötigt das Reporting Studio von ACTUATE. Diese Komponente muss jedoch gesondert lizensiert werden, stellt dafür aber sämtliche Möglichkeiten professioneller Berichterstellung zur Verfügung (vergleichende Berichte verschiedenster Parameter, druckreife Berichte mit einer Vielzahl eingebundener Einzelberichte etc.). Erweiterbarkeit Da Service Reporting mit einer Oracle-Datenbank arbeitet, können auch Daten von Applikationen in die Datenbank eingefügt werden, die von den vorgefertigten QuickReports nicht abgedeckt werden. Die Daten können über die von BMC angebotenen oder über eigenentwickelte Knowledge Module in den DataStore eingefügt werden. Es besteht für heterogene Umgebungen die Möglichkeit, Systemmanagement-Daten aus den Produkten anderer Anbieter ins Service Reporting zu integrieren. Voraussetzungen Fazit Die Daten für die Berichte können von allen Rechnertypen bezogen werden, auf denen ein PATROL Agent lauffähig ist. Service Reporting selbst läuft gegenwärtig auf NT4 und Win2000 sowie Sun Solaris – auf Solaris allerdings mit Einschränkungen. Werkzeuge zur Berichterstellung, wie eben ACTUATE, sind wegen ihrer grafischen Ausrichtung in der Ausgabe 1/2002 Mit PATROL bietet ORDIX den IT-Abteilungen Werkzeuge, die Qualität und Verfügbarkeit ihres Angebotes ständig zu verbessern. Service Reporting generiert die dabei erhobenen Daten zu Berichten und stellt sie den Verantwortlichen gezielt zur Verfügung. Mit den vorgefertigten Lösungen deckt Service Reporting Standardumgebungen ohne weitere Anpassungen ab, für besondere Anforderungen bietet es vielfältige Erweiterungsmöglichkeiten. Uwe Rübesamen ([email protected]). 27 • ORDIX NEWS • SYSTEME & NETZE Management von Mailinglisten mit Majordomo Das Problem Wie oft kommt es vor, dass man E-Mails an mehrere interessierte Personen gleichzeitig versenden möchte? Wenn man jeden Adressaten einzeln aus seinem Adressbuch als Empfänger eintragen will, kann das sehr aufwendig sein. Aus diesem Grund empfiehlt sich das Anlegen von Mailinglisten. Diese Listen sind über eine E-Mail Adresse (Bsp.: [email protected]) zu erreichen und als ein Verteiler anzusehen, über den E-Mails an alle Mitglieder der Liste weitergeleitet werden. Wie können aber solche Listen administriert werden, ohne dass ein Administrator die Benutzer fortlaufend in die Liste hinzufügen und herausnehmen muss? Sinnvoll wäre es, wenn sich die potentiellen Mitglieder einer Liste automatisch in diese eintragen oder austragen können. Die Lösung Majordomo ist ein System, mit dem man solche Mailinglisten verwalten kann. Die Benutzer können sich damit per E-Mail bei Mailinglisten an- und abmelden bzw. Informationen zu vorhandenen Listen bekommen. Jede Liste ist einem Administrator zugeordnet, der die Listenkonfiguration übernimmt und „nach dem Rechten“ sieht. Die Listen selbst werden von einem Serveradministrator angelegt bzw. gelöscht. Wie man eine Liste anlegt, zeigen wir in Abb.1. Die Benutzung Alle Aktionen werden per E-Mail an die Hauptadresse des Majordomo ([email protected]) gesteuert. Das auszuführende Kommando wird in das Textfeld der E-Mail geschrieben. Die Betreffzeile einer EMail wird von Majordomo ignoriert. Die Installation Majordomo ist als RPM-Paket für Linux-Plattformen verfügbar und einfach zu installieren. Um dem System die E-Mail-Adresse [email protected] bekannt zu machen, muss die „/etc/aliases“ wie folgt erweitert werden: Majordomo bietet die Möglichkeit, Listen sehr flexibel zu konfigurieren: Eine Liste kann offen, geschlossen oder moderiert sein. „Offen“ bedeutet, dass es keine Beschränkung gibt, wer E-Mails an die Mailingmajordomo: "|/usr/lib/majordomo/wrapper majordomo" liste senden darf bzw. wessen Emajordomo-owner: owner-majordomo Mails von der Liste berücksichtigt owner-majordomo: <E-Mail des Majordomo-Admins> werden. Ist eine Liste „geschlossen“, können nur Listenmitglieder Beiträge liste: "|/usr/lib/majordomo/wrapper resend -l liste liste-out" schreiben und „modeliste-out: :include:/var/lib/majordomo/lists/liste, liste-archiv riert“ bedeutet, dass alle liste-request: "|/usr/lib/majordomo/wrapper majordomo -l liste" Beiträge erst an einen liste-approval: owner-liste liste-owner: owner-liste Moderator (oft ist es der owner-liste: <E-Mail des Listenadmins> Administrator der Liste "|/usr/lib/majordomo/wrapper archive2.pl -f liste -a liste-archiv: selbst) gesendet wer/var/lib/majordomo/lists/liste.archiv" den und dieser die Beiträge freigibt. Abb. 1: Anlegen einer Liste. 28 Ausgabe 1/2002 • ORDIX NEWS • SYSTEME & NETZE Beispielkommandos: help: lists: subscribe listenname: unsubscribe listenname: which: who listenname: Hilfe über Kommandos Anzeige der verfügbaren Listen Anmelden bei einer Liste Abmelden bei einer Liste zeigt alle Listen an, bei denen man angemeldet ist zeigt alle E-Mail-Adressen, die an listenname angemeldet sind Auch einige Befehle (wie z. B. which oder who) können generell gesperrt, nur für Listenmitglieder freigegeben, oder von jedem benutzt werden. Damit Nichts verloren geht Eine weitere interessante Funktion von Majordomo ist die Archivierung. Alle Beiträge zu einer Liste können in einem zugehörigen Listenarchiv gesammelt werden. Mit dem Befehl „index <listenname>“ kann man eine Übersicht der Dateien bekommen, die zu einer Liste verfügbar sind. Mit dem Befehl „get <listenname> <dateiname>“ kann man sich diese Dateien per Mail zuschicken lassen. Abb. 2: Anmelden an eine Liste mit einer MajordomoStandard-Konfiguration. Fazit Majordomo ist ein freies und offenes Produkt. Die Perl-Quellen können an die eigenen Bedürfnisse angepasst werden. Einmal installiert und konfiguriert, ist es kaum notwendig, Majordomo zu warten bzw. zu administrieren. Dies ist sicherlich einer der Gründe für die große Akzeptanz von Majordomo im Internet-Umfeld. Was gibt es schöneres für einen Systemadministrator, als wenn er sich nicht mehr um tägliches Aktualisieren von Verteiler-Listen kümmern muss? Stattdessen kann er es den Listenmitgliedern persönlich überlassen, sich komfortabel von Verteiler-Listen ein- oder auszuschließen. Lars Hendrik Korte ([email protected]). Ausgabe 1/2002 Abb. 3: Beispiel-E-Mail zum Steuern einer Liste. 29 • ORDIX NEWS • SYSTEME & DATENBANKEN Oracle Packages Teil VII: Debugging von PL/SQL mit DBMS_DEBUG Bisher wurde das Debuggen von PL/SQL-Programmen wie z. B. anonymen Blöcken, Stored Procedures und Triggern häufig mit Hilfe des Package DBMS_OUTPUT durchgeführt. Hierzu muss von dem Entwickler an gewünschten Positionen im Programm-Code die Ausgabe von Variablen hinterlegt werden. Dies ist bei der Fehlersuche oft umständlich und unflexibel. In diesem Artikel wird das Package DBMS_DEBUG vorgestellt, welches für das Debugging eine bessere Funktionalität verspricht. Vorteile: • Flexibles Debuggen durch Setzen von Breakpoints, Anzeigen von Variablenwerten. • Source-Code muss zum Debuggen nicht verändert werden. Nachteil: • Relativ aufwändig für kleine, überschaubare Programm-Teile (Hier greift man u. U. doch besser wieder auf DBMS_OUTPUT zurück). DBMS_DEBUG ist ein PL/SQL API zur PL/SQL Debugging Layer (Probe) im Oracle Server. Das Package kann allerdings nur serverseitig genutzt werden. Grundsätzlich sind zwei Sessions für das Debuggen notwendig. In der sogenannten TargetSession werden die Debug-Informationen durch ein PL/SQL-Programm erzeugt, während die DebugSession die Steuerung der Target-Session übernimmt. Innerhalb einer Session kann ein Schalter gesetzt werden, um den DEBUG-Modus ein- bzw. auszuschalten. ALTER SESSION SET PLSQL_DEBUG = true; Bestehender Programmcode kann mit der Option DEBUG erneut kompiliert werden. Dazu dienen die Befehle: ALTER [PROCEDURE | FUNCTION | PACKAGE | TRIGGER | TYPE] <name> COMPILE DEBUG; ALTER [PACKAGE | TYPE] <name> COMPILE DEBUG BODY; Die Funktionsweise dieses Packages wollen wir anhand eines Beispiels vorstellen. Dazu legen wir die in Abb. 1 gezeigte Beispiel-Prozedur an. Anschließend wird der DEBUGModus eingeschaltet: ALTER PROCEDURE upd_gehalt COMPILE DEBUG; Ab jetzt arbeiten wir mit zwei verschiedenen Sessions: CREATE OR REPLACE PROCEDURE upd_gehalt IS BEGIN UPDATE mitarbeiter SET GEHALT= NVL(GEHALT, 0) * 1.20 WHERE abteilungsnr in (SELECT abteilungsnr FROM abteilung WHERE abteilungsname LIKE ‘%ORACLE%‘); DBMS_OUTPUT.PUT_LINE(‘Rows: ‘||SQL%ROWCOUNT); END; / Abb. 1: Source-Code zum Anlegen der Beispiel-Prozedur. 30 Ausgabe 1/2002 SYSTEME & DATENBANKEN • ORDIX NEWS • 1. Die Target Session: Die möglichen Aktionen der Target-Session sind in Abb. 2 verdeutlicht. Für unser Beispiel initialisieren wir zuerst die Session für das Debugging und generieren die eindeutige ID. Anschließend starten wir das Debugging. Abb. 2: Mögliche Aktionen der Target-Session. SQL>VARIABLE x VARCHAR2(40) SQL>EXECUTE :x := DBMS_DEBUG.INITIALIZE() SQL>PRINT x X ————————————————————————————————————————— 000F10D50001 SQL> EXECUTE DBMS_DEBUG.DEBUG_ON SQL> EXECUTE upd_gehalt; Die Target-Session wartet nun auf Aktion von der Debug-Session. 2. Die Debug-Session: Der Debug-Session wird die ID der eben initialisierten Target-Session mitgeteilt. SQL>SET SERVEROUTPUT ON SQL>EXECUTE DBMS_DEBUG.ATTACH_SESSION(‘000F10D50001‘); Welche weiteren Aktionen von der DebugSession möglich sind, verdeutlicht Abb. 3. In unserem Beispiel wird nun auf Zeile 3 der Prozedur ein Breakpoint gesetzt. Ein Breakpoint kann nur auf ein ausführbares Statement gesetzt werden (Abb. 4). DECLARE V_info DBMS_DEBUG.PROGRAM_INFO; V_ret BINARY_INTEGER; V_bnum BINARY_INTEGER; BEGIN V_info.namespace := DBMS_DEBUG.NAMESPACE_PKGSPEC_OR_TOPLEVEL; V_info.name := ‘UPD_GEHALT’; V_info.owner := ‘BK’; V_info.dblink := null; V_info.line# := 3; V_ret := DBMS_DEBUG.SET_BREAKPOINT(v_info,3,v_bnum); IF v_ret != DBMS_DEBUG.SUCCESS THEN DBMS_OUTPUT.PUT_LINE(‘Kann keinen Break point setzen’); END IF; END; / Abb. 3: Mögliche Aktionen der Debug-Session. Ausgabe 1/2002 Abb. 4: Setzen eines Breakpoints auf Zeile 3. 31 • ORDIX NEWS • SYSTEME & DATENBANKEN Nachdem der Breakpoint gesetzt ist, soll das Programm bis dorthin ausgeführt werden. An dieser Stelle sollen Informationen über Stack-Tiefe und Zeilenanzahl ausgegeben werden. DECLARE v_info DBMS_DEBUG.RUNTIME_INFO; v_ret BINARY_INTEGER; v_source VARCHAR2( 4 0 0 0 ) ; -- V_mask enthaelt die Informationen, die gesammelt werden sollen v_mask PLS_INTEGER := DBMS_DEBUG.INFO_GETSTACKDEPTH + dbms_debug.info_getbreakpoint + dbms_debug.info_getlineinfo + DBMS_DEBUG.INFO_GETOERINFO; -- nach dem Breakpoint zum nächsten ausfuehrbaren Statement springen breakflags PLS_INTEGER := DBMS_DEBUG.BREAK_NEXT_LINE; BEGIN -- Synchronisation v_ret := DBMS_DEBUG.SYNCHRONIZE (v_info,0); IF v_ret != DBMS_DEBUG.SUCCESS THEN DBMS_OUTPUT.PUT_LINE(‘Synchronize fehlgeschlagen’); END IF; -- auf zum Breakpoint v_ret := DBMS_DEBUG.CONTINUE(v_info,0,v_mask); IF v_ret != DBMS_DEBUG.SUCCESS THEN DBMS_OUTPUT.PUT_LINE(‘Continue fehlgeschlagen’); END IF ; -- in welcher Zeile befindet man sich? -- Welcher Breakpoint? Welche Stack-Tiefe? Welches Programm? DBMS_OUTPUT.PUT_LINE(‘aktuelle Zeile ‘||v_info.line#); IF v_info.terminated = 1 THEN DBMS_OUTPUT.PUT_LINE(‘Program ist terminiert’); END IF ; DBMS_OUTPUT.PUT_LINE(‘Breakpoint # ist ‘||v_info.breakpoint); DBMS_OUTPUT.PUT_LINE(‘Stack-Tiefe ist ‘||v_info.stackdepth); IF v_info.reason != 3 THEN DBMS_OUTPUT.PUT_LINE (‘Programm wartet (kein Breakpoint)’); END IF; DBMS_OUTPUT.PUT_LINE(‘Programm-Name ist ‘||v_info.program.name); -- Wie sieht der Source-Code für diese Zeile aus? SELECT text INTO v_source FROM all_source WHERE owner = v_info.program.owner AND name = v_info.program.name AND line = v_info.line#; DBMS_OUTPUT.PUT_LINE(‘Quellcode ist ‘||chr(10)||v_source); IF v_info.oer != 0 THEN DBMS_OUTPUT.PUT_LINE (‘Exception ist ‘|| SQLERRM (v_info.oer)); END IF; -- gehe weiter v_ret := DBMS_DEBUG.CONTINUE(v_info,breakflags,v_mask); IF v_ret != DBMS_DEBUG.SUCCESS THEN DBMS_OUTPUT.PUT_LINE( ‘Continue fehlgeschlagen’); END IF; DBMS_OUTPUT.PUT_LINE(‘aktuelle Zeile’||v_info.line#); SELECT text INTO v_source FROM all_source WHERE owner = v_info.program.owner AND name = v_info.program.name AND line = v_info.line#; DBMS_OUTPUT.PUT_LINE(‘ Quellcode ist ‘||chr(10)||v_source); -- Gehe bis zum Ende des Programms v_ret := DBMS_DEBUG.CONTINUE(v_info,0,0); IF v_ret != DBMS_DEBUG.SUCCESS THEN DBMS_OUTPUT.PUT_LINE( ‘Continue fehlgeschlagen’); END IF; end; / Abb. 5: Quellcode zur Ausgabe der Debugging Information. 32 Ausgabe 1/2002 SYSTEME & DATENBANKEN • ORDIX NEWS • Es wird die folgende Ausgabe in der Debug-Session erzeugt: Line is 3 Breakpoint # ist 1 Stack-Tiefe ist 2 Programm-Name ist UPD_GEHALT Quellcode ist UPDATE mitarbeiter aktuelle Zeile 7 Quellcode ist DBMS_OUTPUT.PUT_LINE(‘Rows: ‘||SQL%ROWCOUNT); Das Debuggen wird nun beendet mit: Target-Session: SQL>EXEC DBMS_DEBUG.DEBUG_OFF Debug-Session: SQL>EXEC DBMS_DEBUG.DETACH_SESSION Weitere Funktionen und Prozeduren des Packages: PROBE_VERSION SELF_CHECK SET_TIMEOUT INITIALIZE DEBUG_ON DEBUG_OFF ATTACH_SESSION SYNCHRONIZE SHOW_SOURCE PRINT_BACKTRACE CONTINUE SET_BREAKPOINT DELETE_BREAKPOINT DISABLE_BREAKPOINT ENABLE_BREAKPOINT SHOW_BREAKPOINTS GET_VALUE SET_VALUE DETACH_SESSION GET_RUNTIME_INFO GET_INDEXES EXECUTE TARGET_PROGRAM_RUNNING SET_TIMEOUT_BEHAVIOUR PRINT_INSTANTIATIONS Versions-Nummer von DBMS_DEBUG Interner Konsistenz-Check Setzen eines Timeouts Initialisiert die Target-Session DEBUG wird eingeschaltet DEBUG wird ausgeschaltet Die Debug-Session bekommt die ID der Target-Session mitgeteilt Wartet auf den Programm-Start Gibt Programm-Code aus Ausgabe des Speichers Das laufende Programm wird fortgesetzt Setzt einen Breakpoint in einem Programm Löscht einen Breakpoint Deaktiviert einen Breakpoint Aktiviert einen Breakpoint Listet die Breakpoints auf Ein Wert wird aufgegeben Ein Wert innerhalb des laufenden Programms wird gesetzt Das Debuggen der Target-Session wird beendet Informationen zu dem aktuellen Programm werden zurückgegeben Gibt zu einer indizierten Tabelle die Menge der Indizes zurück Ausführen einer Prozedur in der Target-Session Läuft das zu überwachende Programm? Wie ist im Falle eines Timeouts zu reagieren Die Liste der benutzten Packages in der Session Fazit Der Einsatz des Package DBMS_DEBUG lohnt sich bei Programmen, die mehr als einen Dreizeiler beinhalten. Durch den Einsatz von aufgesetzten Funktionen und Prozeduren lässt sich der Aufwand für das einzelne zu untersuchende Programm sicherlich minimieren. Beate Künneke ([email protected]) Ausgabe 1/2002 33 • ORDIX NEWS • SYSTEME & NETZE SAN-Technik Gründe, die für Storage Area Networks (SANs) sprechen, wurden schon an mehreren Stellen dargestellt. Mögliche Konzepte zur Konsolidierung oder Flexibilisierung von Plattensystemen findet man viele. Grosse Distanzen und Skalierbarkeit werden angepriesen. Leider wird in den Prospekten und Konzepten vieler Hersteller mit Begriffen aus der „neuen Welt“ jongliert, als wären sie jedermann vertraut. In diesem Artikel werden die Begriffe rund um SAN definiert. Für Neueinsteiger oder Kollegen, die nie die Grundlagen aufarbeiten durften, wird hier in wenigen Seiten die grundlegende Technik „Fibre Channel“ dargestellt. SAN versus NAS Spitzfindige Strategen haben passend zum SAN den Begriff NAS in die Diskussion hineingeworfen. Sie verbinden damit Network Attached Storage und bieten dieses als kostengünstige Alternative zu SAN an. Nun wird definiert, was SAN bzw. NAS wirklich bedeutet. NAS ist ein neuer Begriff für alte Technik. Plattenplatz wird in dedizierten Servern mit einem Standard Betriebssystem eingebaut und mittels NFS und oder SMB anderen Systemen zur Verfügung gestellt. Die Server werden als Filer bezeichnet. Glossar Network File System (NFS): Von Sun entwickeltes Protokoll zum lokalen Einhängen von entfernten Filesystemen. Typischerweise unter UNIX verwendet. SMB: Protokoll, welches auf dem LAN-Manager von IBM/MS beruht. Dient zum Nutzen entfernter Freigaben. Typischerweise von allen Windows Systemen verwendet. Kann mittels Samba oder ASX auch auf UNIX-Systemen eingerichtet werden. Fibre Channel (FC): Standardisierte Netzwerktechnik, mit folgenden Eigenschaften: • Datendurchsatz von bis über 2 GigaBits/s • Entfernungen bis zu zehn Kilometer werden ohne Einbruch der Bandbreite unterstützt. • IP, SCSI, IPI, HIPPI-FP, audio/video können auf FC aufsetzen. Physical Address (PA): Adresse in einer Arbitrated Loop (max. 127 möglich) Arbitrated Loop (AC): Fibre Channel Ring ähnlich eines Token Ring Switched Fabric (SF): Fibre Channel Netzwerk meist aus mehreren Switches redundant aufgebaut. Das gesamte Netz wird als Fabric bezeichnet. Viele der Eigenschaften des Fabric werden durch die Switches realisiert. Direct Attached Storage (DAS): Ein Speichergerät ist direkt in einem Rechner eingebaut oder mit ihm verbunden. 34 Häufig ermöglicht eine BedienerOberfläche über das normale Netzwerk die Konfiguration der Freigaben. Um den notwendigen Durchsatz zu erreichen, kann GigaBit Ethernet als Netzwerktechnik zum Einsatz kommen. SAN beschreibt die Entkopplung von Rechner und Speichermedium. Zwischen beiden wird ein Netzwerk aufgebaut, welches mit LAN- oder WAN -Technik nicht verwechselt werden darf. Entscheidend ist, dass es sich bei den Speichersystemen nach wie vor um Block-Devices handelt. Diese werden vom Server nicht anders angesprochen als lokale Platten. Nach heutigem Stand wird Fibre Channel zur Verbindung der Geräte eingesetzt. In einem SAN sind normalerweise sowohl mehrere Rechner als auch verschiedene Speichersysteme vorhanden. Fibre Channel im Detail Die Entwicklung von Fibre Channel (FC) begann 1988. Seit 1994 ist FC durch ANSI standardisiert. Es verfügt über die nötige „Marktreife“ und die Leistungsbeschreibung ist vielversprechend. Andere Technologien (wie z. B. Serial Storage Architecture) sind entweder langsamer oder noch nicht so ausgereift. Da FC als „best practice” im SAN-Umfeld anzuse- Ausgabe 1/2002 • ORDIX NEWS • SYSTEME & NETZE den automatisch berücksichtigt. Viele Routing-Algorithmen sind in Software realisiert, was prinzipiell bremsend wirkt. Fibre Channel wartet mit einem eigenen Schichtenmodell auf, welches in Schicht 4 definiert, wie Upper Layer Protokolle eingebunden werden. Als solche können sowohl Bus-Protokolle (z. B. SCSI) als auch Netzwerkprotokolle (z. B. IP) eingesetzt werden. Abb. 1: Technologievergleich. hen ist (siehe Abb. 1), soll dies genauer untersucht werden. Fibre Channel verbindet die Vorteile eines Bus-Systems (Channel) mit den Vorteilen eines Netzwerkes. Bus-Systeme (z. B. SCSI, PCI) haben meist wenige, definierte Endgeräte. Sie sind in sich abgeschlossen, wohlstrukturiert und kommen daher mit wenig Protokoll-Overhead aus. Entscheidungsalgorithmen, die Routing-Möglichkeiten auswerten, entfallen, was prinzipiell schnellere Kommunikation ermöglicht. Netzwerke sind unstrukturiert und unvorhersehbar. Netze können eine große Anzahl an Endgeräten bedienen. Sich verändernde Bedingungen (z. B. Ausfall eines Routers) wer- Kupfer Glasfaser multimode 50/60 µm Glasfaser single mode 9 µm Entgegen dem Namen können Kupfer und Glasfaser als Übertragungsmedium dienen. Es sind Entfernungen bis zehn Kilometer bei Übertragungsraten von 2 GBit/s (1 GBit/s pro Richtung) möglich. Die Spezifikation zielt auf bis zukünftig 10 GBit/s, welche jedoch erst in mehreren Jahren erwartet werden dürfen (siehe Abb. 2). Fibre Channel nutzt entweder 2 Adernpaare (Kupfer) oder zwei Glasfaser-Kabel. Dadurch ist FullduplexÜbertragung möglich. Neue Glasfaser Steckverbindungen (Galaxy-Connector) erlauben den Anschluss beider Kabel auf kompakte Weise (ca. 6 mm x 6 mm), so dass eine höhere Anschlussdichte erreicht werden kann. Als Topologien kommen Punkt-zu-Punkt, Arbitrated Loop oder Switched Fabric in Frage. Wenn mehrere Geräte zu unabhängigen Punkt-zuPunkt Verbindungen geschaltet werden sollen, kann ein Static Switch genutzt werden. Über ein externes Interface werden verschiedene Punkt-zu-Punkt Verbindungen konfiguriert. Arbitrated Loop wird durch einen Hub hergestellt, der ähnlich eines Ringleitungsverteilers (Token Ring) einen Ring zwischen allen angeschlossenen Geräten schaltet. Maximal sind 127 Geräte in einem Ring max. Entfernung 47 m 2 km 10 km max. Geschwindigkeit (pro Richtung) 100 Mbit/s 1 GBit/s nur bis ca.100 m 1 GBit/s Abb. 2: Medienarten. Ausgabe 1/2002 35 • ORDIX NEWS • zu betreiben. Arbitrated Loop kann auch als direkter Ersatz zu SCSI-Bussen gesehen werden und kann z. B. in einer Backplane Festplatten hotplug-fähig anschließen. Arbitrated Loop benötigt eine Initialisierung. Switched Fabric wird durch einen Fibre Channel Switch erreicht. Diese Switches sind hochperformant und schalten mit geringer Latenzzeit. Sie sind konfigurierbar. Durch „Fabric Zoning“ wird schon auf SAN-Ebene eine grobe Zugriffssteuerung erreicht. SYSTEME & NETZE den. Hubs haben keinen eigenen Port, sondern dienen nur dem Aufbau einer Arbitrated Loop. Je nach Gerät können die Ports nur in einer Arbitrated Loop betrieben werden, nur an einem Switch angeschlossen werden, nur zur Verbindung zweier Switches eingesetzt werden oder mehrere dieser Eigenschaften wahrnehmen. In einer Arbitrated Loop werden 1 Byte große „Physical Addresses“ (PAs) vergeben. Die Geräte hanKommunikation innerhalb des Fibre Channel fin- deln dynamisch während der Initiadet immer zwischen Ports statt. Es wird generell lisierung der Arbitrated Loop ihre PA zwischen den Ports eines Endgerätes (z. B. Fest- aus. Während des Betriebs könplatte, Rechner), sogenannten Node-Ports und nen Geräte hinzugefügt oder entdem Port eines Switches „Fabric-Port“ unterschie- fernt werden, sofern gewährleistet wird, dass der physikalische Ring Class Eigenschaft nicht unterbrochen Class 1 Zwischen zwei Node-Ports wird eine Verbindung fest aufgebaut. Die ist. dedicated service Kommunikation ist leitungsorientiert. Es steht die gesamte In einem Fabric Bandbreite zur Verfügung, so dass über diese Ports keine andere Kommunikation stattfinden kann. Über die gesamte Distanz wird die werden 3 Byte grogleiche Übertragungsgeschwindigkeit genutzt. Es wird nichts ße ID’s vergeben. Die 16 größten IDs gepuffert. Die Reihenfolge von Frames bleibt erhalten. Diese (hexFFFFF0 bis Konfiguration ist für Voice- oder Video-Anwendungen zweckhaft. hexFFFFFF) sind Class 2 Dieser Service ist vergleichbar mit TCP/lP. Die einzelnen Frames multiplex service werden unabhängig versendet und können verschiedene Wege durch fest definierte „wellknown addresses“ das Fabric zurücklegen, weshalb keine Reihenfolge garantiert und dienen der Verwerden kann. Quittungsmechanismen stellen sicher, dass keine waltung des Frames verloren gehen. Einzelne Switches können die Frames Fabric. Über eine puffern, so dass unterschiedliche Leitungsgeschwindigkeiten dieser wellknown genutzt werden. IDs meldet sich jeClass 3 Dieser Service ist vergleichbar mit UDP. Es werden keine der Node-Port an datagram service Quittungsmechanismen genutzt. Ansonsten entspricht dieser dem Fabric an. Service dem multiplex service. Während dieses Class 4 Dieser Service ist leitungsorientiert und entspricht weitestgehend Fabric-Login wird virtual circuit dem Class 1 Service. Es wird jedoch nur ein Teil der Bandbreite die ID des Nodefractional bandwidth genutzt. Dies ermöglicht einerseits garantierte Zustellzeiten und Ports festgelegt. außerdem höhere Flexibilität, da ein Port viele dieser Außerdem werden Kommunikationen gleichzeitig durchführen kann. Eigenschaften zur Class 5 Diese Art Service ist noch nicht definiert. Es ist nicht abzusehen, ob Flusskontrolle und just in time dies nachgeholt wird. mögliche ServiceClass 6 Es kann durch einen Frame eine Gruppe von Node-Ports erreicht arten bestimmt. multicast werden. Die entsprechenden Node-Ports müssen zuvor in der Bevor eine KomGruppe angemeldet sein und der Fabric muss Multicast munikation zwiunterstützen. schen zwei NodePorts (in der Regel Abb. 3: Durch Fibre Channel definierte Service Classes. Adressierung und Routing 36 Ausgabe 1/2002 • ORDIX NEWS • SYSTEME & NETZE durch das Fabric) stattfinden kann, findet ein Node-Port-Login statt. Hierbei werden die Eigenschaften dieser speziellen Kommunikation ausgetauscht. Beide Arten des Login sind beständig. Sofern es keinen Grund gibt, dieses aufzugeben, bleiben alle Ports eingelogged, selbst wenn keine Daten zu übertragen sind. Arbitrated Loops sind über entsprechende Ports eines Switches auch in ein Fabric zu integrieren. Die Physical Addresses werden dann auf bestimmte Art innerhalb des Fabrics auf 3 Byte ergänzt. Eventuell kann es notwendig sein, dass die Arbitrated Loop reinitialisiert werden muss, damit eindeutige Adressen sichergestellt werden. Jeder Port hat zusätzlich noch eine Name-ID. Diese fest vergebene 64 Bit große Kennung dient den auf Fibre Channel aufsetzenden Protokollen zur Identifikation der Kommunikationspartner. Fibre Channel selbst nutzt diese ID nicht. Die Kommunikation Fibre Channel nutzt die von IBM entwickelte 8B/10B Umsetzung. Diese Umsetzung überträgt für jedes Byte 10 Bit. Da physikalische Eigenschaften der Übertragung berücksichtigt werden, wird die Anzahl an Übertragungsfehlern verringert. Zusätzlich wird durch Redundanz eine gewisse Fehlererkennung ermöglicht. Außerdem wurden Bitfolgen als Steuerzeichen definiert, die keinem 8-Bit Zeichen entsprechen. Vier solcher 10Bit großen „Transmission Characters“ werden zu einem Transmission Word zusammengefasst. Mehrere davon ergeben einen Frame, der als eine Einheit gesendet wird. Ausgabe 1/2002 Interessante Links: http://www.iol.unh.edu/training/fc/fc_tutorial.html http://www1.cern.ch/HSI/fcs/spec/overview.htm http://www.fibrechannel.com Jeder Frame ist mit einer Sequence-ID und einem Sequence-Counter versehen. Dadurch kann der Empfänger die Reihenfolge und die Vollständigkeit aller Frames einer Sequence sicherstellen. Eine vollständige Kommunikation zwischen zwei Systemen entspricht einem Exchange. Jede Sequence ist einem Exchange zugehörig. Dies wird über die Exchange-IDs sichergestellt. Für Fibre Channel sind verschiedene Classes of Service definiert. Der Service-Type sollte entsprechend den Notwendigkeiten der Anwendungen und den Möglichkeiten im Fabric gewählt werden. Die Tabelle in Abb. 3 gibt einen Überblick über die definierten Service Classes. LANless Backup und Serverless Backup Nachdem die Technik nun erklärt ist, an dieser Stelle die folgenden Überlegungen: Da alle Speicher-Komponenten durch das SAN miteinander verbunden sind, ist es nicht notwendig, Daten über das LAN von einem Server zu einem Sicherungsserver zu transportieren. Stattdessen kann das SAN verwendet werden. Solche Lösungen werden als LANless Backup bezeichnet. Ein Server muss normalerweise CPU- und I/O-Zeit aufwenden, um die Daten von dem eigenen Plattenbereich zu lesen und an eine andere Stelle weiterzugeben. Gerade bei Backups kann diese Last erheblich sein und ist auf Anwendungs-Servern unerwünscht. Im SAN ist es möglich, durch entsprechende Komponenten Daten zwischen Platten-Systemen und Band-Systemen zu kopieren, ohne dass ein Server belastet wird. Man spricht in diesem Fall von Serverless Backup. Die Beispiele LANless Backup und Serverless Backup lassen die Flexibilität, aber auch die Komplexität der SAN-Technik erahnen. Markus Schreier ([email protected]). 37 • ORDIX NEWS • JAVA Entwurfsmuster Teil II: Implementierung von Entwurfsmustern Nach der Theorie und einem erklärenden Beispiel im ersten Teil über Entwurfsmuster zeigen die folgenden Codefragmente, Strukturdiagramme und Beschreibungen, wie und wann sich Entwurfsmuster in der Praxis einsetzen lassen. Single-Dasein Das Singleton-Entwurfsmuster ist ein objektbasiertes Erzeugungsmuster und gewährleistet, dass von einer Klasse genau eine Instanz existiert und stellt eine globale Zugriffsmethode dafür bereit. Beispiele für solche Klassen gibt es viele, oft sind es Dienstleistungsklassen wie z. B. ein Logger, Fenstermanager, Druckerspooler oder etwa ein Datenbankmanager. Um sicherzustellen, dass es nur ein Exemplar einer Klasse gibt, überlassen wir die Objekterzeugung und -verwaltung der Klasse selbst. Über eine globale Zugriffsmethode können Klienten auf dieses Exemplar zugreifen (Abb. 1). darauf zugegriffen werden kann. Sollte sich im Laufe des Entwicklungsprozesses herausstellen, dass doch mehr als ein Exemplar benötigt wird, hilft das Muster dabei, die Anzahl genau festzulegen und zu kontrollieren (siehe Abb. 2). Das Beobachter-Pattern (Observer) Dieses Verhaltensmuster ermöglicht es, dass die Änderung des Zustands eines Objekts dazu führt, andere Objekte zu benachrichtigen und automatisch zu aktualisieren. Die öffentliche, statische Schnittelle getInstance() Die zentralen Objekte in diesem liefert die einzige Muster sind das Subjekt und die Instanz der Klasse: Beobachter. Ein Subjekt (ObservauniqueInstance. ble) kann mehrere abhängige BeoIst die Instanz noch bachter (Observer) besitzen, die nicht vorhanden, sich für den Zustand des Subjekts interessieren. Ändern sich die DaAbb. 1: Struktur des Singleton- wird sie erzeugt. Um sicherzustellen, dass ten des Subjekts, werden die anMusters. nicht von außerhalb gemeldeten Beobachter darüber ein Objekt dieser Singleton-Klasse erzeugt werden informiert. kann, wird der Konstruktor einfach als private deklapublic class Singleton { // privater Konstruktor riert und kann somit nur inprivate Singleton() { ; } nerhalb der eigenen Klasse benutzt werden. // einzige Instanz dieser Klasse private static Singleton uniqueInstance = Das Codebeispiel zeigt, wie einfach die Umsetzung des Singleton-Musters ist. Die Vorteile des Musters sind offensichtlich: Die Singleton-Klasse kapselt sein einziges Exemplar und verfügt somit über eine strikte Kontrolle darüber, wie und wann 38 // Zugriffsmethode public static Singleton getInstance() if (uniqueInstance != null) return new Singleton() ; else return uniqueInstance ; } null ; { } Abb. 2: Implementierung einer Singleton-K lasse in Java. Ausgabe 1/2002 JAVA • ORDIX NEWS • kreten Beobachter (observerState ) synchronisiert (siehe Abb. 3). Das Beobachtermuster in Java Wegen der häufigen Verwendung, insbesondere beim Programmieren von graAbb. 3: Struktur des Beobachtermusters. fischen BenutzungsEin gutes Beispiel für die Verwen- schnittstellen, unterstützt die Java Standard API den dung dieses Musters ist ein Daten- Entwickler bei der Umsetzung des Beobachtermusobjekt mit mehreren grafischen Re- ters. Das Subjekt ist ein Exemplar der Bibliothekspräsentationen, z. B. eine Tabelle, klasse java.util.Observable. Ein Beobachein Säulendiagramm und ein Kreis- ter implementiert das Interface Observer. diagramm. Diese Darstellungsobjekte sind die Beobachter und ak- Im folgenden Beispielprogramm sehen wir, wie Obtualisieren ihre Anzeige, sobald sie servable- und Observer-Objekte miteinander komüber die Änderung der Daten vom munizieren. Datenobjekt informiert werden. Somit ist gewährleistet, dass die ver- Die Klasse Observable schiedenen Anzeigen synchron und konsistent den aktuellen Zu- Das Observable-Objekt ist eine Instanz der Klasse stand ihres Datenobjekts darstel- Mailverteiler, an dessen Zustandsänderung (das ist len. der Mailempfang) die eingetragenen Mailempfänger als Observer-Objekte interessiert sind. Es gibt verStruktur des Beobachtermusters schiedene Mailverteiler für bestimmte Themen. Einen Mailverteiler interessiert überhaupt nicht, wer Das Subjekt kennt seine Beobach- genau seine Nachrichten empfangen möchte. Er ist ter und bietet Schnittstellen zum nur dafür zuständig, E-Mails zu empfangen und diese Hinzufügen und Entfernen von Be- an die registrierten Mailempfänger weiterzuleiten. obachtern. Die Aktualisierungsschnittstelle des Beobachters bil- Sobald der Mailverteiler eine neue E-Mail empfängt, det die Methode update(). Ein macht er mit setChanged() auf die Änderung seikonkretes Subjekt speichert den nes Zustands aufmerksam. Dann wird mit notifyfür einen konkreten Beobachter Observers(E-Mail) eine Benachrichtigung an relevanten Zustand und benachrich- die registrierten Observer geschickt und die E-Mail tigt über notify() die angemel- direkt weitergeleitet. deten Beobachter, wenn sich sein Zustand ändert. Dazu ruft das kon- Letzteres entspricht nicht ganz dem Strukturmuster krete Subjekt auf allen registrier- in Abb. 3, nach dem sich die Observer selbst den ten Beobachtern deren update()- Zustand vom Subjekt holen. Der direkte DatenMethode auf. In dieser Aktualisie- transfer über notifyObservers(Object) ist jerungsmethode holt sich der kon- doch eine gängige und praktische Variante des krete Beobachter den Zustand des Datenaustauschs. konkreten Subjekts. setChanged() setzt intern ein Flag, welches von Somit sind die Daten des konkre- notifyObservers(Object) abgefragt wird. ten Subjekts (subjectState ) Nach dem Aufruf von notifyObservers(Object) und die der angemeldeten kon- wird dieses Flag wieder gelöscht. Ausgabe 1/2002 39 • ORDIX NEWS • import JAVA java.util.Observable; public class Mailverteiler extends { private String name = null ; Observable public Mailverteiler(String name) {this .name = name;} public void empfange(String eMail) { //Zustandsänderung setChanged(); //Angemeldete Observer benachrichtigen //empfangene E-Mail weiterleiten notifyObservers(eMail); } public String toString() Dies kann ebensomanuell mit clearChanged() geschehen. notifyObservers (Object) sendet nur dann eine Benachrichtigung an die Observer, wenn auch das Flag gesetzt ist (vgl. Abb. 4). und Die Schnittstelle Observer {return name;} Die Mailempfänger müssen das Interface Observer imAbb. 4: Die Klasse Mailverteiler verschickt neu eintrefplementieren. Damit versifende E-Mails an alle angemeldeten Mailempfänger. chern sie, die Methode u p d a t e(Observable, import java.util.* ; Object) zu implementieren, die bei Änderungen vom Observable-Objekt automatisch aufgeclass Mailempfaenger implements Observer { rufen wird. Das Interface Observer besteht nur private String eMailAdress = null ; aus dieser einen Methode. Der zweite Paramepublic Mailempfaenger(String eMailAdress) { ter ist eine Object-Instanz, in unserem Beispiel this.eMailAdress = eMailAdress; (Abb. 5) die E-Mail, die mit Hilfe des Befehls } notifyObservers(E-Mail) verschickt wurde. } / / Implementierung der update()-Methode / / des Interface Observer. public void update(Observable o, Object obj) { System.out.println(eMailAdress+ “ empfängt die E-Mail \““+obj+“\“ von \““+o+“\““ ) ; } public static void main(String args[]) { //Erzeugen von Mailverteilern(Observable) // und Mailempfaengern(Observer) ; Mailverteiler java = new Mailverteiler( „[email protected]“ ) ; Mailverteiler oracle = new Mailverteiler(„[email protected]“) ; Mailempfaenger hansi = new Mailempfaenger( „[email protected]“ ) ; Mailempfaenger klaus = new Mailempfaenger( „[email protected]“ ) ; Mailempfaenger karin = new Mailempfaenger( „[email protected]“ ) ; //Anmelden der Observer beim Observable java.addObserver(hansi); java.addObserver(karin); oracle.addObserver(klaus); //Zustandsänderung der Observable java.empfange(„Sun veröffentlicht Release Candidate des JDK 1.4“) ; oracle.empfange( „Oracle 9i integriert JDeveloper 5.0“) ; //Abmelden eines Observer vom Observable java.deleteObserver(hansi); java.empfange(„Sun veröff entlicht Java Web Services Developer Pack“) ; } } Abb. 5: Die Klasse Mailempfaenger implementiert das O b s e r v e r-Interface durch update(Observable,Object). 40 [email protected] empfängt die E-Mail “Sun veröffentlicht Release Candidate des JDK 1.4“ von “[email protected]“ [email protected] empfängt die E-Mail “Sun veröffentlicht Release Candidate des JDK 1.4“ von “[email protected]“ [email protected] empfängt die E-Mail “Oracle 9i integriert JDeveloper 5.0“ von “[email protected]“ [email protected] empfängt die E-Mail “Sun veröffentlicht Java Web Services Developer Pack“ von “[email protected]“ Abb. 6: Programmausgabe nach der Ausführung der M a i l e m p f a e n g e r . c l a s s . Fazit Natürlich braucht es einige Zeit, bis man Muster kennt und sie einsetzen kann, aber das einmal erworbene Wissen lässt sich während der Entwicklung oftmals einsetzen, da die Muster ja immer wiederkehrende Probleme und deren einfache Lösung beschreiben. Man muss nur wissen, welche Muster welche Probleme lösen und kann dann recht schnell die Lösung in Form von Programmcode erfolgreich umsetzen. Ingo Vogt ([email protected]). Ausgabe 1/2002 SYSTEME & DATENBANKEN • ORDIX NEWS • Informix: Fragen an die Zukunft Durch den Kauf von Informix hat IBM für reichlich Verwirrung gesorgt. Wie sollen Informix Anwender zukünftig vorgehen? Migrieren! - Aber wohin? Das ist eine der zentralen Fragen, die wir als unabhängiges Haus und Partner der beiden bislang wesentlichen Datenbankhersteller im Open Systems Umfeld gerne mit Ihnen diskutieren wollen. Einige der wesentlichen Punkte haben wir bereits hier für Sie aufgeführt, damit Sie mehr Klarheit bekommen. Fakten Zwischen Oracle und IBM herrscht zur Zeit sicher nicht das allerbeste Klima. Stehen doch die beiden Datenbanksysteme DB2 und Oracle schon seit längerem in heftigem Wettbewerb, der in den letzten Monaten auch in großen, ganzseitigen Anzeigen für Anwender sichtbar wurde. Laut IBM (DB2 data management software Newsletter Winter 2001/ 2002) werden „Informix Produkte weiter entwickelt und gepflegt, solange dies vom Markt gewünscht wird“ und „Es wird keine erzwungene Migration zu DB2 geben“. Auch wenn diese Aussagen nicht sehr griffig sind, kann man jedoch davon ausgehen, dass Applikationen, die nur noch eine „begrenzte Lebensdauer“ besitzen, ohne Probleme weiterhin mit Informix ihr Lebensende erreichen können. DB2 ist nicht DB2:Ganz wichtig ist es, zu unterscheiden, dass es sich bei DB2 für Mainframes um ein anderes DB2 handelt als bei DB2 Universal Database. „In zukünftige Versionen von DB2 Universal Database wird auch Informix Technologie einfließen“. Warum nur in die eine Richtung? Ist DB2 technologisch veraltet und benötigt Informix Technologie? Ausgabe 1/2002 Oracle ist derzeit die am meisten verbreitete Datenbank. Das heißt zwar nicht, dass Oracle die beste Datenbank ist, aber eine Entscheidung für Oracle ist damit heute genauso gut und sicher wie eine Entscheidung für IBM Hardware in der Vergangenheit, als IBM der Hersteller mit der weitesten Verbreitung war. Fragen Zur Zeit werden Sie auf viele Dienstleister treffen, die Ihre Informix Datenbank migrieren wollen. Viele wollen vor allem nur Ihr Geld und nutzen Ihre Verunsicherung aus. Deshalb sollten Sie sich bereits • Wie lange werden meine Applikatioheute die nebenstehennen in dieser Form noch genutzt? den Fragen stellen. Kön• Plane ich eine Neuentwicklung/ nen Sie alle Fragen selbst Redesign? beantworten? Wägen Sie • Kommt für mich Standardsoftware Vor- und Nachteile sehr anstelle von Individualsoftware in sorgfältig ab. Trauen Sie Frage? keinem, der Ihnen erzählt, • Welche Vor-/Nachteile habe ich von wie einfach eine Umsteleiner „schnellen" Migration? lung ist. Jede Umgebung • Welche Datenbankplattform wird ist anders, selbst bei Stanzukünftig meine strategische Plattdardsoftware trifft man form sein? immer wieder auf Beson• Wie wirkt sich eine 1:1 Migration derheiten. Eine Migration meiner bestehenden Applikation(en) ist immer ein individuelles aus? und neues Projekt. • Welche Kosten bin ich bereit für eine Migration zu tragen? Wir beraten Sie gerne und • Habe ich einen Partner, der unabhänwir helfen Ihnen auch, gig ist und mir wirklich helfen will? wenn Sie sich für eine Migration oder Neuentwicklung entscheiden! Profitieren Sie von unserer Erfahrung mit den Datenbanksystemen. Fragen Sie uns z. B. auf der CeBIT oder per E-Mail: [email protected]. 41