Contact
QR code for the current URL

Story Box-ID: 1265811

mip Management Informations Partner GmbH Fürstenrieder Straße 267 81377 München, Germany http://www.mip.de
Contact Ms Sandra Daikhi +49 89 58939424

Db2 Basics: TRUNCATE Statement

(PresseBox) (München, )
Eine Tabelle zu leeren scheint ein einfaches Unterfangen zu sein, aber auch hier gibt es einige Dinge zu bedenken. Bei einem Besuch im IBM Db2 Development Labor in Toronto habe ich neue Erkenntnisse erlangt, die ich in diesem Artikel gerne teilen möchte.

Db2 TRUNCATE Statement

Welche Optionen gibt es eine Tabelle zu leeren:
  • DROP TABLE – die Holzhammer-Methode
    Das hat den gravierenden Nachteil, dass man die Tabelle anschließend wieder anlegen muss. Zusätzlich sind auch alle weiteren abhängigen Strukturen betroffen – wie Indizes, Views, Rechte etc. Somit ist dies in den meisten Fällen indiskutabel.
  • DELETE Statement
    Das ist zwar recht einfach zu schreiben, wird aber in einer Transaktion ausgeführt, was bei größeren Datenmengen zu Logging-Problemen führt, da Db2 sich ja alle Daten merken muss, um diese im Rollback-Fall wieder erstellen zu können.
  • TRUNCATE Statement
    Massenlöschung ohne Logging-Overhead.
Zusätzlich gibt es noch weitere „Hacks“ wie das Logging auszuschalten oder einen Load Replace mit einem leeren File durchzuführen – auf diese möchte ich hier nicht eingehen, da sie mit der vorhandenen Truncate Operation eigentlich nicht mehr nötig sind.

Der folgende Command

leert die Tabelle extrem effizient und kann nicht per Rollback rückgängig gemacht werden.

Nur für spalten-organisierte Tabellen – sogenannte BLU-Tabellen – ist die IMMEDIATE Option optional und erlaubt es die Löschung rückgängig zu machen, solange IMMEDIATE nicht spezifiziert wurde. Das ist möglich, weil nur logisch gelöscht wird – d.h. die Zeilen werden als gelöscht geflaggt und nur diese Information wird geloggt.

Schauen wir uns die weiteren Optionen an:
  • DROP STORAGE
    DROP STORAGE gibt den freigewordenen Platz an den Tablespace zurück, der so von anderen Tabellen wiederverwendet werden kann.
    ACHTUNG:
    Mit dieser Option kann es zu Konflikten mit einem Online-Backup kommen, da beide Operationen eine Sperre (OLB Lock) auf dem Tablespace benötigen.
  • REUSE STORAGE
    Ist sinnvoll, wenn eine Tabelle geleert wurde und gleich wieder geladen werden soll – in Data Warehouse Projekten eine häufige Anforderung.
  • IGNORE DELETE TRIGGERS
Definierte Delete-Trigger werden NICHT durch TRUNCATE ausgelöst.
  • RESTRICT WHEN DELETE TRIGGERS
    Diese Option stellt sicher, dass ein Fehler zurückgegeben wird, wenn ein DELETE Trigger vorhanden ist.
  • IMMEDIATE
Verpflichtende Option außer für BLU-Tabellen, bei denen diese Option entfallen kann und ein Rollback erlaubt (wie bereits oben beschrieben).

Von der Theorie zur Praxis

So viel zu den Grundlagen des Statements – schauen wir auf einen konkreten Problemfall aus einem Data Warehouse Kundenszenario:

Während eines aufwendigen und lange laufenden Initialladevorgangs wurde der Zeitpunkt für das online Backup erreicht, das erfolgreich gestartet wurde. Zusätzlich setzte dann – ein paar Stunden später – der nächtliche ETL-Ladelauf ein, der u.a. ein Truncate-Statement auf einer Tabelle auslöst. Da das Backup auf Grund der Lastsituation ebenfalls deutlich länger als normal dauerte, kam es hier zu einem Lock-Konflikt, der über Stunden anhielt.

Wie hätte das nun vermieden werden können?

Wie oben beschrieben ist DROP STORAGE nicht kompatibel mit einem Online Backup. Diese Option war nicht explizit spezifiziert, was dazu geführt hat, dass sie implizit gesetzt wurde, weil sie auch den Default darstellt.

Ein explizit gesetztes REUSE STORAGE hätte hier das Problem umgangen.

Tipp aus dem IBM Db2 Lab

An dieser Stelle gibt es noch eine weitere – sehr interessante – Lösung, die ich Mike Springgay aus dem IBM Db2 Labor zu verdanken habe.

Es gibt die Registry Variable DB2_TRUNCATE_REUSESTORAGE, die folgendermaßen gesetzt werden kann:

Ein Durchstarten der Instance ist hier nicht notwendig.

Für IMPORT und LOAD gilt das Konfliktpotential nur wenn die REPLACE Option spezifiziert wurde.

Durch dieses Setting wird die IMPLIZIT gesetzte DROP STORAGE Option in die REUSE STORAGE Option gewandelt, um die Blockierung zu vermeiden.

Hinweis: Diese Registry-Variable hat keinen Effekt, falls die Option explizit gesetzt wurde!

Somit ist diese Registry-Variable eine generelle Empfehlung, wenn man Sperrkonflikte in dieser Situation vermeiden will.

Wenn Sie weitere Fragen haben, können Sie sich gerne bei uns melden unter: kontakt@mip.de

Wir freuen uns auf den persönlichen Austausch mit Ihnen!

Ihr Michael Tiefenbacher

Business and Customer Success Manager & Principal Consultant

Sie sind interessiert daran, mehr über unser Leistungsangebot zu erfahren, dann besuchen Sie unsere Themenseite Datenbanken. 

Website Promotion

Website Promotion
The publisher indicated in each case (see company info by clicking on image/title or company info in the right-hand column) is solely responsible for the stories above, the event or job offer shown and for the image and audio material displayed. As a rule, the publisher is also the author of the texts and the attached image, audio and information material. The use of information published here is generally free of charge for personal information and editorial processing. Please clarify any copyright issues with the stated publisher before further use. In case of publication, please send a specimen copy to service@pressebox.de.
Important note:

Systematic data storage as well as the use of even parts of this database are only permitted with the written consent of unn | UNITED NEWS NETWORK GmbH.

unn | UNITED NEWS NETWORK GmbH 2002–2025, All rights reserved

The publisher indicated in each case (see company info by clicking on image/title or company info in the right-hand column) is solely responsible for the stories above, the event or job offer shown and for the image and audio material displayed. As a rule, the publisher is also the author of the texts and the attached image, audio and information material. The use of information published here is generally free of charge for personal information and editorial processing. Please clarify any copyright issues with the stated publisher before further use. In case of publication, please send a specimen copy to service@pressebox.de.