Home ORDIX AG             Dienstleistung             Trainingsshop    Kunden / Referenzen Aktuelles    Kontakt
Home  Pfeil  ORDIX News  Pfeil  3/2006  Pfeil  Datenbanken
suche: 
Dieser Artikel wendet sich an Datenbankadministratoren und -entwickler, die einen Überblick über die Objekttypen von Oracle bekommen möchten.

Weiterführende Links

Reihe Oracle Objekttypen von A - Z (Teil I):

Oracle Objekttypen – Von Cluster bis XML

Wer eine Oracle Datenbank in der aktuellen Version installiert, findet in der View dba_objects schnell vierzig und mehr unterschiedliche Objekttypen. Für den Datenbankadministrator ist es unabdingbar, einen Überblick über diese unterschiedlichen Typen zu haben, um bei Ex- und Imports, im Fehlerfall oder bei Analysen richtig reagieren zu können.

Ziel der Artikelreihe

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;

Auf Los geht’s los

Im ersten Teil dieser Reihe besprechen wir die Objekttypen, die mit dem Buchstaben "C" beginnen:

Cluster

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.

Darstellung eines Clusters mit zwei Tabellen.
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.

Consumer Group

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.

Context

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.

Hinweis

In 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).