Скрипт SQL для массового включения SIMPLE модели восстановления и обрезания ldf файлов на всех базах сервера



Часто возникает ситуация, когда на диске заканчивается свободное место из-за разросшегося журнала транзакций. Особенно тяжело бывает на серверах для разработки и тестирования, где инфобазы создаются в больших количествах. Скрипт позволяет автоматически включить простую модель восстановления и обрезать ldf файлы для всех баз, зарегистрированных на MS SQL Server.

По умолчанию в SQL Server 2008 модель восстановления FULL. Из-за этого журнал транзакций разрастается до такой степени, что при входе в 1С может появляться ошибка о нехватке места. Особенно тяжело бывает на серверах для разработки и тестирования, где инфобазы создаются в больших количествах.

Разработчики постоянно создавали новые/перегружали старые базы из бэкапов, и место потихоньку съедалось. Заставить их контролировать модель восстановления и обрезать логи оказалось непосильной задачей. Проще написать скрипт, который раз в неделю для всех баз устанавливает простую модель восстановления и обрезает журнал транзакций. При работе скрипта учитывается, что часть баз может быть в оффлайне.

Можно оформить как job и запускать раз в неделю по расписанию.

Не рекомендуется к использованию на боевых серверах, если вы не понимаете разницы между моделями восстановления баз данных full и simple.

9 Comments

  1. speshuric

    Скрипт не читал (извините, лень, ну и из скриншотов всё и так ясно). Есть пара замечаний по сценариям использования.

    • Если вас так уж пучит полная модель, то можно поменять модель восстановления на БД model и она будет применяться для всех новых баз (бэкапы будут, конечно, восстанавливаться «как было»)
    • Правильно указан сценарий «для разработчиков», но я бы порекомендовал автору еще и сжимать индексы/кучи на уровне страниц для этого сценария. Планы запросов (на 99,5%) останутся теми же и отладке не мешает, а вот для групп в 10-20 разработчиков это позволит на одном сервере держать МНОГО копий баз. Конечно, после перестроения индексов еще и шринк mdf, после чего у вас всё станет фрагментировано на 100%, но мы же про БД разработчика говорим, он это переживёт. Эта возможность доступна в Enterprise и Developer редакциях, да и не поддерживается 1С, в ней есть некоторые грабли, поэтому на продакшене я бы её старался не использовать. А вот для разработки — отлично.
    • Хорошей идеей было бы после уфигачивания ldf еще и поставить явно тот прирост, который вам комфортен (напр 100 МБ кажется разумным)
    • Хорошей идеей для разработчиков является не беспорядочное поднятие свежего быкапа, а раз в неделю снять бэкап и его подготовить (модель, сжатие индексов, обезличивание если надо, зачистка боевых строка подключений к левым сервисам, общих путей и т.п.). Естественно, эта операция должна быть автоматической.
    Reply
  2. aspirator23

    Где-то это уже видел.

    http://infostart.ru/public/443954

    Reply
  3. DonAlPatino

    (2) aspirator23, Не скачивал, не читал.Судя по логу мой вы тоже не скачивали. Поэтому прежде чем бросаться обвинениями может имеет смысл сравнить?

    Reply
  4. aspirator23

    (3) Начало смутило. Одинаковые буквы

    Reply
  5. TravkinSV

    Ой какое похожее описание… http://infostart.ru/public/443954/

    Reply
  6. JesteR

    (1)Согласен, лучше для базы model сделать необходимую настройку

    Reply
  7. DonAlPatino

    (6) Сделано для dev сервера. Базы разворачиваются из бэкапа с боевого. А на боевом full. И чем мне поможет изменения в model, если не секрет?

    Reply
  8. DrSender

    Тоже сделал подобные скрипты. Раз в день сжимаю журналы, раз в неделю базы полностью. Но разделяю базы — все тестовые, временные и вспомогательные имеют в наименовании Test — только они и обрабатываются. А в идеале конечно лучше переносить почти все тестовые базы на тестовый сервер.

    Reply
  9. DonAlPatino

    (8) Ну они у меня все и лежат на выделенном тестовом. Поэтому можно скопом раз в неделю все перестраивать.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *