Сервер Sql - журнал заполнен из-за ACTIVE_TRANSACTION

У меня очень большая база данных (50+ ГБ). Чтобы освободить место на жестком диске, я попытался удалить старые записи из одной из таблиц. Я выполнил команду:

delete from Table1 where TheDate<'2004-01-01';

Однако SQL Server 2012 сказал:

Msg 9002, Level 17, State 4, Line 1 
The transaction log for database 'MyDb' is full due to 'ACTIVE_TRANSACTION'.

и это не удаляло вещь. Что означает это сообщение? Как удалить записи?

Ответ 1

Вот что я сделал, чтобы обойти ошибку.

Во-первых, я настроил модель восстановления базы данных как SIMPLE. Подробнее здесь.

Затем, удалив некоторые старые файлы, я смог сделать 5 ГБ свободного места, что дало файлу журнала больше места для роста.

Я делаю запрос DELETE без предупреждения.

Я думал, что, запустив инструкцию DELETE, база данных будет немедленно уменьшаться, освободив пространство на моем жестком диске. Но это было неправдой. Пространство, освобожденное после инструкции DELETE, не возвращается в операционную систему по ошибке, если вы не выполните следующую команду:

DBCC SHRINKDATABASE (MyDb, 0);
GO

Подробнее об этой команде здесь.

Ответ 2

Перезапуск SQL Server очистит пространство журнала, используемое вашей базой данных. Если это не вариант, вы можете попробовать следующее:

* Issue a CHECKPOINT command to free up log space in the log file.

* Check the available log space with DBCC SQLPERF('logspace'). If only a small 
  percentage of your log file is actually been used, you can try a DBCC SHRINKFILE 
  command. This can however possibly introduce corruption in your database. 

* If you have another drive with space available you can try to add a file there in 
  order to get enough space to attempt to resolve the issue.

Надеюсь, это поможет вам найти решение.