In diesem Tipp des Monats schauen wir uns mal die Speicherbelegung der Tabellen und Indizes an.Es gibt zwar seit Version 10g einen Advisor, der einem die Speicherbelegung der Segmente anzeigt; wir wollen hier aber eine Ausgabe in Tabellenform für mehrere Objekte erzeugen.Wie heißt es so schön: Es gibt kaum eine Information, die man nicht aus einer Oracle-DB herausholen kann, man muss nur die richtige (Öl)-Quelle anzapfen.Dieser Trick beruht auf dem Package DBMS_SPACE, das die Zahl der Blöcke anzeigen kann, die jeweils bis
<= 25%, <= 50%, <= 75% oder <=100% gefüllt sind.
Diese Zahlen werden für jedes Segment zusammengezählt und vom Package zurückgegeben.Die Aufgabe meiner Funktion ist nur, das Ergebnis in Tabellenform darzustellen.
Der Benutzer des Package benötigt zwei Rechte DIREKT!
In 9i ist die RETURN-Klausel am Ende der Funktion zwingend erforderlich, in 10g kann sie auch weggelassen werden.
Beispiel für alle Objekte aus einem Schema:
Beispiel für ein Objekt aus einem Schema:
Beispiel für alle Objekte aus einem Tablespace:
Wenn Sie möchten, legen Sie doch eine View über den Select, dann sieht es richtig professionell aus:
Die Ausgabe könnte dann so aussehen:
In SQL*Plus kann man die Spalten-Längen noch formatieren.Beispiel:
In der Ausgabe sehen Sie in der letzten Spalte den ungenutzten Platz des Segments in Prozent. Auf Basis dieser Zahl kann man entscheiden, ob eine Reorganisation des Segments nötig ist.
Zu Risikien und Nebenwirkungen:
Die Information über den Füllpegel kann nicht von Objekten aus dem SYSTEM-Tablespace oder einem Tablespace ohne SEGMENT SPACE MANAGEMENT AUTO Option erzeugt werden.
Bei einem großen Schema kann die Ausgabe etwas dauern und einige Ressourcen verbrauchen.
Wenn Sie durch dieses Beispiel Lust auf mehr bekommen haben, besuchen Sie doch einen unserer DB Monitoring oder DB Tuning Kurse. Da machen wir noch ganz andere Sachen :-)
Wer sich für die Pipelined Row interessiert, ist in unserem PL/SQL gut aufgehoben.
Viel Spaß beim Segment-Beobachten...