Поиск по блогу

четверг, 3 декабря 2015 г.

Сжатие (шринк) журнала транзакций в MS SQL

Краткое описание моделей восстановления MS SQL

Довольно популярная ошибка СУБД в кругах 1Сников "Журнал транзакций для базы данных заполнен", если информационная база развернута в клиент-серверном варианте с использованием MS SQL и все настройки были оставлены по-умолчанию (см. рисунок 1).
Рисунок 1. Ошибка переполнения журнала транзакций
Конечно, MS SQL умеет автоматически усекать журнал транзакций (физически размер файла журнала транзакций не уменьшается), но бывают исключения, при которых происходит задержка усечения (начинается физическое увеличение размера файла журнала транзакций).

Для борьбы с переполнением журнала транзакций предусмотрены следующие вариант настройки СУБД:
  • создание резервной копии журнала;
  • освобождение места на диске, чтобы журнал мог автоматически расти;
  • перемещение файла журнала на диск с достаточным объемом свободного места;
  • увеличение размера файла журнала;
  • добавление файла журнала на другой диск;
  • завершение или уничтожение длительной транзакции.
Но, бесконечно свободного места на жестком диске не бывает, а усечение не уменьшает размер файла физического журнала, поэтому для уменьшения физического размера файла журнала необходимо выполнить его сжатие (шринк).

Рассмотрим операцию сжатия файла журнала транзакций.

Первым делом, необходимо выяснить причину, по которой происходит задержка усечения журнала транзакций (Факторы, могущие вызвать задержку усечения журнала), может быть просто нужно увеличить размер файла журнала транзакций, так как не хватает его из-за длительной транзакции.

Второй шаг - выполнить создание резервной копии файла журнала транзакций (Как создать резервную копию журнала транзакций (среда SQL Server Management Studio)).

Третий шаг - сжатие файла журнала транзакций (операция выполняется через среду SQL Server Management Studio):
1) Разверните узел Базы данных и щелкните правой кнопкой мыши базу данных, которую нужно сжать. Укажите пункты Задачи и Сжать, затем выберите пункт Файлы (см. рисунок 2);
Рисунок 2. Задача сжатия файла

2) Выберите тип файла и имя файла (см. рисунок 3).

Далее выберите способ сжатия:
  • Освободить неиспользуемое место - выбор этого параметра приводит к освобождению всего неиспользуемого пространства файла для ОС и уменьшению размера файла до последнего размещенного экстента. Это уменьшает размер файла без перемещения каких-либо данных.
  • Реорганизовать файлы перед освобождением неиспользуемого места - при выборе этого режима необходимо указать значение Сжать файл до.
  • Очистить файл путем переноса данных в другие файлы той же файловой группы - выбор этого режима перемещает все данные из указанного файла в другие файлы данной файловой группы. Пустой файл удалить нельзя. Этот режим эквивалентен выполнению процедуры DBCC SHRINKFILE с параметром EMPTYFILE.
Рисунок 3. Настройка сжатия журнала транзакций
3) Нажмите кнопку ОК.

Ошибка должна исчезнуть.

2 комментария:

  1. Анонимный4 мая 2016 г., 14:46

    Будем пробовать!

    ОтветитьУдалить
  2. Единственный рабочий вариант:
    1) Открываем MS SQL Management Studio
    2) Открываем свойства проблемной базы
    3) Выбираем "Режим восстановления" - простой
    4) Указываем максимальный размер LOGa на 1-2 мб больше или меньше
    5) Выбираем "Режим восстановления" - полный и частичный, как было раньше

    ОтветитьУдалить