Als PDF Downloaden!

Werbung
Tipps & Tricks: Dezember 2005
Bereich:
DBA, SQL
Erstellung:
12/2005 MP
Versionsinfo:
10.1, 10.2, 11.1, 11.2
Letzte Überarbeitung:
06/2009 MA
ALTER TABLE SHRINK
Neue Funktionalität in 10g: ALTER TABLE SHRINK
Wer kennt nicht dieses Problem: Es gibt in der Datenbank eine große Tabelle, aus der viele Datensätze gelöscht
wurden. Die Datensätze sind zwar gelöscht, aber der physikalische Platz in dem Tablespace wird nicht
freigegeben, und die "HIGH WATER MARK" wird nicht verändert.
Die Möglichkeiten, die "HIGH WATER MARK" zurückzusetzen, die es bislang gab, sind: ALTER TABLE MOVE
TABLESPACE bzw. EXPORT / IMPORT. Bei diesen Optionen ist jedoch eine Ausfallzeit gegeben.
In der Version 10g ist es jetzt machbar, die "HIGH WATER MARK" zurückzusetzen, ohne die Tabelle zu sperren:
Und zwar mit Hilfe von SHRINK_CLAUSE des Befehls ALTER TABLE. Mit der SHRINK_CLAUSE können
Tabellen, Indizes, indexorganisierte Tabellen, Partitionen, Subpartitionen, LOB Segmente (ab Version 10.2) und
Materialized Views manuell verkleinert werden.
Voraussetzungen:
Oracle RDBMS ab Version 10g.
Der Tablespace muss mit der Option SEGMENT MANAGEMENT AUTO angelegt sein.
Bei der Tabelle, die verkleinert werden soll, muss ROW MOVEMENT aktiviert sein. Die Tabelle muss
reorganisiert werden und damit ändern sich die ROWIDS.
Einschränkungen:
Die Tabelle darf nicht komprimiert sein.
Die Tabelle darf keine FUNCTION BASED Indizes besitzen.
Die Mastertabelle einer ON COMMIT MATERIALIZED VIEW kann nicht verkleinert werden.
ROWID MATERIALIZED VIEWS müssen nach dem Verkleinern neu aufgebaut werden.
Die Tabelle darf keine LOB oder LONG Spalten besitzen (nur in Version 10.1).
Beispiel:
In diesem Beispiel verwende ich eine Tabelle BIGEMP mit ca. 7,5 Mio. Datensätzen.
Als erstes wird überprüft, wie viele Blöcke und Extents von der Tabelle allokiert sind.
Select BLOCKS, EXTENTS from USER_SEGMENTS where SEGMENT_NAME = 'BIGEMP';
BLOCKS
-----45696
EXTENTS
---------116
Als weitere Ausgangswerte dienen die leeren Blöcke und der durchschnittliche freie Platz innerhalb eines
Blockes. Diese Werte werden bei einem ANALYZE TABLE-Befehl aktualisiert.
Muniqsoft GmbH
Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40
IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0
Seite 1 von 3
ANALYZE Table BIGEMP compute statistics;
Select EMPTY_BLOCKS, AVG_SPACE from USER_TABLES where table_name = 'BIGEMP';
EMPTY_BLOCKS AVG_SPACE
------------ ---------1019
838
Nun wird jeder zweite Datensatz gelöscht und die Tabelle neu analysiert.
Delete from bigemp where empno in(7369, 7521, 7654, 7782, 7839, 7876, 7902);
Commit;
ANALYZE Table BIGEMP compute statistics;
Bei der folgenden Prüfung auf Blöcke und Extents hat sich keine Veränderung ergeben.
Select BLOCKS, EXTENTS from USER_SEGMENTS where SEGMENT_NAME = 'BIGEMP';
BLOCKS
EXTENTS
------ ---------45696
116
Die Prüfung der leeren Blöcke und des freien Patzes ergibt, dass die Blöcke unverändert sind, aber der freie Platz
größer geworden ist.
Select EMPTY_BLOCKS, AVG_SPACE from USER_TABLES where table_name = 'BIGEMP';
EMPTY_BLOCKS AVG_SPACE
------------ ---------1019
4254
Jetzt starten wir mit dem Verkleinern der Tabelle. Dazu wird ROW MOVEMENT aktiviert, die Tabelle verkleinert
und neu analysiert.
Alter Table BIGEMP ENABLE ROW MOVEMENT;
Alter Table BIGEMP SHRINK SPACE;
ANALYZE Table BIGEMP compute statistics;
Bei der abschließenden Prüfung auf Blöcke und Extents kann festgestellt werden, dass die Anzahl der Blöcke und
Extents deutlich abgenommen hat.
Select BLOCKS, EXTENTS from USER_SEGMENTS where SEGMENT_NAME = 'BIGEMP';
BLOCKS
EXTENTS
------ ---------21208
92
Auch die Anzahl der leeren Blöcke und der freie Platz sind nach dem SHRINK deutlich kleiner geworden.
Muniqsoft GmbH
Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40
IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0
Seite 2 von 3
Select EMPTY_BLOCKS, AVG_SPACE from USER_TABLES where table_name = 'BIGEMP';
EMPTY_BLOCKS
-----------187
AVG_SPACE
--------396
Zusammenfassung:
Die neue Funktionalität ALTER TABLE SHRINK ist ideal dafür geeignet, im laufenden Betrieb Tabellen zu
verkleinern und die HIGH WATER MARK zurückzusetzen. Es kann somit auf einfache Art ungenutzter Platz
innerhalb eines Tablespaces zur Verfügung gestellt werden.
Mehr Informationen zu diesem Thema und zu weiteren Funktionen in 10g erhalten Sie auch in unserem Kurs:
Neuerungen von Oracle 10g (MS 1080).
Muniqsoft GmbH
Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40
IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0
Seite 3 von 3
Herunterladen