Сервер 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.
Надеюсь, это поможет вам найти решение.