|
Partitionspflege mit Oracle 11g leicht gemacht
von Frank Schneede, ORACLE Deutschland GmbH
Die Technik der Partitionierung ist eigentlich nicht neu, sondern bereits mit der Oracle Datenbankversion 8 als RANGE-Partitionierung eingeführt worden. Schrittweise um
HASH-, LIST-Partitioning sowie zusammengesetzte Partitionierungsmöglichkeiten und verschiedene Maintenance-Operationen ergänzt, bietet die Partitioning Option
schon in Oracle 10g reichhaltige Möglichkeiten, große Datenmengen in Datawarehouses zu strukturieren und zu verwalten. In der neuen Datenbankversion
Oracle 11g sind die zur Verfügung stehenden Techniken erneut umfangreich erweitert worden.
Eine besonders hilfreiche Erweiterung der Partitioning Option in 11g stellen
- INTERVALL-Partitionierung
- REFERENZ-Partitionierung
dar. Die Verwaltung eines Objektes, das nach einer zeitlichen Dimension (z. B. Verkäufe nach Tag/Woche/Monat) partitioniert ist, nimmt insbesondere beim Periodenwechsel
sehr viel Zeit in Anspruch. Wenn der DBA nicht durch rechtzeitige Anlage einer neuen bzw. durch das Vorhandensein einer Default-Partition dafür Sorge getragen hat,
dass die ins DWH fließenden Daten abgelegt werden können, kommt es sogar zu Fehlern im ETL-Prozess. Ähnlich aufwändig gestaltet sich die Erweiterung
von partitionierten Tabellen, die über referentielle Integritäten (z. B. Bestellungen und Bestellpositionen) verbunden sind.
In folgendem Tipp werden die Vorteile der Verwendung von INTERVALL- und REFERENZ-Partitionierung an zwei kleinen Beispielen demonstriert.
Das erste Beispiel zeigt die Anlage einer RANGE-partitionierte Tabelle NEWSALES, die Tagesverkäufe enthält, deren Umstellung auf INTERVALL-Partitionierung und
die Automatismen dieser Partitionierungsart. Anschließend werden noch Modifikationen an der Tabellenstruktur demonstriert.
Im ersten Schritt wird die Tabelle NEWSALES angelegt. Da die Partitionierung nach einem Feld des Datentypes DATE erfolgt, muss natürlich auf die NLS-Settings
geachtet werden:
Die Versorgung der Tabelle mit Daten funktioniert einwandfrei, bis für einen Datensatz keine Zielpartition ermittelt werden kann. Es erscheint eine Fehlermeldung:
Dieser Fehler wird durch die Umstellung der starren RANGE-Partitionierung auf die sich dynamisch erweiternde INTERVALL-Partitionierung nachhaltig vermieden, die Daten
lassen sich anschließend problemlos einfügen:
Die Abfrage des Data Dictionaries zeigt, dass auch für die anderen geladenen Daten automatisch Zielpartitionen angelegt worden sind. Diese tragen jedoch
systemgenerierte Namen:
Da die Benutzung systemgenerierter Partitionsnamen möglicherweise aus Sicht der Applikation nicht gewünscht ist, muss an dieser Stelle manuell nachgearbeitet werden.
Dieses stellt jedoch kein Problem dar, denn es sind auf dieser Tabelle auch weiterhin alle Operationen möglich, die für eine Restrukturierung notwendig erscheinen,
wie z. B. MERGE oder RENAME von Partitionen. Im Data Dictionary können die Änderungen nachvollzogen werden:
Anhand dieses ersten Beispiels ist ersichtlich, welche Vorteile sich durch die Verwendung der INTERVALL-Partitionierung aus Sicht der Administration ergeben. Der kleine
Wermutstropfen der systemgenerierten Partitionsnamen ist dabei zu verschmerzen, denn wenn durch die Anwendung sprechende Partitionsnamen erwartet werden, so lässt
sich ein Automatismus entwickeln, der gegebenenfalls eine Umbenennung durchführt.
Eine INTERVALL-Partitionierung ist natürlich immer dort möglich, wo als Partitionierungskriterium ein Feld des Typs NUMBER oder DATE verwendet wird. Der folgende
Code-Abschnitt zeigt die Anlage einer solchen Tabelle, die hier nach der verkauften Menge (QUANTITY_SOLD) partitioniert ist:
Das zweite Beispiel zeigt die Anlage einer Tabelle ORDERS mit Bestellungen, die über eine Foreign Key Beziehung mit der Tabelle ORDER_ITEMS verbunden ist. Diese
Child-Tabelle wird dann REFERENZ-partitioniert. Zum Abschluß wird noch die Erweiterung der Tabellen um eine neue Partition demonstriert.
Im ersten Schritt wird die RANGE-partitionierte Tabelle ORDERS mit Bestellungen angelegt. Auch hier ist wieder auf die korrekten NLS-Settings zu achten:
Die Tabelle der Bestellungen ist nach dem Bestelldatum partitioniert und verfügt über eine Child-Tabelle, die die Bestellpositionen enthält. Zwischen den Tabellen besteht
eine Foreign Key - Beziehung und die Bestellpositionen sollen ohne redundante Speicherung des Bestelldatums auf die gleiche Weise partitioniert sein. Dieses wird durch die
in Oracle 11g neu eingeführte REFERENZ-Partitionierung erreicht:
Die eingerichtete Tabellenstruktur lässt sich über Data Dictionary Views verifizieren. Beim Abfragen der eingerichteten Partitionen wird deutlich, dass in der Child-Tabelle
mit den Bestellpositionen bereits die entsprechenden Partitionen der Bestelltabelle erzeugt worden sind:
Die angestrebte Struktur ist also nun vorhanden, allerdings kommt es auch hier zu den bekannten Fehlermeldungen, wenn Daten des aktuellen Monats (November 2008)
eingefügt werden müssen:
Da die Datenstrukturen als RANGE-Partitionen angelegt worden sind und es keine Default-Partition gibt, kommt es zu diesem Fehler. Es muss also in diesem Schritt eine
Erweiterung der Tabellen stattfinden, indem in der Parent-Tabelle ORDERS eine neue Partition angelegt wird:
Das Hinzufügen der Partition in der Tabelle ORDERS führt automatisch dazu, dass in der Child-Tabelle ORDER_ITEMS eine Partition hinzugefügt wird, wie der
Blick ins Data Dictionary zeigt:
Das gezeigte Beispiel demonstriert die Vorteile von REFERENZ-Partitionierung, nämlich
- Platzersparnis durch Vermeidung der redundanten Speicherung des Partitionierungsschlüssels
- Automatische Anlage einer Partition in der Child-Tabelle bei der Partitionspflege der Parent-Tabelle
Ein kleiner Hinweis noch zum Abschluss:
Es ist derzeit noch nicht möglich, die Methoden REFERENZ- und INTERVALL-Partitionierung miteinander zu kombinieren. Die Parent-Tabelle muss laut
Dokumentation eine bestehende
partitionierte Tabelle sein, die nach einer beliebigen Methode, außer INTERVALL-Partitionierung, aufgeteilt sein kann.
Mehr zu diesem Thema bzw. zu weiteren Themen rund um die Datenbank lesen Sie in den nächsten Ausgaben ...
Zurück zur Community-Seite
|