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

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

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

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

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