У меня база имеет:

Модель восстановления — Простая

Модель восстановления каждый системный администратор выбирает для себя Сам достаточно лишь раз прочитать документацию, как было дело со мной, ранее не особо разбиравшись что и для чего. Здесь я хочу составить небольшую шпаргалку по этой теме:

Простая модель восстановления — восстановить данные я могу только на момент полного резервировать базы данных. А все последующее добавление пользователями будет утеряно. На текущем месте мы просто делаем ежедневный бекап баз с последующей верификацией и максимальным сжатием. К примеру сделали ночью бекап, пользователи на следующий день поработали, а к примеру под вечер случился форс мажор, то откатившись из бекапа (только по приказу генерального), данные добавленные в течения дня будут безвозвратно утеряны. Вот такой вот минус.

Полная модель восстановления — восстановить данные можно на любой момент, но требуется в обязательном порядке осуществлять и резервное копирование журнала транзакций.

На заметку: перед любыми операциями всегда должна быть сделана полная резервная копия с последующим восстановлением из нее (и желательно задокумментированы все действия) с целью проверки, что бекап это бекап, а не битый бекап.

Резервная копия это обязательно, то также нужно и обслуживать базы — это так называемый «План обслуживания», запускать его следует в те часы когда его работа

ни как не скажет на текущем использовании базы, т. е. Преимущественно в ночное время. Данное время выбирается индивидуально с учетом особенностей Вашего рабочего места работы.

Создаваемый план обслуживания базы включает в себя следущую последовательность действий:

  • Проверка целостности базы
  • Перестроение индекса
  • Обновление статистики
  • Очистка процедурного кэша СУБД
  • Резервное копирование базы данных
  • Очистка после обслуживания
  • Очистка журнала

Подключаюсь к серверу MSSQL и запускаю оснастку Microsoft SQL Server Management Studio:

Start — All Programs — Microsoft SQL Server 2008 R2 — SQL Server Management Studio, авторизуюсь: (local)(SQL Server 10.50.1600 — NEMDOMB\aollo) — после перехожу: Management (Управление) — Maintenance Plans (Планы обслуживания) и через клик правой кнопкой выбираю: New Maintenance Plan… (Создать план обслуживания). Присваиваю ему имя: LocalPlan, задаем посредством планировщика, как будет вызываться данный план:

Создаю план обслуживания LocalPlan

После того как по стрелке выше на представленном скриншоте кликнули левой кнопкой мыши появится окно где настраивается работа запуска: (мне нужно каждый день в 02.00 ночи)

  • Name: LocalPlan.Subplan_1
  • Schedule type: Recurring.
  • Enabled: Отмечаем галочкой
  • Frequency:
  • Occurs: Daily
  • Recurs every: 1 day(s)
  • Daily frequency:
  • Occurs once at: 2:00:00

Остальные параметры я оставляю по умолчанию мне они не критичны.

Теперь создаваемый план LocalPlan наполним содержимым проверок/заданий. Для этого из левой части окна Toolbox выделяем нужное задание (Check Database Integrity Task (Проверка целостности базы данных) и перетаскиваем в правую часть:

Внутри плана LocalPlan настраиваю задания

после перетаскивания заготовки задания из левой части (Toolbox) в правую область оно по умолчанию не содержит ни каких действий, чтобы наделить действиями задание нужно просто выделить его левой кнопкой и по центру щелкнуть левой кнопкой мыши два раза и откроются его свойства. Выбираем имеющуюся базу(ы) данных:

Наполняю задание свойства действий

После чего по такому же принципу добавляю в создаваемый план LocalPlan задания Перестроение индекса (Rebuild Index Task) и Обновление статистики (Update Statistics Task) и также заходим в данные задания свойства, выбираем нужную базу (в моем случае zup)

  • Rebuild Index Task:
  • Connection: Local Server Connection
  • Database(s): zup
  • Object: Tables and Views
  • Reorganize pages with the default amount of free space

 

  • Update Statistics Taks:
  • Connection: Local Server Connection
  • Database(s): zup
  • Object: Tables and Views
  • Update: All existing statistics
  • Scan type: Full scan

На заметку:

  • Перестроение индекса – пересоздает индекс с новым коэффициентом заполнения.
  • Обновление статистики – обновляет сведения о данных таблиц для MS SQL, только после нужно провести очистку кэша.

Но пока задания хоть и наполнены свойствами просто выполнятся, но так не вполне корректно, нужно чтобы данные задания отрабатывали в порядке указанной очередности. Для этого задания нужно связать между собой в порядке очередности.

У каждого задания если по нему нажать левой кнопкой мыши один раз появится стрелка:

Связываю создаваемые задания внутри плана LocalPlan

Берем данную стрелку и ведем ее к другому заданию этим мы производим объединение заданий между собой, т. е. Сперва выполнится одно а потом по стрелке запуститься другое.

Если щелкнуть по данной стрелке (у нее тоже имеются свойства), то можно обнаружить способы активации подразделенные на три цвета для удобства визуального вспоминания и анализа:

  • Зеленый — Success (Успех)
  • Красный — Failure (Ошибка)
  • Синий — Completion (Завершение)

У связи может быть 3 цвета: синий, зеленый и красный, каждый из которых означает три типа срабатывания перехода: при простом завершении предыдущего задания – Завершение, в случае успешного завершения – Успех, а в случае возникновения ошибки при выполнение предыдущего задания – Ошибка.

Приводим создаваемый план к виду:

Различные задания по разному связаны между собой

На заметку: может так случиться, что для создаваемого плана нет шаблонных заданий, в таком случае на помощь приходит задание: Execute T-SQL Statement Task в свойства которого вводится sql команда вашего действа. К примеру, по умолчанию отсутствует (да и вообще) задание по очистке кэша процедур, а посредством задания Execute мы создаем его, в свойства которого вписываем команду:

DBCC FREEPROCCACHE

В роли задания выступает скриптовая часть

Далее в создаваемый план добавлю задание которое будет уже осуществлять резервное копирование (в ручную этого делать не придется) — Back Up Database Task:

  • Connection: Local Server Connection
  • Backup type: Full
  • Database(s): Specific databases (zup)
  • Create a backup file for every database
  • Folder: d:\backupbd
  • Backup file extension: bak
  • Verify backup integrity: отмечаем галочкой
  • Set backup compression: Compress backup

Следом настраиваем задачу: Maintenance Cleanup Task (Очистка после обслуживания) входе которой удаляются старые архивы.

  • Maintenance Cleanup Task:
  • Connection: Local Server Connection
  • Delete file of the following type: Backup files
  • Search folder and delete files based on an extension:
  • Folder: d:\backupbd
  • File extension: bak
  • File Age:
  • Delete files older than the following: 1 Monts(s)

Следом настраиваем задачу: History Cleanup Task (Очистка журнала) в ходе которой происходит удаление журнала данных (завязанный на процессы резервного копирования и планов обслуживания баз).

  • History Cleanup Task:
  • Connection: Local Server Connection
  • Backup and restory history: отмечаем галочкой
  • SQL Server Agent job history:
  • Maintenance plan history:
  • Remove historical data older than: 2 Day(s)

Теперь когда задания в плане LocalPlan Настроены — данный план нужно сохранить: File — Save Selected Items

В итоге план обслуживания выглядит следующим образом:

Итоговый план наполненный заданиями

Данный план будет работать в том случае если служба SQL Server Agent работает и запущена (и лучше бы он у Вас запускалась от имени системы)

В рамках теста запускаю созданный план в ручную:

Start — All Programs — Microsoft SQL Server 2008 R2 — SQL Server Management Studio, авторизуюсь: (local)(SQL Server 10.50.1600 — NEMDOMB\aollo) — Management — Maintenance Plan — выделяю LocalPlan и через правый клик на нем в ниспадающем меню выбираю Execute (Запустить), следом появляется окно работы данного плана:

Проверяю план запуском в ручном режиме

Ожидаем, по окончании можно будет посмотреть отчет и журнал.

Созданный план успешно отрабатывает все запланированные задания

И в каталоге d:\backupbd\ уже находится резервная копия базы данных:

zup_backup_2015_11_21_130613_0503913.bak

На этом я хочу закончить данное повествование, оформляя ввиде заметки действия я еще раз для себя самого повторил все действия которые мне нужно будет сделать если я еще раз буду создавать план бекапа. А вообще как я считаю мне нужно почитать про составление планов обслуживания из книг по SQL серверу как факультатив. Только так можно понять и сделать выжимку знаний и навыков чтобы ниоткого не зависеть в дальнейшем, но послушать конечно же на до. До встречи, с уважением автор блога — ekzorchik.

От ekzorchik

Всем хорошего дня, меня зовут Александр. Я под ником - ekzorchik, являюсь автором всех написанных, разобранных заметок. Большинство вещей с которыми мне приходиться разбираться, как на работе, так и дома выложены на моем блоге в виде пошаговых инструкции. По сути блог - это шпаргалка онлайн. Каждая новая работа где мне случалось работать вносила новые знания и нюансы работы и соответственно я расписываю как сделать/решить ту или иную задачу. Это очень помогает. Когда сам разбираешь задачу, стараешься ее приподнести в виде структурированной заметки чтобы было все наглядно и просто, то процесс усвоения идет в гору. Также прошу на https://win.ekzorchik.ru https://lin.ekzorchik.ru https://net.ekzorchik.ru https://voip.ekzorchik.ru https;//home.ekzorchik.ru

2 комментария для “Что есть обслуживание базы данных”
  1. “Простая модель восстановления — восстановить данные я могу только на момент ПОЛНОГО резервировать базы данных.”
    Вы забыли о разностных копиях, простая модель позволяет восстанавливаться с них. Это позволяет не делать каждый день полную копию, а раз в неделю, например.

    1. Может быть и так, но мне проще сделать полный бекап, местом хранения не обделен да и восстанавливать проще, а про “разностные копии” почитаю обязательно. Спасибо.

Обсуждение закрыто.