У вас есть для использования маленьких кусков, иначе ваш журнал транзакций увеличится
Будет зарегистрировано каждое из 30-40 миллионов удалений. Если вы создадите новую таблицу и скопируете «сохранить» строки, у вас останется более 50 миллионов зарегистрированных строк. Факт простого и полного восстановления не имеет значения: каждое удаление / вставка регистрируется
Если при простом восстановлении журнал увеличивается, то я подозреваю, что вы делаете это в транзакции. Таким образом, 30-40 миллионов удалений все еще регистрируются, даже в простом восстановлении, потому что, возможно, все это нужно будет откатить.
Для 40 x 1 миллиона удалений без транзакции в более простом восстановлении вы можете использовать CHECKPOINT , чтобы помочь в регистрации журнала
См. Массовое УДАЛЕНИЕ в SQL Server 2008 (Есть ли что-то вроде Массовое копирование (bcp) для удаления данных?) для более
Но что-то вроде:
SELECT 'Starting' --sets @@ROWCOUNT
WHILE @@ROWCOUNT <> 0
BEGIN
CHECKPOINT
--Edit: must be last to set @@ROWCOUNT
DELETE TOP (1000000) MyTable WHERE ...
END
Процесс:
- полная резервная копия
- изменить восстановление на простое
- удалить
- изменить восстановление на полное (или как было раньше)
- полное резервное копирование
У вас не так много других вариантов, если вы настаиваете на удалении более 30 миллионов строк за один раз в короткие окна ...