Daten- und Tabellenkompression

Datenkompression in SQL-Datenbanken

Tabellenkompression einrichten

Grundsätzlich erfolgt die Datenkompression beim Schreiben. Die Blöcke werden jedoch nicht bei jeder Schreiboperation komprimiert, sondern im Batch-Modus. Datenmengen, die kleiner als ein Block sind, werden nicht komprimiert.

Unter Oracle 11g kann die Komprimierung einer Tabelle bei der Erstellung mit der Option „Compress“ angefordert werden: CREATE TABLE tab-name ..... COMPRESS;

Eine bereits bestehende Tabelle lässt sich wie folgt komprimieren: ALTER TABLE tab-name MOVE COMPRESS;

Dabei wird eine neue Tabelle mit der Eigenschaft COMPRESSION angelegt. Anschließend werden die Daten komprimiert eingefügt, die alte Tabelle wird gelöscht und die neue umbenannt.

Sollen Daten in eine bereits komprimierte Tabelle eingefügt werden, sollte dies immer mit DIRECT PATH erfolgen. Ein normales Einfügen mit INSERT oder SQL*LOADER führt zu fast keiner Komprimierung.

Ein möglicherweise entscheidender Nachteil der Tabellenkompression ist folgender: Werden die Daten einer komprimierten Tabelle nachträglich geändert, führt dies zu einer Dekompression. Nach der Änderung werden die Datensätze in unkomprimierter Form wieder eingefügt. Die angestrebte Platzersparnis geht dann verloren. Eine Tabellenkompression ist also nur dann sinnvoll, wenn die Daten vorrangig nur noch gelesen werden.

Der folgende Befehl macht die Komprimierung rückgängig: ALTER TABLE tab-name MOVE NOCOMPRESS;

Eine weitere Möglichkeit der Tabellenkompression ist die Definition auf TABLESPACE- und Partitionsebene. Bei Definition auf TABLESPACE-Ebene erben alle Tabellen die Kompressionseigenschaft.