Уменьшение размеров базы SQL или проблемы команды Shrink

Опубликовано Опубликовано в рубрике MS SQL Server

Многие администраторы баз данных сталкивались с проблемой роста объемов информации в базах MS SQL Server 2005. Главным источником проблем обычно является так называемый log-файл (файл с расширением * .ldf или журнал транзакций). Данная ситуация разрешается простым шринком (уменьшением объемов log-файла) — об этом знают практически все, кто так или иначе работал с MS SQL, приведенные ниже варианты кода довольно просты:

DBCC shrinkdatabase(N’имя_базы’, TRUNCATE_ONLY); — усечение всей базы
use [имя_базы] DBCC SHRINKFILE (N’имя_базы_Data’, 101); — усечение только файла данных до размера 101 мб 
use [имя_базы] DBCC SHRINKFILE (N’имя_базы_Log’, 0); — усечение только файла транзакций до размера 0 мб

Но бывает так, что по каким-то причинам уменьшить объемы не получается, и в момент исполнения кода появляются сообщения об ошибках. Такая проблема проявляется в основном на тех базах данных, для которых установлена модель архивирования Full (для модели Simple проблем, как правило, не возникает, далее поясним почему). В сообщениях об ошибке говорится о том, что log-файл находится в использовании, поэтому операцию выполнить невозможно — это более чем удивительно, поскольку обычно процесс шринка производится при завершенной работе пользователей (никто не обращается к базе). Монитор соединений так же показывает отсутствие какой-либо активности.

В документации по этому поводу информация есть, но ее чтение после второго абзаца наводит тоску зеленого оттенка. Анализ сообщений на различных форумах и практическим путем было установлено следующее. Прежде, чем выполнять шринк базы необходимо выполнить архивацию, но не всей базы, а именно файла транзакций. Только после завершения этой процедуры можно смело выполнять команду shrink, и результат будет достигнут. Надо сказать, что процедура архивации нужна только, если для базы данных установлена модель архивирования Full. В модели Simple log-файл автоматически помечается, как свободный для использования и команда shrink работает без проблем, в модели Full файл становится свободным для использования только после backup-а соответствующего файла.