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