Скрипт 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 не будет опубликован. Обязательные поля помечены *