Держу пари, вы пытаетесь запустить все удалить в одной транзакции. Верный?
После завершения транзакции пространство журнала может быть восстановлено. Поскольку транзакция не была завершена, файл журнала рос до тех пор, пока он не разбил сервер.
Оформить запись в блоге на Как удалить большие данные.
http://craftydba.com/?p=3079
Ключа к решению заключается в следующем, ЛЕГКО режиме восстановления, DELETE малых партий, принимает полную резервную копию в конце продувки. Выберите модель восстановления, которую вы хотите в конце.
Вот пример кода, который поможет вам на вашем пути.
--
-- Delete in batches in SIMPLE recovery mode
--
-- Select correct db
USE [MATH]
GO
-- Set to simple mode
ALTER DATABASE [MATH] SET RECOVERY SIMPLE;
GO
-- Get count of records
SELECT COUNT(*) AS Total FROM [MATH].[dbo].[TBL_PRIMES];
GO
-- Delete in batches
DECLARE @VAR_ROWS INT = 1;
WHILE (@VAR_ROWS > 0)
BEGIN
DELETE TOP (10000) FROM [MATH].[dbo].[TBL_PRIMES];
SET @VAR_ROWS = @@ROWCOUNT;
CHECKPOINT;
END;
GO
-- Set to full mode
ALTER DATABASE [MATH] SET RECOVERY FULL;
GO
И последнее, но не менее важное: если количество оставшихся данных после удаления является реальным небольшим, возможно, было бы быстрее выполнить следующее.
1 - SELECT * INTO [Temp Table] WHERE (clause = small data).
2 - DROP [Original Table].
3 - Rename [Temp Table] to [Original Table].
4 - Add any constraints or missing objects.
Действие таблицы DROP не записывает все удаляемые данные.
С уважением,
Джон
http://stackoverflow.com/questions/5925471/how-can-i-delete-expired-data-from-a-huge-table-without-having- the-log-file-grow –
Также см. http://dba.stackexchange.com/questions/56432/running-parallel-delete-statements/56516#56516 и http://www.sqlperformance.com/2013/03/ io-subsystem/chunk-deletes –