Делайте удаление в чанках, но вместо того, чтобы пытаться сжать журнал между разами, делайте резервные копии журналов между чанками (то есть, если вы находитесь в полном восстановлении)
Проблема в том, что журнал полон и, следовательно, должен расти. Если он заполнен, попытка уменьшить его бесполезна, в журнале нет свободного места для выпуска в ОС. Вместо этого вам нужно сделать пространство внутри файла доступным для повторного использования.
Поскольку БД находится в простом восстановлении, запустите удаление в чанках с помощью команды CHECKPOINT между каждым чанком. Вы не можете делать резервные копии журналов в Простом восстановлении
Вот пример кода, который удаляет без заполнения журнала (в простом восстановлении). НЕ оборачивайте это в пользовательскую транзакцию. Это полностью лишает смысла удаление в пакетах, поскольку журнал не может быть очищен, пока не будет зафиксирована вся транзакция.
(SQL 2005 и выше. Для SQL 2000 удалите TOP и используйте SET ROWCOUNT)
DECLARE @Done BIT
SET @Done = 0
WHILE @Done = 0
BEGIN
DELETE TOP (20000) -- reduce if log still growing
FROM SomeTable WHERE SomeColumn = SomeValue
IF @@ROWCOUNT = 0
SET @Done = 1
CHECKPOINT -- marks log space reusable in simple recovery
END
Чтобы понять управление журналами, взгляните на эту статью - http://www.sqlservercentral.com/articles/64582/