Erweiterung eines Werkzeuges zur Datenbank-Administration f ur Oracle 8 in Java

Die Seite wird erstellt Pierre-Oliver Weller
 
WEITER LESEN
Erweiterung eines
      Werkzeuges zur
Datenbank-Administration
   für Oracle 8 in Java

            Studienarbeit von
               Marcus Heeb
                   und
             Tobias Kischkat
      im Rahmen des Studiengangs
           Mathematik mit der
        Studienrichtung Informatik
       an der Universität Hannover

                Betreuer:
          Prof. Dr. Udo Lipeck
        Dipl.-Math. Thomas Esser

      Hannover, den 19. Januar 1999
ii
Inhaltsverzeichnis

1 Einleitung                                                                                                                          1
  1.1 Aufgabenstellung . . . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    1
  1.2 Gliederung . . . . . . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    2
  1.3 Verwendete Werkzeuge . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    2
  1.4 Typographische Konventionen            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    3

2 Konzepte und Veränderungen                                                                                                        5
  2.1 Allgemeines . . . . . . . . . . . .            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   5
  2.2 Rollen und Rechte in Oracle . . .              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   5
  2.3 Anfrageoptimierung . . . . . . .               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   6
  2.4 Gemeinsame Baumzeichenroutine                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   8
  2.5 Property-Dateien . . . . . . . . .             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   8
  2.6 Veränderungen an Dato . . . . .               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   9
  2.7 Veränderungen zu ODDIS . . . .                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   9

3 Benutzerhandbuch                                                                                                                   13
  3.1 Allgemein . . . . . . . . . . . . . .              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   13
  3.2 Programmstart . . . . . . . . . . .                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   13
  3.3 Am Anfang ist ein Fenster . . . . .                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   14
  3.4 Die Anzeige des Anfrageergebnisses                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   16
  3.5 Statistiken . . . . . . . . . . . . . .            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   16
  3.6 Zugriffspläne . . . . . . . . . . . .             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   20
  3.7 Benutzerverwaltung . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   21

4 Implementierung                                                                                                                    27
  4.1 Package appl.odto . . . . . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   27
  4.2 Package appl.optimize . . .            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   29
  4.3 Package appl.security . . .            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   34
  4.4 Package util.win . . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   48
  4.5 Veränderte Klassen von Dato           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   53

5 Installationshandbuch                                                                                                              55
  5.1 Java . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   55
  5.2 Entpacken des Archivs . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   55
  5.3 Der CLASSPATH . . . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   55
  5.4 Das Startskript . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   56
  5.5 Die neuen Systemtabellen       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   56
  5.6 Administratoren . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   56
iv                                                                             INHALTSVERZEICHNIS

     6 Anpassung                                                                                                                       57
       6.1 Sprache . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   57
       6.2 Neue Versionen von Oracle       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   57
       6.3 Datumsformat . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   57
       6.4 Ergebnisfenster . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   58

     Literaturverzeichnis                                                                                                              58
Kapitel 1

Einleitung

1.1     Aufgabenstellung
In der vorliegenden Studienarbeit besteht die Aufgabe darin, das Softwaretool Da-
to zu erweitern. Dato ist im Rahmen einer Studienarbeit von Arnim von Helmolt
[He98] entstanden und ist größtenteils eine Umsetzung des Programms ODDIS auf die
Programmiersprache Java. ODDIS ist ein am Institut für Datenbanken im Rahmen
mehrerer Studien- und Diplomarbeiten [BS95] entstandenes Programm, das eine
graphische Benutzeroberfläche zur Arbeit mit dem Datenbankmanagementsystem
Oracle 7 bietet. Es bietet u.a. einen einfachen Zugang zu den Oracle-Systemtabellen,
Funktionen zur Benutzerverwaltung, die Möglichkeit, Anfragen auszuführen und sich
Zugriffspläne sowohl tabellarisch als auch graphisch als Baumstruktur anzeigen zu
lassen sowie Informationen über logische und physische Speicherstrukturen der Da-
tenbank und die Belegung der vom System verwendeten Festplatten. Geschrieben
wurde ODDIS in der Sprache Tcl/Tk.
    Während ODDIS für die Version 7 des Oracle-RDBMS entwickelt wurde, ver-
folgt Dato den Ansatz, möglichst unabhängig vom Datenbankmanagementsystem
zu bleiben. Dies wird dadurch erreicht, daß Teile der Menüs sowie alle Anfragen
aus Property-Dateien ausgelesen werden und nicht fest ins Programm eincodiert
sind. Durch Änderung dieser Dateien kann Dato ohne Neukompilierung an neue
Datenbankmanagementsysteme angepaßt werden.
    Nun ist seit einiger Zeit Oracle in der Version 8 erhältlich, das als erste Version
objekt-relationale Erweiterungen enthält. Aufgabe ist es nun u.a., die Anpassung
an diese Version vorzunehmen und insbesondere die Anzeige von Objektdatentypen
mit ihren Attributen und Methoden zu ermöglichen.
    Außerdem besteht Dato nur aus dem Kern von ODDIS: es ermöglicht einen ein-
fachen inspirierenden Zugriff auf das Data-Dictionary-System. ODDIS hat aber im
Laufe der Zeit viele Erweiterungen erhalten. Die Aufgabe besteht nun weiterhin
darin, die ODDIS-Erweiterungen für die Benutzer- , Rechte- und Benutzergruppen-
verwaltung (Studienarbeit von Ralf Lilischkis, 1997, [Li97]) und die Analyse von
Zugriffsplänen (Studienarbeit von Regine Kasten, 1996, [Ka96]) in Java als Erwei-
terung von Dato zu implementieren. Als Ergebnis soll das neue Programm ODTO
(Oracle Data-Dictionary Tool) entstehen.
    Die Benutzerverwaltung besteht dabei im Wesentlichen aus Dialogen zum einfa-
chen Einrichten, Ändern und Löschen von Benutzern, Rollen und Profilen. Es wer-
den Benutzergruppen eingeführt, um Änderungen an einer Menge von Benutzern auf
einmal durchführen zu können und das Erstellen von vielen Benutzern mit gleichen
Einstellungen zu ermöglichen. Mit diesem Teil der Arbeit hat sich hauptsächlich
2                                                                           Einleitung

    Tobias Kischkat befaßt.
       Die Zugriffsplananalyse besteht aus einem Teil, mit dem das Berechnen von
    Statistiken zu Tabellen, Indexen etc. durchgeführt werden kann und einem Teil,
    der Zugriffspläne zu einer Anfrage erstellt und auch grafisch in Form eines Baumes
    anzeigt. Aus der Aufgabenstellung von 1996 wurde der Teil ausgenommen, der sich
    auf die Analyse von Datenbankdateien im Filesystem des Datenbankservers und
    dessen Festplattenkapazitäten bezieht. Hiermit hat sich Marcus Heeb beschäftigt.

    1.2    Gliederung
    Kapitel 1 gibt einen kurzen Überblick über die Aufgabe dieser Studienarbeit, sowie
    über die verwendeten Werkzeuge, die bei der Bearbeitung der Aufgabe verwendet
    wurden.

    Kapitel 2 erläutert einige grundlegende Konzepte, die bei der Implementierung von
    ODTO genutzt wurden.
        Außerdem werden die an Dato vorgenommenen Änderungen, die zur Implemen-
    tierung der neuen Funktionen nötig waren, sowie die Veränderungen in der Bedie-
    nung bezüglich ODDIS beschrieben.

    Kapitel 3 beschreibt die Benutzung von ODTO.

    Kapitel 4 zeigt einen Überblick über die implementierten Klassen mit ihren gegen-
    seitigen Abhängigkeiten.

    Kapitel 5 beschreibt, was vor dem ersten Start von ODTO zu tun ist.

    Kapitel 6 zeigt einige Möglichkeiten, wie das Programm ohne Neukompilierung
    verändert werden kann, um es dem Geschmack des Benutzers anzupassen.

    1.3    Verwendete Werkzeuge
    ODTO wurde mit Hilfe des von Sun vertriebenen Java Developer Kits (JDK) in der
    Version 1.1.6 in Java als Applikation implementiert. Zum Compilieren wurde der sehr
    schnelle Java-Kompiler Jikes der Firma IBM benutzt. Desweiteren wurden die am
    Institut für Datenbanken und Informationssysteme entwickelten Programme ODDIS
    und Dato und natürlich das DBMS Oracle 8, für das ODTO entwickelt wurde,
    verwendet.
1.4 Typographische Konventionen                                              3

1.4    Typographische Konventionen
Folgende Schrifttypen werden in dieser Arbeit verwendet:

  Schrifttyp                    Verwendung für
  Schreibmaschine               Kommandos, Dateien und Quelltexte
  Schreibmaschine geneigt       Packages
  fett serifenlos               Klassen und Interfaces
  serifenlos                    Objekte, Attribute, Methoden und Argumente
  Kapitälchen                  SQL-Kommandos
  geneigt                       Variablen und Platzhalter in SQL-Kommandos
4   Einleitung
Kapitel 2

Konzepte und Veränderungen

2.1     Allgemeines
Während Dato noch unabhängig vom verwendeten Datenbankmanagementsystem
war, mußte dieser Ansatz bei der Implementierung von ODTO leider aufgegeben
werden, da die weitergehenden Funktionen von ODTO nicht mehr unabhängig vom
DBMS zu realisieren waren.

2.2     Rollen und Rechte in Oracle
2.2.1   Rollen
Eine Rolle kann wie ein Benutzer gehandhabt werden. Es können ihr System- und
Objektprivilegien vergeben werden. Durch das Vergeben einer Rolle an einen Be-
nutzer erhält dieser Benutzer alle Privilegien der Rolle. Dabei ist zu beachten, daß
auch einer Rolle eine Rolle zugewiesen werden kann. Wenn man dieses Prinzip öfter
anwendet, können komplexe Abhängigkeiten zwischen den Rollen entstehen. Um
sich hier einen Überblick verschaffen zu können, sollen diese Rollenabhängigkeiten
grafisch in Form eines Baumes angezeigt werden können. Da die Rollenabhängigkei-
ten aber einen zyklenfreien gerichteten Graphen bilden, wird dieser Graph in einen
Baum transformiert, was zur Folge hat, daß einzelne Knoten evtl. mehrfach auftre-
ten. Es ist zu beachten, daß Oracle verhindert, daß die Rollenabhängigkeiten einen
Zyklus bilden.
    Benutzern, die nur auf bestimmte Teile der Datenbank Zugriff haben sollen,
weist man eine Rolle zu, die dem Benutzer dann auf einmal alle gewünschten Rechte
vergibt. So z.B. die Rolle DBA, die einem Benutzer die Rechte zur Datenbankadmi-
nistration gibt.
    Bei Rollen ist zwischen default-Rollen und nicht-default-Rollen zu unterscheiden.
Eine default-Rolle ist mit dem Einloggen eines Benutzers in die Datenbank sofort
aktiviert. Dann ist in keinem Fall eine Passworteingabe zur Aktivierung der Rolle
nötig. Rollen, die nicht default-Rollen eines Benutzers sind, müssen erst aktiviert
werden. Dazu ist evtl. auch noch die Eingabe eines Passwortes nötig.

2.2.2   Privilegien
Privilegien enthalten das Recht, bestimmte Bereiche der Datenbank lesen oder
verändern zu dürfen. Hier werden System- und Objektprivilegien unterschieden.
6                                                     Konzepte und Veränderungen

    Objektprivilegien beziehen sich auf ein ganz bestimmtes Datenbankobjekt (Tabelle,
    Sicht, Objekttyp etc.) eines bestimmten Datenbankschemas.
        Systemprivilegien sind allgemeine Rechte wie unlimitierter Speicherplatz, das
    Recht zum Erstellen bestimmter Datenbankobjekte, Benutzern, Rollen etc.

    2.2.3   Gruppen
    Gruppen sind nicht von Oracle unterstützt. Gruppen bestehen aus einer Menge von
    Benutzern, die gemeinsam verwaltet werden können. Es besteht nicht einmal der
    Zwang, daß die Benutzer gleiche Rechte oder Einstellungen haben müssen. Gruppen
    eignen sich zum Verwalten von Studenten, die zum Bearbeiten von Übungen einen
    Datenbankaccount haben sollen. So kann der Administrator alle Benutzer mit einem
    Befehl löschen, ihre Rechte ändern oder ihre Einstellungen (Tablespaces, Profile
    usw.) festlegen.
        Außerdem ist ein automatisches Erstellen einer Menge von Benutzern vorgese-
    hen. Diese Benutzer können sofort einer Gruppe zugewiesen werden. Die erstellten
    Benutzernamen bestehen aus einem Namanspräfix und einer fortlaufenden Nummer.
    Falls dies gewünscht ist, werden zufällige Passwörter erstellt, den neuen Benutzern
    zugewiesen und zum Mitteilen an den Administrator in einer Systemtabelle gespei-
    chert.

    2.3     Anfrageoptimierung
    2.3.1   Grundlagen
    Ziel der Anfrageoptimierung ist es, das Resultat einer Anfrage innerhalb einer
    möglichst kurzen Zeit unter möglichst geringem Resourcenaufwand zu liefern, al-
    so unter anderem, die bei der Bearbeitung benötigten Zwischenergebnisse möglichst
    klein zu halten.
        Unter Oracle gibt es dazu zwei verschiedene Methoden, nämlich die regelbasierte
    und die kostenbasierte Optimierung.
        Bei dem regelbasierten Ansatz wird der Zugriffsplan zur gestellten Anfrage mit-
    tels fest im System implementierter Regeln erstellt. Grundlage sind dabei vor allem
    die Regeln der algebraischen Optimierung. Diese besagen zum Beispiel, daß Selek-
    tionen möglichst früh ausgeführt werden sollen, um nicht benötigte Daten so früh
    wie möglich aus der Ergebnismenge zu streichen und damit das Datenaufkommen
    gering zu halten. Das gleiche Ziel verfolgt der Ansatz, Projektionen nach innen zu
    verschieben, um nicht benötigte Spalten sofort zu streichen. Sie sollten aber nicht
    vor Selektionen ausgeführt werden.
        Soll nun beispielsweise ein Verbund über zwei Tabellen ausgeführt werden, bei
    dem noch weitere Bedingungen an die Ergebnistupel gestellt werden, so sollten
    zunächst aus beiden Tabellen nur die Tupel ausgewählt werden, die diese Bedin-
    gungen erfüllen. Danach sollten die nicht benötigten Spalten entfernt werden, und
    mit diesen reduzierten Tabellen kann dann der Verbund ausgeführt werden. Sowohl
    der Daten- als auch der Berechnungsaufwand sind damit wesentlich geringer als
    wenn man erst den Verbund durchführt und dann die Selektionen und Projektionen
    auf die gewünschten Spalten ausführt.
        Der kostenbasierte Ansatz benötigt Statistiken zu den an der Anfrage beteiligten
    Objekten. Diese enthalten z.B. Angaben über die Anzahl der Tupel einer Tabelle
    oder die Anzahl verschiedener Werte bei Indexen.
2.3 Anfrageoptimierung                                                                     7

    Der Optimierer erstellt dabei zu einer Anfrage mehrere Zugriffspläne und wählt
dann aufgrund der Statistiken den Plan mit den geringsten Bearbeitungskosten aus.
Wichtig dabei ist, daß die Statistiken möglichst auch den tatsächlichen Gegebenhei-
ten entsprechen. Deshalb sollten diese Statistiken in regelmäßigen Abständen und
insbesondere nach größeren Änderungen aktualisiert werden.

2.3.2    Statistiken
Die kostenbasierte Optimierung steht nur zur Verfügung, wenn zu mindestens einem
bei der Anfrage beteiligten Objekt (Tabellen, Indexe, Cluster) Statistiken vorhan-
den sind. Diese können mittels folgender Anfrage berechnet werden:

      analyze table|index|cluster  compute statistics

Bei großen Tabellen ist eine Berechnung evtl. zu aufwendig. Daher können Statistikbe-
rechnungen auch anhand eines Teiles der Tabelle ausgeführt, also geschätzt werden.
Dabei kann die Anzahl der verwendeten Zeilen oder ein Prozentsatz spezifiziert wer-
den:

     analyze table|index|cluster  estimate statistics
                    [sample  rows|percent]

Statistiken können auch gelöscht werden, und zwar mit:

        analyze table|index|cluster  delete statistics

All diese Funktionen stehen unter ODTO menügeführt zur Verfügung.

2.3.3    Zugriffspläne
Oracle erstellt für jede Anfrage unter einem vorher bestimmten Optimierungsziel
einen Zugriffsplan. Dieser enthält Informationen über die einzelnen Schritte, die bei
der Abarbeitung der Anfrage ausgeführt werden.
    Die Ausgabe dieser Zugriffspläne ist nun sinnvoll, um z.B. zu prüfen, ob ein Index
zu einer Tabelle auch tatsächlich bei der Bearbeitung der Anfrage benutzt wird.
    Um so einen Plan auszugeben, geht man unter Oracle folgendermaßen vor:
  1. Optimierungsziel wählen mit
      alter session set optimizer goal = ALL ROWS|FIRST ROWS|CHOOSE|RULE
      Mit dem Optimierungsziel bestimmt man die Art der Erstellung des Zugriffs-
      plans. Bei RULE wird die regelbasierte Optimierung verwendet. FIRST ROWS und
      ALL ROWS entsprechen der kostenbasierten Optimierung, wobei bei FIRST ROWS
      auf die kürzeste Antwortzeit (also die Zeit, bis das erste Ergebnistupel er-
      scheint), bei ALL ROWS auf den besten Datendurchsatz hin optimiert wird.
      CHOOSE schließlich ist die Systemvoreinstellung und bewirkt die Verwendung
      der kostenbasierten Optimierung mit ALL ROWS falls zu mindestens einem An-
      frageobjekt Statistiken vorhanden sind, ansonsten wird die regelbasierte Op-
      timierung verwendet.

  2. Plan erstellen und im PLAN TABLE speichern mit
      explain plan set statement id = ´id´ into PLAN TABLE for ´Anfrage´
8                                                   Konzepte und Veränderungen

      3. Den Plan anzeigen, z.B. mit
          select * from PLAN TABLE where STATEMENT ID = ´id´

        Genau dies kann mit ODTO wesentlich komfortabler ausgeführt werden. Insbe-
    sondere wird dabei der Plan mit Einrückungen angezeigt, so daß die Reihenfolge der
    Abarbeitung besser zu erkennen ist. Da solche Pläne zum Teil sehr groß und damit
    unübersichtlich werden, hat man unter ODTO zusätzlich die Möglichkeit, solche
    Pläne graphisch als Baumstruktur darzustellen. Außerdem können Zugriffspläne in
    einer Textdatei gespeichert werden.

    2.4     Gemeinsame Baumzeichenroutine
    Da sowohl die Abhängigkeiten der Rollen zueinander als auch die Zugriffspläne zu
    Anfragen als Baumstruktur dargestellt werden, wurde hierfür eine gemeinsame Rou-
    tine verwendet.
        Diese befindet sich daher im Package util.window und wurde nicht einem der
    neuen Packages appl.optimize und appl.security zugeordnet.
        Die verwendeten Klassen sowie der Algorithmus zur Baumdarstellung sind im
    Kapitel 4 beschrieben.

    2.5     Property-Dateien
    Es wurde versucht, in ODTO möglichst keine Strings fest hineinzucodieren, um ein
    maximal veränderbares Programm zu erhalten, ohne das Programm neu übersetzen
    zu müssen. Einen Ausblick über die Veränderbarkeit von ODTO gibt das Kapitel 6.

    2.5.1   String-Properties
    Die Datei Strings.properties enthält alle Beschriftungen von Knöpfen, Labels
    etc. und sämtliche nicht-fatalen Fehlermeldungen. Es gibt einen ersten Abschnitt
    mit oft benötigten Strings (z.B. OK, Cancel, Add), die von allen Klassen benutzt
    werden. Danach folgen Strings, die nur von einzelnen Klassen benutzt werden (Feh-
    lermeldungen, Fenstertitel etc.).

    2.5.2   SQL-Properties
    Es wurden zu den bestehenden Dateien mit SQL-Properties zwei neue Dateien ge-
    schaffen. Sie heißen SecuritySQL.properties und OptimizeSQL.properties. Wie
    den Namen zu entnehmen ist, gehören sie zu den neuen Packages appl.security
    und appl.optimize. Diese Dateien enthalten aber nicht nur komplette SQL-Anfragen,
    sondern auch weitere Informationen über Spaltennamen bei Anfrageergebnissen,
    oder Objektprivilegien. Im Normalfall steht vor jeder Stringzeile eine Kommentar-
    zeile, die angibt, was der String leisten soll. So kann das Programm einfach an
    veränderte Systemtabellen, neue Datenbankversionen oder sonstige Umstrukturie-
    rungen angepaßt werden.
        Die meisten angegebenen SQL-Anfragen enthalten Platzhalter der Form $WERT.
    Diese werden von ODTO durch die aktuellen Parameter ersetzt. Wenn ein String
    verändert wird, dann muß er hinterher die gleichen Platzhalter (in der gleichen
    Anzahl, aber beliebiger Reihenfolge) enthalten.
2.6 Veränderungen an Dato                                                            9

2.6     Veränderungen an Dato
In Dato wurden die aus ODDIS bekannten Menüs hinzugefügt. Einige schon be-
stehende Klassen mußten um ein paar Methoden und Variablen erweitert werden.
Näheres dazu wird im Abschnitt Implementierung“ erläutert.
                               ”

2.7     Veränderungen zu ODDIS
Die Erweiterungen des Data-Dictionary wurden von ODDIS übernommen, um eine
 Abwärtskompatiblität“ zu von ODDIS eingerichteten Benutzern zu erhalten. Es ist
”
also vor dem ersten Benutzen einer Datenbank mit ODTO die Skriptdatei von
ODDIS auszuführen, die die neuen Systemtabellen für die Benutzerinformationen
erstellt.Vom Datenbank-Package MANAGE USERS wird kein Gebrauch gemacht,
außer von der darin enthaltenen Prozedur check tableinfos, die die Konsistenz
der neuen Systemtabellen sicherstellt.

2.7.1   Veränderungen an der Benutzerverwaltung
Beim Erstellen von einzelnen und mehreren Benutzern ist es nun möglich, die Option
 Password expire“ zu aktivieren (Paßwort des Benutzers muß geändert werden).
”
Beim Erstellen oder Ändern von Benutzern kann der Benutzeraccount auch gesperrt
und wieder freigegeben werden (account lock).
    Das Zuweisen von Objektprivilegien an einen Benutzer wurde vereinfacht: man
muß nicht mehr in einem Fenster das Objekt festlegen und dann in einem überge-
ordneten Fenster die betreffenden Rechte auswählen. In einem dreigeteilten Fenster
kann man nacheinander Schema, Objekt und Rechte wählen und zuweisen. Aus
den auswählbaren Schemaobjekten wurden Cluster, Index, Trigger und Package body
entfernt, da die Oracle-Dokumentation gar keine Privilegien an diesen Schemaobjek-
ten vorsieht. Dafür wurden folgende Schemaobjekte neu aufgenommen: Procedure,
Snapshot und Type. Diese waren in ODDIS nicht vorhanden, Oracle8 sieht dort aber
Privilegien vor.
Zusammengefaßt können also an diesen Objekten Privilegien vergeben werden:
   • Table
   • View
   • Sequence
   • Procedure
   • Function
   • Package
   • Snapshot
   • Synonym
   • Type
10                                                   Konzepte und Veränderungen

     Das Gruppenmenü wurde umstrukturiert: es enthält nun
        • Create Group
        • Alter Group
        • Drop Group
        • Add Privileges
        • Revoke Privileges
        • Edit Usersettings (Einstellungen von alter user)

     Zuweisungen von Benutzern zu Gruppen finden nun in Create Group“ und Al-
                                                            ”                    ”
     ter Group“ statt. Etwaige Inkonsistenzen zwischen den Privilegien der Benutzer
     einer Gruppe führen zu folgender Vereinbarung: Es werden bei Add Privileges
     die Privilegien als schon zu den Gruppenmitgliedern zugewiesen angezeigt, die al-
     le Gruppenmitglieder zugewiesen bekommen haben (Schnittmenge der Privilegien
     aller Gruppenbenutzer). Bei Revoke Privileges wird die Vereinigungsmenge aller
     Privilegien der Gruppenbenutzer als Menge der entziehbaren Privilegien angezeigt.
         Das Erstellen und Bearbeiten von Profiles wurde um einige Optionen erweitert.
     Einstellbar sind nun zusätzlich:
         • PASSWORD LIFE TIME
         • PASSWORD REUSE TIME
         • PASSWORD REUSE MAX
         • PASSWORD LOCK TIME
         • PASSWORD GRACE TIME
         • PASSWORD VERIFY FUNCTION

     Das Programm stellt dabei sicher, daß PASSWORD REUSE TIME und PASSWORD REUSE MAX
     nicht gleichzeitig limitiert sind.

     2.7.2   Veränderungen an der Zugriffsplananalyse
     Bei der Zugriffsplananalyse wurden einige Menüs umgestellt:
        • Der Menüpunkt zum Erstellen eines Plans befindet sich nicht mehr unter
          SQL-Actions/Explain, sondern unter Optimize/Explain.
        • Die Berechnung der Statistiken erfolgt unter Optimize/Analyze anstatt im
          Analyze-Menü bei den User-Objects.
        • Bei der tabellarischen Anzeige der Zugriffspläne wurden die Menüs Object,
          ShowTree und File zu einem Menü Plan zusammengefaßt.
        • Die Funktionen bei der graphischen Anzeige des Zugriffsplans sind jetzt nicht
          mehr über die drei Maustasten, sondern über ein Popupmenü erreichbar.
2.7 Veränderungen zu ODDIS                                                           11

2.7.3     Veränderungen an den Navigationsmöglichkeiten
Die Möglichkeiten, von einem Datenbankobjekt zu dazu in Beziehung stehenden
anderen Datenbankobjekten über die Popupmenüs zu navigieren, sind in der nach-
folgenden Zeichnung zu sehen. Zu beachten sind dabei die neuen Oracle8-spezifischen
Informationen zu Objektdatentypen.

                           constraints               tablespaces

                                   tables        indexes

                   views                                        columns

                  grants                                        types

                               users                 triggers

                                            source

               functions
                                 packages            methods       attributes
               procedures

        Abbildung 2.1: Navigationsmöglichkeiten zwischen Datenbankobjekten
12   Konzepte und Veränderungen
Kapitel 3

Benutzerhandbuch

3.1     Allgemein
Die Abschitte 3.2 bis 3.4 sind beinahe unverändert der Studienarbeit von Arnim von
Helmolt entnommen, um eine zusammenhängende Dokumentation zu erhalten.
    Da sich ODTO in weiten Teilen an ODDIS orientiert, besonders auch in der
äußeren Erscheinung, werden die groben Bedienungsstrukuren nicht näher erläutert
und sind entsprechend in der ODDIS -Dokumentation nachzulesen. Auch das gra-
phische Hilfesystem wurde nicht implementiert, dies bleibt als zukünftige Erweite-
rungsmöglichkeit.

3.2     Programmstart

                            Abbildung 3.1: Loginfenster

   Beim Start des Programms erscheint ein Fenster, in welchem
   •   der verwendete JDBC-Treiber,
   •   die zugehörige komplette URL,
   •   der Benutzer des DBS und
   •   sein zugehöriges Paßwort

  eingegeben werden können. Der standardmäßige JDBC Treiber und die passende
URL sind schon vorgegeben und können im Bedarfsfall geändert werden. Hierfür ist
14                                                                 Benutzerhandbuch

     gegebenenfalls die JDBC-Dokumentation zur Hilfe zu nehmen.

     3.3     Am Anfang ist ein Fenster

                      Abbildung 3.2: Das Hauptfenster (DBMS Oracle)

         Prinzipiell ist das Hauptfenster identisch mit dem von ODDIS. Unter der Menülei-
     ste befindet sich ein Texteingabefeld, der Editor, in welchem eigene Anfragen for-
     muliert und über den Button Execute an das DBS geschickt werden können.

     3.3.1   Die Menüleiste

                                 Abbildung 3.3: File-Menü

        Das Menü File dient dem Laden und Speichern von Anfragen. Hier ist es
     möglich, über den Menüpunkt

     New den Editorinhalt zu löschen, um eine neue Anfrage einzugeben,

     Open eine gespeicherte Anfrage in den Editor zu laden,

     Save eine eingegebene Anfrage des Editor zu speichern,

     Save As eine eingegebene Anfrage des Editor unter einem bestimmten Namen zu
          speichern,
3.3 Am Anfang ist ein Fenster                                                         15

Exit das Programm zu beenden. Dabei wird ein commit ausgeführt. Wenn dies
     nicht erwüscht ist, muß vor dem Beenden ein rollback durchgeführt werden.

    Das Menü Options dient der Einstellung des im Editor verwendeten Zeichensat-
zes.
    Die folgenden Menüs sind vom verwendeten DBMS abhängig und entsprechen
im konkret implementierten Fall denen von ODDIS.
    Das optionale Menü My Queries erscheint nur, wenn entsprechende Anfragen
aus dem Editor gespeichert sind. Diese sind dann unter My Queries immer wieder
ausführbar und können bei Bedarf gelöscht werden. Die unter dem Menü My Queries
vermerkten Anfragen bleiben nur für die Dauer der Sitzung erhalten.

                        Abbildung 3.4: Informationsfenster

    Das Help Menü zeigt vorläufig nur Informationen zum Programm an. Hier sol-
len als mögliche Erweiterungen verschiedene Hilfen angeboten werden, wie dies bei
ODDIS der Fall ist.

3.3.2   Der Editor und das zugehörige Popupmenü

                 Abbildung 3.5: Das Toolmenü des Editorfensters

    Durch das Drücken der rechten Maustaste über dem Editorfeld erscheint ein
Popupmenü, welches das Ausführen und Speichern der eingegebenen Anfrage, sowie
das Anhängen“ der Anfrage an die Menüleiste erlaubt. Dadurch ist es möglich,
     ”
häufig benötigte eigene Anfragen während einer Sitzung schnell zugreifbar zu ha-
ben. Es erscheint in der Menüleiste ein weiteres Menü My Queries, über welches
die entsprechenden Anfragen ausgeführt werden können. Beim Anhängen kann ein
16                                                                   Benutzerhandbuch

     selbstdefinierter Name vergeben werden, der als Menüname verwendet wird (siehe
     Abbildung 3.6). Der Menüpunkte Save und Save As sind identisch mit denen im
     Menü File, Execute hat die gleiche Funktion wie der Execute Button.

                     Abbildung 3.6: Dialog zur Angabe des Menünamen

              Abbildung 3.7: Dialog zum Löschen eines Menüs in My Queries

         Die gespeicherten Anfragen können auch wieder mittels des ersten Menüpunkts
     von My Queries, dem Menü Delete Query, gelöscht werden. Aus der erscheinenden
     Liste der vorhandenen Anfragen können eine oder auch mehrere Anfragen selektiert
     werden, die aus dem Menü My Queries entfernt werden sollen (siehe Abbildung 3.7).

     3.4     Die Anzeige des Anfrageergebnisses
     Das Ergebnis einer Anfrage wird in einem separaten Fenster angezeigt, welches ein
     Menü Options zur Einstellung des Schrifttyps der Anzeige und einen Button Close
     zum Schließen des Fensters besitzt. Bei Bedarf kann durch die Scrollbars der ange-
     zeigte Ausschnitt des Anfrageergebnisses verändert werden. Die Spaltenbreite kann
     durch Verschieben der Linie mit Hilfe des Mauszeigers verändert werden. Bei sehr
     großen Anfrageergebnissen wird dieses im Hintergrund eingelesen und die bereits
     vorhandenen Tupel werden angezeigt. Dabei kann sich der Programmablauf ver-
     langsamen, bis das Ergebnis vollständig eingelesen ist (siehe Abbildung 3.8).
         Mit der rechten Maustaste kann eine Zeile (nicht jedoch die Titelzeile!) selektiert
     werden und anhand des erscheinenden Menüs die Zeile in einem separaten Fenster
     angezeigt oder eine neue Anfrage gestartet werden (siehe Abbildung 3.9 und 3.10).

     3.5     Statistiken
     Um einen Zugriffsplan zu einer Anfrage mit dem Optimierungsziel der geringsten
     Kosten (FIRST ROWS bzw. ALL ROWS) zu erstellen, ist es nötig, Statistiken zu
     den an der Anfrage beteiligten Objekten zu berechnen. Diese enthalten u.a. Anga-
     ben zur Gesamtanzahl der Tupel von Tabellen und die Anzahl verschiedener Tupel.
     Sind keine Statistiken vorhanden, so steht lediglich die regelbasierte Optimierung
3.5 Statistiken                                                                         17

                  Abbildung 3.8: Anzeige eines Anfrageergebnisses

Abbildung 3.9: Menü nach Selektion einer Zeile des Anfrageergebnisses (angezeigt
werden die möglichen Anfragen des Datenbankobjekts tables

(RULE) zur Verfügung. Deshalb sollten Statistiken in regelmäßigen Abständen und
insbesondere nach größeren Änderungen erstellt werden.
    Der Menüpunkt Analyze aus dem Optimize-Menü bietet nun die Möglichkeit,
sich die Tabellen, Indexe oder Cluster des Benutzers tabellarisch anzeigen zu lassen.
Im Ergebnisfenster kann dann mit der rechten Maustaste ein Objekt markiert wer-
den. Durch anschließende Wahl eines der Punkte Compute, Estimate oder Delete
können dann Statistiken zu diesem Objekt berechnet, geschätzt oder gelöscht wer-
den.
    Die Auswahl eines der Menüpunkte öffnet jeweils einen Dialog.
    • Compute
        • ok startet die Berechnung der Statistiken zum gewählten Objekt.
        • help gibt einen kurzen Hilfstext zu dieser Funktion aus.
        • cancel bricht die Bearbeitung ab.
18                                                            Benutzerhandbuch

                       Abbildung 3.10: Anzeige eines Tupels

                          Abbildung 3.11: Analyze-Menü

     • Estimate
       Hier muß zusätzlich der Anteil der Tabelle, dem die Schätzdaten entnommen
       werden, spezifiziert werden (in Zeilen oder Prozent).
       Der Dialog enthält die folgenden Elemente
         • ein Feld zur Eingabe eines positiven, ganzzahligen Wertes.
         • zwei Knöpfe zur Entscheidung, ob die obige Angabe als Zeilenzahl oder
            als Prozentangabe aufgefasst werden soll.
         • ein Feld, in dem bei einer fehlerhaften Eingabe eine entsprechende Mel-
            dung erfolgt
3.5 Statistiken                                                                      19

                       Abbildung 3.12: Statistics-Menü

                       Abbildung 3.13: Calculate-Dialog

       • ok startet die Schätzung der Statistiken zum gewählten Objekt.
         Ist die Eingabe im Integer-Feld fehlerhaft, so wird nur eine Meldung aus-
         gegeben. Bei Prozentangaben über 100% wird der Wert intern auf 100
         gesetzt, bei Werten kleiner als 1 wird als Standardwert 50% angenom-
         men und die Berechnung gestartet.
       • help gibt einen kurzen Hilfstext zu dieser Funktion aus.
       • cancel bricht die Bearbeitung ab.

   • Delete
     Der Dialog enthält die folgenden Elemente
       • ok löscht die Statistiken zum gewählten Objekt.
       • help gibt einen kurzen Hilfstext zu dieser Funktion aus.
       • cancel bricht die Bearbeitung ab.
20                                                              Benutzerhandbuch

                            Abbildung 3.14: Estimate-Dialog

                              Abbildung 3.15: Delete-Dialog

     3.6    Zugriffspläne
     Der Menüpunkt Explain des Optimize-Menüs gibt zu der im Hauptfenster an-
     gegebenen Anfrage einen Zugriffsplan in tabellarischer Form aus. Dabei muß im
     Untermenü noch eines der vier möglichen Optimierungsziele ausgewählt werden.
        Dies sind im Einzelnen:
        • CHOOSE Sind Statistiken zu mindestens einem der beteiligten Objekte
          verfügbar, so wird der kostenbasierte Ansatz mit Optimierungsziel ALL ROWS
          benutzt. Andernfalls wird RULE verwendet.
        • FIRST ROWS Es wird hinsichtlich der besten Antwortzeit optimiert.
        • ALL ROWS Bei der Optimierung steht der beste Datendurchsatz im Vorder-
          grund.
        • RULE Es werden die fest implementierten Optimierungsregeln (z.B. die der
          algebraischen Optimierung) benutzt.

        Das Ergebnisfenster hat ein Plan-Menü mit den Menüpunkten
        • Show Tree zeigt den Plan in einer Baumdarstellung an.
        • Object zeigt Informationen zu dem vorher mit der rechten Maustaste gewähl-
          ten Objekt an. Das Objekt ist das Objekt, mit dem in der gewählten Zeile
          eine Operation ausgeführt wird. Ein Ergebnis erscheint nur, wenn dieses Ob-
          jekt nicht null ist, d.h. insbesondere nicht bei Operationen wie SORT oder
          MERGE JOIN.
        • Object Details zeigt detailierte Informationen zu dem gewählten Objekt an.
          Dabei gelten die gleichen Bedingungen wie beim Punkt Object.
        • Save Plan as speichert den Plan in Textform unter einem in einem Dateidia-
          log zu wählenden Namen ab.
3.7 Benutzerverwaltung                                                                  21

                          Abbildung 3.16: Explain-Menü

                            Abbildung 3.17: Plan-Menü

3.7     Benutzerverwaltung
3.7.1   Benutzer
Nach dem Wählen des Menüpunktes user aus dem Security-Menü erscheint ein
Fenster, das Daten zu allen Benutzern des DBMS enthält. Ausgehend von diesem
Fenster können einzelne oder mehrere Benutzer erstellt, einzelne Benutzer gelöscht,
deren Einstellungen und Rechte/Rollen eingesehen und verändert werden.
   • Einen Benutzer erstellen:
     Nach dem Auswählen von create user öffnet sich ein Fenster, in dem alle
     Einstellungen vorgenommen werden können. Das Verhalten beim Zuweisen
     von Default-Rollen ist das gleiche wie bei ODDIS: die default-role Einstellung
22                                                             Benutzerhandbuch

        Abbildung 3.18: Fenster mit der Baumdarstellung eines Zugriffsplans

       des neuen Benutzers bleibt auf ALL und die ausgewählten Rollen werden dem
       neuen Benutzer zugewiesen (und damit automatisch zu Default-Rollen). Der
       neue Benutzer wird erst nach dem Betätigen des create-Knopfes ertellt.
     • Mehrere Benutzer mit fortlaufendem Musternamen erstellen:
       Nach dem Anwählen von create set of users öffnet sich ein sehr ähnli-
       ches Fenster. Hier ist zur Erstellung der Benutzernamen ein Namenspräfix, die
       Anzahl der Zahlenstellen und Start-/Endnummer anzugeben. Es werden dann
       Namen wie Mustername0001“, Mustername0002“ u.s.w. vergeben. Wenn aus
                  ”                      ”
       Authentifikationsmethode Passwortauthentifikation angewählt wurde, dann
       werden zufällige Paßwörter vergeben. Diese werden in einer Systemtabelle
       (standardmäßig USER SET PASSWD wie bei ODDIS) abgespeichert und so
       dem Administrator zugänglich gemacht.
     • Passwortliste anzeigen:
       Die Tabelle mit den Passwörtern zu den neu erstellten Benutzern kann durch
       Anwählen des Menupunktes show password list angezeigt werden. Die Liste
       kann dann zur Weiterverarbeitung in einer Datei gespeichert und zur Sicherheit
       aus der Datenbank gelöscht werden.
     • Einstellungen eines Benutzers verändern:
       Das Fenster wird durch alter user aufgerufen, nachdem mit der rechten
       Maustaste ein Benutzer angewählt wurde und entspricht dem von create
       user bis auf die fehlende Namenseingabe. Es können nur Rollen zu Default-
3.7 Benutzerverwaltung                                                                 23

     Rollen des Benutzers gemacht werden, die dem Benutzer bereits zugewiesen
     und keine Default-Rollen sind.
   • Löschen eines Benutzers:
     Nach dem Markieren eines Benutzers mit der rechten Maustaste und dem
     Auswählen des Menüpunktes drop user wird der Benutzer nach dem Bestäti-
     gen einer Sicherheitsabfrage gelöscht. Hierbei kann die Option cascade akti-
     viert werden, die mit dem Benutzer auch alle seine Objekte löscht.
   • Privilegien und Rollen anzeigen/verändern:
      Das Auswählen des Menüpunkes edit privileges nach dem Markieren ei-

   Abbildung 3.19: Fenster zum Anzeigen und Ändern von Benutzerprivilegien

     nes Benutzers öffnet ein Fenster, das die Systemprivilegien, Objektprivilegien
     oder Rollen des gewählten Benutzers anzeigt. An drei Auswahlknöpfen kann
     man die anzuzeigende Privilegart auswählen. Mit der Maus ausgewählte Pri-
     vilegien/Rollen werden mit dem Remove-Knopf entzogen. Auch hier muß erst
     eine Sicherheitsabfrage bejaht werden. Privilegien/Rollen zuweisen geschieht
     mit dem Add-Knopf. Bei Systemprivilegien und Rollen erscheint ein kleines
     Fenster mit der Liste aller noch nicht zugewiesenen Privilegien/Rollen. Hier
     werden die gewünschten ausgewählt und nach Bestätigung dem Benutzer zu-
     gewiesen. Etwas komplizierter ist die Sache bei Objektprivilegien: es erscheint
     ein Fenster mit drei großen Listen. In der linken Liste sind alle Benutzer des
     Systems aufgeführt. Nach dem Anwählen eines dieser Benutzer erscheinen in
     der mittleren Liste alle Objekte des durch die Auswahlknöpfe gewählten Typs
     des gewählten Benutzers. Nach Auswahl eines der Objekte erscheinen in der
     rechten Liste alle noch nicht vergebenen Privilegien, die an diesem Objekt
     vergeben werden können. Hier werden dann die gewünschten Privilegien aus-
     gewählt und nach Betätigen des Add-Knopfes zugewiesen.

3.7.2   Rollen
Alle Rollen des Systems bekommt man angezeigt, nachdem im Security-Menü der
Punkt Roles ausgewählt wurde.
Die Einstellungen zu Rollen werden wie bei Benutzern getätigt.
24                                                                  Benutzerhandbuch

        • Rolle erstellen:
          Es muß ein Name für die neue Rolle und die Art der Authentifikation angege-
          ben werden.
        • Rolle ändern:
          Hier kann nur die Art der Authentifikation geändert werden.
        • Rolle Löschen:
          Die markierte Rolle wird nach Bestätigen einer Sicherheitsabfrage gelöscht.
        • Privilegien und zugewiesene Rollen:
          Das Zuweisen und Entziehen von Rechten geschieht vollständig analog zu Be-
          nuztern.
        • Baum der zugewiesenen Rollen anzeigen:
          Nach dem Markieren einer Rolle und dem Auswählen des Menüpunktes Roles
          tree wird ein Fenster geöffnet, das alle dieser Rolle direkt und indirekt zuge-
          wiesenen Rollen graphisch in Form eines Baums anzeigt. Mit einem Mausklick
          der rechten Maustaste auf eine angezeigte Rolle wird das zugehörige Fenster
          zum Anzeigen und Editieren der Privilegien geöffnet.

     3.7.3   Profiles
     Für das Anzeigen der verfügbaren Benutzerprofile ist der Menüpunkt Profiles
     zuständig.
         • Profile erstellen:
           Der Menüpunkt Create profile öffnet ein Fenster, in dem alle Limits für das
           Profile eingestellt werden können. Voreingestellt ist hier der Wert default“,
                                                                                ”
           also der Wert des Default-Profiles.
         • Profile ändern:
           Es erscheint das gleiche Fenster, es sind aber die derzeit eingestellten Werte
           angegeben und der Name kann nicht editiert werden.
         • Resourcekosten anzeigen/ändern:
           Der Menüpunkt Edit resource cost öffnet ein kleines Fenster, in dem die
           derzeitigen Kosten für die Datenbankresourcen angezeigt werden und geändert
           werden können.

     3.7.4   Benutzergruppen
     Alle eingerichteten Benutzergruppen werden durch den Menüpunkt Groups ange-
     zeigt. Benutzergruppen erleichtern die Administration von vielen Benutzern mit
     meistens (aber nicht notwendig) gleichen Rechten und Einstellungen.
         • Neue Gruppe erstellen:
           Der Menüpunkt Create group öffnet das Fenster. Es muß ein Name angege-
           ben werden, die Einträge Remarks“ und Expiredate“ können leer gelassen
                                     ”                ”
           werden. Im unteren Teil des Fensters befinden sich zwei Listen: eine mit den Be-
           nutzern, die der Gruppe zugeordnet werden sollen und eine mit allen restlichen
           Benutzern (also auch Benutzern, die bereits einer anderen Gruppe zugewiesen
           sind). Wird ein Benutzer, der bereits zu einer anderen Gruppe gehörte, der
           neuen Gruppe zugewiesen, dann wird er aus der alten Gruppe entfernt.
         • Gruppe ändern:
           Das Fenster des Menüpunktes Alter group entspricht dem von Create group.
3.7 Benutzerverwaltung                                                                25

          Abbildung 3.20: Fenster zum Erstellen einer neuen Gruppe

  • Einstellungen der Gruppenbenutzer:
    Die Einstellungen die man durch Edit usersettings tätigen kann, entspre-
    chen denen von Alter user für alle Gruppenbenutzer. Da bei den Einstel-
    lungen der Gruppenbenutzer Inkonsistenzen möglich sind, haben die Aus-
    wahlboxen einen zusätzlichen Eintrag: No change. Bleibt dieser Eintrag aus-
    gewählt, werden die betreffenden Einstellungen der Benutzer nicht verändert
    und können so inkonsistent bleiben, wenn das erwünscht ist. Bei der Auswahl
    eines anderen Auswahleintrags wird die Einstellung für alle Gruppenbenutzer
    so gesetzt, unabhängig von der vorherigen Einstellung. Bei den Default-Rollen
    werden die Rollen angezeigt, die Default-Rollen von allen Gruppenbenutzern
    sind. Entsprechend können nur Rollen zu Default-Rollen gemacht werden, die
    bereits allen Gruppenbenutzern zugewiesen sind.
  • Privilegien den Gruppenbenutzern entziehen:
    Hier gibt es jeweils einen Menüpunkt für das Entziehen und Zuweisen von
    Privilegien. Der Grund dafür sind wieder mögliche Inkonsistenzen zwischen den
    Gruppenbenutzern. Wird der Menüpunkt Revoke privileges gewählt, dann
    erscheint fast das gleiche Fenster wie bei Privilegienvergabe an Benutzer bis
    auf den fehlenden Add-Knopf. Angezeigt wird die Obermenge der Privilegien
    aller Gruppenbenutzer. Markierte Privilegien/Rollen können wie bei einzelnen
    Benutzern entzogen werden. Mit diesem Fenster kann man sich außerdem einen
    Überblick über die Rechte der Gruppenbenutzer verschaffen.
  • Privilegien an Gruppenbenutzer vergeben:
    Durch Add privileges öffnet sich das gleiche Fenster, nur diesmal ohne
    Remove- dafür mit Add-Knopf. Angezeigt wird hier aber die Schnittmenge
    der Privilegien/Rollen aller Gruppenbenutzer. Das Hinzufügen von Privilegien
    wird analog zu einzelnen Benutzern vorgenommen.
26   Benutzerhandbuch
Kapitel 4

Implementierung

Die Implementierung der Datenbankschnittstelle und die möglichst datenbankun-
abhängige Programmierung waren durch Dato schon vorgegeben und sind der Do-
kumentation der Studienarbeit von Arnim von Helmolt zu entnehmen.
   Die Hauptaufgabenteile Benutzerverwaltung“ und Zugriffsanalyse“ wurden je-
                            ”                           ”
weils als neue Packages zu Dato hinzugefügt. Die neuen Packages sind appl.security
und appl.optimize.
   Zusätzlich wurden neue Klassen in die schon vorhandenen Packages appl.odto
(vorher appl.dato) und util.window eingefügt.
   Es wurde versucht, möglichst wenig in vorhandenen Quelltexten zu verändern.

4.1       Package appl.odto
4.1.1     Allgemeine Bemerkungen
Hier wurden die beiden für die neuen Funktionen nötigen Menüs hinzugefügt.

4.1.2     Die neuen Klassen
4.1.2.1    OptimizeMenu
Diese Klasse implementiert das Optimierungsmenü für das ODTO-Hauptfenster.
Konstruktor:
   public OptimizeMenu(ResourceBundle rb, Odto odto)

Parameter:
   • ResourceBundle rb für die Beschriftungen.
   • Odto odto das Hauptprogramm.

Menüpunkte:
  • Analyze zeigt Informationen zu Tabellen, Indexen oder Clustern an und
     ermöglicht weiterhin das Erstellen bzw. Löschen von Statistiken zu den ver-
     schiedenen Datenbankobjekten.
  • Explain erstellt den Zugriffsplan zur Anfrage im Hauptfenster und zeigt ihn
     tabellarisch an.
28                                                                Implementierung

     4.1.2.2   SecurityMenu
     Diese Klasse implementiert das Sicherheits-/Benutzerverwaltungsmenü für das ODTO-
     Hauptfenster. Dieses Menü wird nur für Benutzer mit Administratorrechten und
     Rechten an den neuen Systemtabellen des Benutzers SYS angezeigt. Die Benutzer,
     die diese Rechte besitzen und Zugriff auf das Security-Menü haben sollen, werden
     in der Datei classes/appl/odto/Odto.properties aufgelistet. Näheres dazu steht
     im Installationshandbuch.
     Konstruktor:
         public SecurityMenu(ResourceBundle rb, Odto odto)

     Parameter:
        • ResourceBundle rb für die Beschriftungen.
        • Odto odto das Hauptprogramm.

     Menüpunkte:
       • User zeigt alle Benutzer des Datenbanksystems an. Dann können Benutzer
          erstellt, gelöscht, deren Rechte eingesehen und verändert werden etc.
       • Groups zeigt alle Benutzergruppen des Datenbanksystems an.
       • Profiles zeigt alle Profiles des Datenbanksystems an.
       • Roles zeigt alle Rollen in dem Datenbanksystem an.
4.2 Package appl.optimize                                                                 29

4.2       Package appl.optimize
4.2.1     Allgemeine Bemerkungen
Hier sind die Klassen zur Verwaltung von Statistiken und zum Berechnen von Zu-
griffsplänen zusammengefasst. Die Klassen für die graphische Darstellung der Zu-
griffspläne, die auch für die Darstellung von Rollenabhängigkeiten verwendet werden,
befinden sich im Package util.window.

4.2.2     Die Klassen
4.2.2.1    ExplainPlan
Klasse, die ein explain plan-Kommando ausführt und den Plan dann in Tabellen-
form anzeigt. Das anzeigende SQLResultSetView enthält ein ShowTreeMenu, das
weitere Aktionen ermöglicht. Ein Objekt dieser Klasse wird durch den Menüpunkt
ExplainPlan des Optimize-Menüs erzeugt.
Konstruktor:
   public ExplainPlan(ResourceBundle rb, Odto odto, String goal)

Parameter:
   • ResourceBundle rb für die Beschriftungen.
   • Odto odto das Hauptprogramm.
   • String goal das beim explain plan-Kommando verwendete Optimierungsziel.

                                    OptimizeMenu

                                            erzeugt
                         benutzt                      benutzt
   CommitYesNoFrame                   ExplainPlan                  HelpFrame

                         benutzt            benutzt   benutzt
           SQLPort                 SQLResultSetView                   Odto

               Abbildung 4.1: Klassen in Beziehung mit ExplainPlan

4.2.2.2    CommitYesNoFrame
Fensterklasse, die den Dialog enthält, der den Benutzer fragt, ob er damit einver-
standen ist, daß ein commit-Kommando ausgeführt wird.
   Das commit-Kommando muß nach dem Eintragen eines berechneten Zugriffs-
plans in die Tabelle PLAN TABLE erfolgen, da diese sonst für andere Benutzer
gesperrt bleibt.
Konstruktor:
   public CommitYesNoFrame(Odto odto, String question, ExplainPlan explainplan)

Parameter:
   • Odto odto das Hauptprogramm.
30                                                                  Implementierung

        • String question die im Dialogfenster anzuzeigende Frage.
        • ExplainPlan explainplan das ExplainPlan-Objekt, das dieses Objekt erzeugt hat.

     4.2.2.3    ShowTreeMenu
     Menü für das durch ExplainPlan erzeugte SQLResultSetView.
     Konstruktor:
       public ShowTreeMenu(ResourceBundle rb, Odto odto, String goal)

     Parameter:
        • ResourceBundle rb für die Beschriftungen.
        • Odto odto das Hauptprogramm.
        • String goal das beim explain plan-Kommando verwendete Optimierungsziel.
          Dies wird beim Abspeichern des Plans in eine Textdatei benötigt, da dort auch
          die Anfrage und das Optimierungsziel mit eingetragen werden.

     Menüpunkte:
       • Show Tree zeigt den Plan in einer Baumdarstellung an.
       • Object zeigt Informationen zu dem gewählten Objekt an.
       • Object Details zeigt detailierte Informationen zu dem gewählten Objekt an.
       • Save Plan as speichert den Plan in Textform unter einem zu wählenden Na-
          men ab.

                                   erzeugt
                ExplainPlan                     SQLResultSetView

                                    enthält
                      erzeugt

               ShowTreeMenu                      OptimizerTreeNode

                      erzeugt        werden angezeigt in          sendet Koordinaten

                                   erzeugt
                TreeFrame                            TreeCanvas

                  Abbildung 4.2: Klassen in Beziehung mit ShowTreeMenu
4.2 Package appl.optimize                                                                     31

4.2.2.4    TablesStatisticsMenu
Statistikmenü für das SQLResultSetView, das die Tables anzeigt.
Konstruktor:
   public TablesStatisticsMenu(ResourceBundle rb, Odto odto)

Parameter:
   • ResourceBundle rb für die Beschriftungen.
   • Odto odto das Hauptprogramm.

Menüpunkte:
  • Compute berechnet die Statistiken für die gewählte Tabelle.
  • Estimate schätzt die Statistiken für die gewählte Tabelle.
  • Delete löscht die Statistiken für die gewählte Tabelle.

                                             erzeugt
          OptimizeMenu                                                SQLResultSetView

                 erzeugt                                                  enthält
                                     TablesStatisticsMenu

                         erzeugt                                    erzeugt
                                                  erzeugt

   CalculateStatisticsFrame         EstimateStatisticsFrame           DeleteStatisticsFrame

           Abbildung 4.3: Klassen in Beziehung mit TablesStatisticsMenu

4.2.2.5    IndexesStatisticsMenu
Statistikmenü für das SQLResultSetView, das die Indexes anzeigt.
Konstruktor:
   public IndexesStatisticsMenu(ResourceBundle rb, Odto odto)

Parameter:
   • ResourceBundle rb für die Beschriftungen.
   • Odto odto das Hauptprogramm.

Menüpunkte:
  • Compute berechnet die Statistiken für den gewählten Indexe.
  • Estimate schätzt die Statistiken für den gewählten Indexe.
  • Delete löscht die Statistiken für den gewählten Indexe.
32                                                                   Implementierung

     4.2.2.6   ClustersStatisticsMenu
     Statistikmenü für das SQLResultSetView, das die Clusters anzeigt.
     Konstruktor:
        public ClustersStatisticsMenu(ResourceBundle rb, Odto odto)

     Parameter:
        • ResourceBundle rb für die Beschriftungen.
        • Odto odto das Hauptprogramm.

     Menüpunkte:
       • Compute berechnet die Statistiken für den gewählten Cluster.
       • Estimate schätzt die Statistiken für den gewählten Cluster.
       • Delete löscht die Statistiken für den gewählten Cluster.

     4.2.2.7   CalculateStatisticsFrame
     Fenster, das den Dialog zum Berechnen der Statistiken enthält. Es wird durch die
     Wahl von Calculate aus dem jeweiligen Statistics-Menü geöffnet.
     Diese Klasse enthält die statische Funktion replaceVariable, die in Anfragen, die in
     der Regel aus den Propertydateien ausgelesen werden, Variablen der Form $varia-
     ble durch einen entsprechenden Wert ersetzt. Diese Methode wird von den meisten
     Klassen des Packages benutzt.
     Konstruktor:
         public CalculateStatisticsFrame(Odto odto, SQLResultSetView rsview,
     String propname, String helpname)

     Parameter:
        • Odto odto das Hauptprogramm.
        • SQLResultSetView rsview Anfrageergebnisfenster, von dem der Aufruf ausging.
        • String propname Bezeichnung in der Propertydatei für die zu wählende Spalte
          (die, in der der Name des im SQLResultSetView gewählten Objektes steht).
        • String helpname Bezeichnung in der Propertydatei für den Hilfstext.

     4.2.2.8   EstimateStatisticsFrame
     Fenster, das den Dialog zum Schätzen der Statistiken enthält. Es wird durch die
     Wahl von Estimate aus dem jeweiligen Statistics-Menü geöffnet.
     Konstruktor:
        public EstimateStatisticsFrame(Odto odto, SQLResultSetView rsview,
     String propname, String helpname)

     Parameter:
        • Odto odto das Hauptprogramm.
        • SQLResultSetView rsview Anfrageergebnisfenster, von dem der Aufruf ausging.
        • String propname Bezeichnung in der Propertydatei für die zu wählende Spalte
          (die, in der der Name des im SQLResultSetView gewählten Objektes steht).
        • String helpname Bezeichnung in der Propertydatei für den Hilfstext.
4.2 Package appl.optimize                                                               33

4.2.2.9   DeleteStatisticsFrame
Fenster, das den Dialog zum Löschen der Statistiken enthält. Es wird durch die Wahl
von Delete aus dem jeweiligen Statistics-Menü geöffnet.
Konstruktor:
   public DeleteStatisticsFrame(Odto odto, SQLResultSetView rsview,
String propname, String helpname)

Parameter:
   • Odto odto das Hauptprogramm.
   • SQLResultSetView rsview Anfrageergebnisfenster, von dem der Aufruf ausging.
   • String propname Bezeichnung in der Propertydatei für die zu wählende Spalte
     (die, in der der Name des im SQLResultSetView gewählten Objektes steht).
   • String helpname Bezeichnung in der Propertydatei für den Hilfstext.

    Generell existiert zu allen Menüs eine entsprechende PopupMenu-Klasse, die das
gleiche Menü als Popup-Menü implementiert.
34                                                                     Implementierung

     4.3     Package appl.security
     4.3.1   Die Klasse ManageUsers
     Die Klasse ManageUsers aus dem Package appl.security ist die eine der bei-
     den statischen Klassen des Package und die daher nicht von Frame oder MyMe-
     nu abgeleitet (wie die anderen Klassen). Sie enthält die Methoden, die bei ODDIS
     als PL/SQL-Prozeduren im Datenbankpackage MANAGE USERS enthalten waren.
     Methoden von ManageUsers werden von allen Klassen benutzt, die Gruppendaten
     oder Benutzerdaten verändern.

     Es sind folgende Methoden enthalten:

        • boolean createGroup (Odto odto, ResourceBundle rbsql, String group, String
          expiredate, String remarks)

             – Erstellt eine neue Gruppe mit dem Namen group, dem Gültigkeitsdatum
               expiredate und der Bemerkung remarks.
             – Prüft, ob schon eine Gruppe mit dem angegebenen Namen existiert. Wenn
               dies der Fall ist, wird in einem Fenster eine entsprechende Fehlermeldung
               angezeigt.
             – Liefert true, falls kein Fehler auftrat.
             – Liefert false, wenn ein Fehler beim Erstellen auftrat oder es einen Na-
               menskonflikt gab.

        • boolean alterGroup (Odto odto, ResourceBundle rbsql, String group, int
          what, String value)

             – ändert Gültigkeitsdatum oder Bemerkung zur Gruppe group.
             – what kann die Werte ManageUsers.EXPIRE oder ManageUsers.REMARK
               annehmen.
             – Prüft nicht, ob die Gruppe schon existiert, da dieser Fall aufgrund des
               GUI ausgeschlossen werden kann.
             – Liefert true, falls kein Fehler auftrat, sonst false.

        • boolean dropGroup (Odto odto, ResourceBundle rbsql, String group)

             – Löscht die Gruppe mit dem Namen group.
             – Prüft nicht, ob die Gruppe schon existiert, da dieser Fall aufgrund des
               GUI ausgeschlossen werden kann.
             – Prüft, ob noch Benutzer existieren, die dieser Gruppe zugeordnet sind.
               Wenn dies der Fall ist, wird eine Fehlermeldung ausgegeben und die Grup-
               pe nicht gelöscht.
             – Liefert true, wenn die Gruppe gelöscht werden konnte.
             – Liefert false, wenn ein Fehler auftrat oder noch zugeordnete Benutzer
               existieren.

        • boolean addToGroup (Odto odto, ResourceBundle rbsql, String user, String
          group)

             – Ordnet den Benutzer user der Gruppe group zu.
4.3 Package appl.security                                                         35

      – Ein Benutzer kann zu einem Zeitpunkt immer nur einer Gruppe zugehörig
        sein.
      – Prüft nicht, ob Benutzer und/oder Gruppe existieren.
      – Liefert true bei Erfolg, sonst false.

  • boolean removeFromGroup (Odto odto, ResourceBundle rbsql, String user,
    String group)

      – Entfernt den Benutzer user aus der Gruppe group.
      – Prüft nicht, ob Benutzer und/oder Gruppe existieren.
      – Liefert true bei Erfolg, sonst false.

  • boolean alterUserInfos (Odto odto, ResourceBundle rbsql, String user, int
    what, String value)

      – Erstellt anfangs einen leeren Satz mit Benutzerinformationen, wenn zu
        dem Benutzer user noch keine Informationen gespeichert sein sollten.
      – ändert Bemerkung, Gültigkeitsdatum, Vornamen oder Nachnamen des
        Benutzers in den neuen Wert value.
      – what kann die Werte ManageUsers.EXPIRE, ManageUsers.REMARK, Manage-
        Users.FIRSTNAME oder ManageUsers.LASTNAME annehmen.
      – Prüft nicht, ob der Benutzer existiert.
      – Liefert true bei Erfolg, sonst false.

  • void performDataCheck()

      – Prüft, ob in SecuritySQL.properties die Variable
        manageusers.datacheckproc gesetzt ist. Ist der String leer, so wird
        nichts getan.
      – Sonst wird der String als parameterlose PL/SQL-Prozedur der Datenbank
        aufgerufen.
      – Die Prozedur soll die Konsistenz der Benutzer- und Gruppendaten sicher-
        stellen. Es dürfen z.B. dann keine nicht existenten Datenbankbenutzer
        einer Gruppe zugeordnet sein.
      – Die voreingestellte Prozedur ist die Prozedur check tableinfos aus dem
        ODDIS-Package MANAGE USERS, da die Speicherung der Benutzerda-
        ten von ODDIS übernommen wurde. Diese PL/SQL-Prozedur wurde nicht
        in Java implementiert, um die komplette Speicherung der zusätzlichen
        Benutzerdaten umstrukturieren zu können.
      – Wird am Anfang jeder der anderen Methoden aus ManageUsers aufge-
        rufen.
      – Wird von anderen Klassen aufgerufen, bevor sie auf alle Benutzer einer
        Gruppe zugreifen wollen (Anfrage-String manageusers.usersofgroup).
36                                                                      Implementierung

     4.3.2     Weitere implementierte Klassen und ihre Beziehungen
     Nahezu alle Klassen der Packages appl.security enthalten eine graphische Benut-
     zerschnittstelle. Diese wurde mit Hilfe des Java-Package java.awt (Abstract Win-
     dow Toolkit) implementiert. Als LayoutManager kommt dabei fast ausschließlich
     das mächtige GridBagLayout zum Einsatz. Zum Setzen der Constraints wird die
     bereits von Arnim von Helmolt eingeführte Klasse ConstraintSet benutzt (Package
     util.misc).
         Die Klassen, die bestehende Einstellungen in der Datenbank ändern können, be-
     sitzen oft eine private Methode setAllItems() ohne Parameter. Diese Methode wird
     am Ende des Konstruktors aufgerufen und hat die Aufgabe, die Objekte der graphi-
     schen Benutzerschnittstelle so einzustellen, wie es dem aktuellen Datenbankzustand
     entspricht. Die Methode stellt zahlreiche Anfragen an die Datenbank, interpretiert
     die Ergebnisse und setzt entsprechend Checkboxen, Choiceboxen, füllt Textfelder
     etc. Dies funktioniert natürlich nicht bei Passwörtern, da diese nicht aus der Da-
     tenbank abrufbar sind. Daher ist das Passwort-Eingabefeld immer leer und es gilt
     die Vereinbarung: Wird nichts eingegeben, so wird das bestehende Passwort nicht
     geändert.

     4.3.2.1    EditUserFrame

               SQLResultSetView                           Odto

                                          benutzt
                                                              benutzt
                  SQLPort            benutzt

                                erzeugt               EditUserFrame

                UsersMenu
                                                             benutzt
                                    benutzt

               EditUserFrame:                       EditUserFrame:
               AddRoleFrame                         EditQuotasFrame

                   Abbildung 4.4: Klassen in Beziehung mit EditUserFrame
4.3 Package appl.security                                                              37

Konstruktor:
   public EditUserFrame(Odto odto, SQLResultSetView rsview,
boolean create)

Parameter:
   • odto Eine Referenz auf das Hauptfenster der laufenden Applikation. über
     die zahlreichen get??-Methoden (besonders die von DBApplication geerbten)
     kann diese Klasse u.A. an Referenzen auf die String-Properties und den geöff-
     neten SQLPort kommen.
   • rsview Eine Referenz auf das übergeordnete Fenster. Von diesem werden die
     Methoden tupelSelected, getTitleRow und getSelectedTupel benutzt, um her-
     auszufinden, welchen Eintrag der Benutzer angewählt hat.
   • create Diese Klasse hat eine Doppelfunktion: sie kann als Fenster zum Ein-
     richten eines neuen Datenbankbenutzers oder zum ändern eines bestehenden
     Benutzers verwendet werden. Ist dieser Parameter true, dann ist das zu öff-
     nende Fenster Create user“ und sonst Alter user“.
                    ”                      ”
     Das Fenster ermöglicht die Einstellung des Benutzernamens (nur bei
create==true), die Art der Authentifikation, zu benutzende Tablespaces, Quotas
auf diesen Tablespaces, Profile, Status des Accounts, des echten“ Namens, Grup-
                                                           ”
penzugehörigkeit und Rollen des Benutzers.
     Die Klasse hat eine private Klasse: AddRoleFrame. Dies ist ein kleines Fenster,
das eng mit dem übergeordneten EditUserFrame verbunden ist. AddRoleFrame
öffnet sich, nachdem der Knopf zum Hinzufügen einer Rolle gedrückt wurde und
liefert eine Auswahlliste aller noch nicht vergebenen Rollen und fügt ausgewählte
Rollen zu der Liste im EditUserFrame hinzu.

4.3.2.2   EditSetUsersFrame
Konstruktor:
   public EditSetUsersFrame(Odto odto, SQLResultSetView rsview,
boolean create)

Parameter: Siehe EditUserFrame
    Das Fenster hat auch vom graphischen Aufbau große ähnlichkeit mit dem Edit-
UserFrame, unterscheidet sich aber stark in der Anwendung. EditSetUsersFrame
kann bei (create==true) eine Menge von Benutzern mit gleichen Benutzereinstel-
lungen erzeugen und gleich einer Benutzergruppe zuweisen. Es werden automatische
fortlaufende Benutzernamen vergeben, zufällige Paßwörter generiert und zugewiesen
usw. Bei (create==false) können die Benutzereinstellungen für alle Benutzer einer
Gruppe durchgeführt werden.
    Auch diese Klasse besitzt eine private Klasse AddRoleFrame. Diese unterscheidet
sich in der Implementierung von der privaten Klasse von EditUserFrame, aber nicht
in der Funktion.
Sie können auch lesen