
Weiterführende Links
Diese Reihe erklärt anhand kleiner Beispiele die Verwendung und Funktion der von Oracle zur Verfügung gestellten Objekttypen. Ziel ist es, einen schnellen Überblick über den jeweiligen Typ zu bekommen. Eine tiefgehende Ausarbeitung diverser Objekttypen bleibt anderen ORDIX News Artikeln vorbehalten. Die unterschiedlichen Typen und deren Anzahl in einer Datenbank lassen sich wie folgt ermitteln:
SELECT object_type, count(*) AS anzahl FROM dba_objects GROUP BY object_type ORDER BY object_type;
Im ersten Teil dieser Reihe besprechen wir die Objekttypen, die mit dem Buchstaben "C" beginnen:
Ein Cluster ist ein Objekt, welches die Daten von einer oder mehreren Tabellen in einem Segment speichert.
Alle Tabellen eines Clusters müssen eine oder mehrere gemeinsame Spalten enthalten, diese gemeinsamen Spalten heißen Cluster-Schlüssel. Auf dem Cluster-Schlüssel muss zwingend ein Index angelegt werden. Dieser Index heißt Cluster-Index und ist vom Objekttyp Index. Der Cluster sorgt dafür, dass Daten aller Tabellen mit gleichem Cluster-Schlüssel in denselben physikalischen Blöcken liegen.
CREATE CLUSTER geldautomat_clu ( automat_id NUMBER(6) ) SIZE 512; CREATE TABLE geldautomat ( automat_id NUMBER(6), standort VARCHAR2(64) ) CLUSTER geldautomat_clu( automat_id ); CREATE TABLE geldautomat_inhalt ( automat_id NUMBER(6), fach_id NUMBER(2), fach_inhalt NUMBER(6), fach_anzahl NUMBER(4) ) CLUSTER geldautomat_clu( automat_id ); CREATE INDEX geldautomat_idx ON CLUSTER geldautomat_clu; |
| Abb. 1: Befehlssequenz für zwei Tabellen zum Anlegen eines Clusters. |
Ein Cluster ist besonders dann interessant, wenn die Tabellen im Cluster häufig verknüpft (JOIN) und über den Cluster-Schlüssel angesprochen werden. Technisch gesehen findet also eine Optimierung des Join auf physikalischer Ebene statt, ohne das logische Datenmodell zu ändern.
Besonders vorteilhaft ist es, wenn die Größe
aller Zeilen zu einem Cluster-Schlüssel bekannt ist, dann kann beim Erstellen des Clusters der entsprechende Speicherplatz reserviert werden. Dies geschieht mit dem Schlüsselwort SIZE. Aus Sicht der Anwendung ist der Cluster
also dann interessant, wenn bei der 1:n-Beziehung die Zahl n eine Konstante ist. Im folgenden Beispiel gehören z. B. zu jedem Geldautomaten
eine feste Anzahl an Fächern für Geldscheine.
Beim Anlegen der Cluster-Tabellen wird nun die Zuordnung zum Cluster und der Cluster-Schlüssel der jeweiligen Tabelle angegeben. Die Tabellen sind – ähnlich wie bei einer Index Organized Table – keine Segmente mehr, der Speicherplatz ist dem Cluster zugeordnet.In Abbildung 1 sind die SQL-Kommandos zu finden mit denen ein Cluster angelegt wird. Damit können alle Tabellen vollkommen transparent verwendet werden. Die Abbildung 2 zeigt die Tabellen GELDAUTOMAT und AUTOMAT_INHALT, welche zu einem Cluster zusammengeführt werden.
Wie bereits erwähnt, spielt der Cluster insbesondere bei ganz bestimmten Performance-Anforderungen seine Stärke aus. Dafür ist die Verwaltung im Detail oft schwieriger. So kommen Cluster-Tabellen beispielsweise beim Löschen nicht in den Recycle Bin. Auch die Komprimierung lässt sich auf Cluster-Tabellen nicht anwenden. Lesen Sie dazu auch den Artikel zum Titelthema "Datenkompression unter Oracle" in dieser Ausgabe.
![]() |
| Abb. 2: Darstellung eines Clusters mit zwei Tabellen. |
Eine sehr spezielle Form des Clusters ist der Sorted Hash Cluster, dessen Zugriff noch schneller ist, da dessen interne Struktur sortiert ist. Cluster finden sich in der Praxis ausgesprochen selten. Lediglich im Data Dictionary ist ein halbes Dutzend von ihnen vorhanden.
Eine Consumer Group wird im Zusammenhang mit Ressourcenplänen erstellt. Die Gruppe besteht aus einem Namen, einem Kommentar und einem Algorithmus zur CPU-Zuteilung. Der Gruppe können Sessions zugeordnet werden und die Gruppe selbst wird einem Ressourcenplan zugeordnet. Zur Erstellung und Verwaltung dient das Paket dbms_resource_manager. Etwas detaillierter wird dieser Objekttyp zusammen mit dem Objekttyp RESOURCE PLAN besprochen.
Wer kennt sie nicht, die SYS_CONTEXT Funktion, die als Nachfolger der Funktion USERENV zahlreiche Informationen über die Session zurückgibt.
Der erste Parameter der Funktion stellt dabei einen so genannten CONTEXT dar, der zweite Parameter ein Attribut dieses CONTEXT. So gibt z. B. sys_context( 'userenv', 'service_name' ) den Service zurück, über den die Session mit der Datenbank verbunden ist. Was allerdings nicht so viele Administratoren wissen, ist, dass ein CONTEXT auch mit Hilfe von SQL und PL/SQL angelegt werden kann. Dies geschieht im ersten Schritt durch Anlegen des CONTEXT.
CREATE CONTEXT mycontext USING mypackage;
Das Paket mypackage enthält nur eine oder mehrere Prozeduren, welche die Parameter des neuen CONTEXT mit Hilfe des Befehles DBMS_SESSION.SET_CONTEXT initialisieren. Die Prozeduren müssen dabei durch die Applikation aufgerufen werden. Über die Funktion SYS_CONTEXT ('mycontext', 'param1') kann dann der aktuelle Wert ermittelt werden.
Ein CONTEXT wird häufig verwendet, um Fine Grained Access Control zu implementieren. Ein interessantes Sicherheitsmerkmal im Zusammenhang mit der so genannten Virtual Private Database.
HinweisIn der Oracle Dokumentation gibt es keine Auflistung aller Objekttypen. Die Informationen zu den diversen Ojekttypen müssen an verschiedenen Stellen nachgelesen werden. Der Oracle Database Administrator‘s Guide gibt im Part IV "Schema Objects", Kapitel 13 "Managing Schema Objects" eine Einführung in die wichtigsten Objekte. Im Database Reference Guide werden die verschiedenen Data Dictionary Views erläutert. Dabei gibt dba_objects einen Überblick und meist findet sich auch eine View dba_<object_type>. Für spezielle Objekttypen ist meist eine gesonderte Dokumentation zu verwenden. So findet sich im Application Developer‘s Guide eine gute Einführung in Large Objects und im Data Warehousing Guide eine Einführung in Dimensions und Materialized Views. |
In der nächsten Ausgabe geht es weiter mit "D" wie Database Link.
Martin Hoermann (info@ordix.de).