Mit dem Release 11.2 hat Oracle eine Erweiterung des CREATE TABLE Statements eingeführt. Es handelt sich um die verzögerte Segmenterzeugung oder DEFERRED SEGMENT CREATION.
Was macht dieses neue Feature? Wird eine neue Tabelle erzeugt, werden nur die Metainformationen angelegt, aber noch kein Segment im Tablespace erzeugt. Das bedeutet, dass eine neue Tabelle erstmal keinen Platz "verschwendet". Solange die Tabelle leer ist, ändert sich auch daran nichts. Das Segment im Tablespace wird erst angelegt, wenn die ersten Daten in die Tabelle geschrieben werden. Das gleiche gilt auch für zugehörige Indizes und Lobsegmente.
Was bedeutet das für die Praxis? Es gibt viele große Softwareinstallationen die tausende von Tabellen anlegen, jedoch nur einen Teil davon in der jeweiligen Ausbaustufe benötigen. Bis jetzt wurde für jede Tabelle sofort das zugehörige Segment angelegt. Dabei kann unter Umständen viel Platz verschwendet werden, der so nicht benötigt wird.
Es gibt natürlich auch einen Nachteil den man bedenken sollte. Der erste Insert in eine leere Tabelle dauert länger, weil das Segment angelegt werden muss.
Doch nun zur Praxis. Welche Voraussetzungen sind nötig um die verzögerte Speicherplatzbelegung zu nutzen?
Die Syntax der CREATE TABLE Anweisung hat sich um die SEGMENT CREATION Klausel erweitert.
Das Verhalten der SEGMENT CREATION Klausel ist abhängig von dem Parameter DEFFERED_SEGMENT_CREATION. Steht der Parameter auf TRUE (default), dann werden die Segmente einer neuen Tabelle automatisch verzögert angelegt. Steht der Parameter auf FALSE, werden die Segmente sofort angelegt. Dieses Verhalten kann durch Angabe der Klausel jedoch überschrieben werden.
Nun einige Beispiele zur Verdeutlichung des Verhaltens:
In diesem Beispiel wird deutlich, dass die Tabelle existiert, aber bis jetzt noch kein Speicherplatz allokiert wurde.
Im nächsten Beispiel überschreiben wir das Defaultverhalten mit der SEGMENT DEFERRED Klausel:
Mit der Klausel SEGMENT CREATION IMMEDIATE wird sofort bei der Erstellung der Tabelle auch je ein Segment für Tabelle und Index angelegt.
Und jetzt zu den ersten Inserts:
Wie erwartet dauert der erste Insert länger, weil die Segmente für Tabelle und Index erst angelegt werden müssen. Und hier noch der Beweis, dass die Segmente angelegt wurden:
Es gibt leider in diesem Release einige Objekte auf die das neue Feature nicht angewendet werden kann:
Wenn eine Tabelle einmal gefüllt war, bleibt das Segment bestehen, auch wenn ein Truncate oder Alter Table Kommando abesetzt wurde.
Letztendlich bietet diese neue Art der Speicherplatzverwaltung Vorteile, vor allem wenn es sich um große Softwareinstallationen handelt, weil kein unnötiger Platz im Tablespace verschwendet wird.
Mehr Informationen zu den neuen Features von Oracle erhalten Sie auch in unserer Schulungen.