Herausforderung beim Löschen großer Db2 Tabellen
In der Regel sind solche historisch gewachsenen row-basierten Tabellen normale Db2 Tabellen ohne irgendwelche oder mit nicht zur Löschung passenden Partitionierungstechniken. D.h. die zu löschende Datenmenge muss mit DELETE-Statements gelöscht und im Transaktionslog protokolliert werden. Ein einzelnes DELETE-Statement zum Löschen der Rows endet nicht selten im SQL Error SQL0964C „The transaction log for the database is full“.
Natürlich könnte man die Tabelle in eine neue Tabelle mit LOAD FROM CURSOR umladen und nur die nicht zu löschenden Zeilen laden. Das bedeutet aber nach dem LOAD eine Downtime, um die bisherige mit der neuen Tabelle zu synchronisieren (bis auf die zu löschenden Zeilen) und auf den bisherigen Tabellennamen umzubenennen.
Bisheriger Ansatz mit Commit-Zählung
Es gab bereits einen Ansatz, solche Löschungen mit einer Db2 Stored Procedure umzusetzen (Quelle).
Diese Stored Procedure arbeitet mit dem Syntax-Element FETCH FIRST x ROWS ONLY beim SELECT-Statement, das für den DELETE verwendet wird:
Db2 Stored Procedure zum effizienten Löschen aus Db2 Tabellen - Ihr Datenspezialist - mip GmbH in München