Zum Inhalt springen

SQL Tipp #004 – Truncate Table

    IBM DB2 LUW vor Version 9.7 kennt kein TRUNCATE so wie es das bei Oracle schon seit Ewigkeiten gibt. Es gibt jedoch ein Workaround, um TRUNCATE zu simulieren. Ab Version 9.7 unterstützt DB2 Truncate auch „nativ“.

    Workaround (1): ALTER TABLE

    ALTER TABLE myTablename 
     ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE;

    Kommentar: Alle Daten der Tabelle werden gelöscht. Die Daten können nicht über RESTORE wiederhergestellt werden. Wenn der Befehl innerhalb einer Unit-of-Work (UOW) ausgeführt und anschließend für die UOW ein ROLLBACK ausgeführt wird, so kann die Tabelle nicht wieder im Original wiederhergestellt werden. Außerdem werden keine DELETE trigger abgefeuert. Alle Indizes der Tabelle werden ebenfalls gelöscht.

    Workaround (2): Verwendung des IMPORT Utilities

    IMPORT FROM /dev/null OF DEL REPLACE INTO myTablename

    Kommentar: Im Unterschied zu Workaround 1 ist über diese Option die Tabelle komplett wiederherstellbar (recoverable). Auf Windows System muss statt /dev/null entweder „NUL“ oder eine existierende Datei c:\io.sys angegeben werden.

    Workaround (3): Verwendung des LOAD Utilities

    load client from "c:\dummyfile.txt" of del replace 
     into myTablename NONRECOVERABLE;

    Tipp: Zum leeren eines kompletten Schema, das Script dynamisch erzeugen lassen:

    select 'load client from "c:\dummyfile.txt" of del replace 
     into '|| rtrim(myTabname) || '.' || myTabname|| ' NONRECOVERABLE;'
    from 
     syscat.tables
    where 
     tabschema = 'mySchema' 
     and myTabname like 'abc%'

    getestet mit IBM DB2 LUW v9.5

    Schlagwörter: