System Center 2012 R2 Data Protection Manager - Особенности резервного копирования баз данных SQL

imageВсех приветствую! И вновь речь пойдет о продукте компании Microsoft – System Center 2012 R2 Data Protection Manager (DPM) . В каждом программном продукте есть свои нюансы и DPM в этом плане не исключение. В данной статье рассмотрю особенности, которые необходимо учесть при планировании резервного копирования баз данных Microsoft SQL.
Будьте в курсе актуальных новостей в мире ИТ: https://t.me/ITKBnews. Также будем рады видеть Вас участниками групп https://vk.com/blogitkb и https://www.fb.com/blog.it.kb

Начнем с того, что для начала нужно

1. Установить агента на сервер SQL (примере будет использоваться server2). Проверить его доступность.   1   2 2. После установки придется перезагрузить защищаемый сервер (в нашем случае server2 - SQL) 3 После перезагрузки состояние подключение к агенту должно быть - OK 43. Создать группу защиты (Protection Group) 5.2 6 74. Выбрать базы для защиты 8 Есть два варианта: Автоматический – выбираются все базы 9 И второй вариант - выбор в ручном режиме10

Если не появляется, то

Вариант 1 (в примере для SQL Server 2008 R2):

Зайти на SQL сервер

В командной строке выполнить

cd C:\Program Files (x86)\Microsoft SQL Server\100\Shared\
mofcomp sqlmgmproviderxpsp2up.mof

В результате должно быть вот такое сообщение:

Microsoft (R) MOF Compiler Version 6.2.9200.16398
Copyright (c) Microsoft Corp. 1997-2006. All rights reserved.
Parsing MOF file: sqlmgmproviderxpsp2up.mof 
MOF file has been successfully parsed 
Storing data in the repository… 
Done!

Вариант 2:

Выполнить в командной строке на SQL сервере

vssadmin list writers

Убедиться, что SqlServerWriter присутствует без ошибок

Writer name: 'SqlServerWriter'
Writer Id: {a65faa63-5ea8-4ebc-9dbd-a0c4db26912a}
Writer Instance Id: {ceec6494-3f21-4a80-a62e-fa1d754343bc}
State: [1] Stable
Last error: No error

Если нет, то проверить корректность именования баз данных, т.е. в имени баз не должны быть пробелы. Если таковые базы есть, то исправить их имя – убрать пробелы.

В SQL Management Studio выполнить запрос вида:

select name from sys.databases WHERE right(name,1) = ' '

11 12

5. После выбора баз назвываем группу. В примере,

SQL – тип защищаемого ресурса

7d – срок хранения данных 7 дней

2h – период синхронизации каждые 2 часа

Sync – выполнение инкрементального резервного копирования

136. Определить модель базы данных (Full, Simple)

!!!Важный момент!!!

Если база SQL находится в Full режиме, то можно выполнять полное резервное копирование (Express Full Backup) и инкрементальное (Syncronization). При инкрементальном (Syncronization) резервном копировании лог файлы базы (*.ldf) будут усекаться (truncate), НО НЕ сжиматься (shrinking).

Если база SQL находится в Simple режиме, то доступно только полное резервное копирование (Express Full backup) , п.ч. в таком режиме у базы нет лог файла (*.ldf).

Вариант определения режима базы:

1) Выполнить SQL запрос

SELECT name AS [Database Name],
recovery_model_desc AS [Recovery Model]
FROM sys.databases
order by [Recovery Model]
GO

Дополнительно: SQL SERVER – Four Different Ways to Find Recovery Model for Database

2) Выполнить PowerShell скрипт

Часть кода

<#  .SYNOPSIS      USING POWERSHELL TO LIST SQLSERVER USER DATABASES WITH SIMPLE RECOVERY .DESCRIPTION      The function call requires three parameters Inputfile, RecoveryModel(Full,simple,bulklogged) and Database flag ($TRUE=System Database,$FALSE=User Database)  .EXAMPLE     1.PS:\>Get-RecoveryModel -InputFile F:\PowerSQL\Server.txt -RecoveryModel "SIMPLE" -DatabaseFlag $FALSE     2.PS:\>Get-RecoveryModel -InputFile F:\PowerSQL\Server.txt -RecoveryModel "FULL" -DatabaseFlag $TRUE     .NOTES      Author     : Powershellsql@gmail.com .LINK      http://sqlpowershell.wordpress.com/ #>

Function Get-RecoveryModel { param(     $InputFile,     $RecoveryModel,     $DatabaseFlag )  [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | Out-Null    ForEach ($instance in Get-Content $InputFile) {        $s = New-Object ('Microsoft.SqlServer.Management.Smo.Server') $instance        $dbs=$s.Databases| where {$_.RecoveryModel -like "$RecoveryModel" -and  $_.IsSystemObject -eq $DatabaseFlag }        $dbs | select @{Name="ServerName"; Expression = {$Instance}}, Name, RecoveryModel } }

Пример вывода результата в HTML

14

Полная версия скрипта доступна по ссылке -  USING POWERSHELL TO LIST SQLSERVER USER DATABASES WITH RECOVERY MODEL

7. Определить периодичность инкрементальной копии (synchronization) и полной копии (Express Full Backup).

158. Определить как данные будут располагаться в пуле дисков. Для большого количества ресурсов рекомендуется совместить (co-locate data), т.е. в одном динамическом диске будет размещаться несколько защищаемых ресурсов. Также можно выключить автоматическое расширение разделов (volume) в случае не хватки места.

16

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

17

18 9. Первоначальную реплику можно создать

- в автоматическом режиме

- сразу же (Now)

- по расписанию (в наименее нагруженное время для сети и дисковой подсистемы DPM и SQL)

- в ручном режиме (после создания группы нужно будет нажать синхронизация из раздела защиты “Protection”)

1910. Выбрать параметр проверки консистентности данных “consistency check ” (т.е. целостности) в случае возникновения ошибок.

При этом стоит помнить, что consistency check запускается через 15 минут после того как реплика стала не консистентной (т.е. данные между DPM хранилищем и защащаемыми данными разные на блочном уровне “ block-by-block verification ”).

Этот параметр можно изменить, также как и количество попыток

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Data Protection Manager\Configuration] 
"AutoCCDelay"=dword:00000015 
"AutoCCNumberOfAttempts"=dword:00000004

Рекомендуется устанавливать consistency check на время, когда меньше всего нагружены сеть, диски DPM и диски защищаемого сервера.

20

11. Для завершения создания группы защиты необходимо нажать “Create group”

21 22

12. После успешного создания группы первая синхронизация может не пройти

23

Решается это добавлением прав для DPM на SQL сервере.

Идем на SQL сервер и делаем согласно рекомендациям.

24 25

Добавляем NT Service\DPMRA

26 27

 

Запускаем проверку на консистентность, т.е. целостность данных реплики и SQL ресурса

28

Соглашаемся

29

Наблюдаем за происходящим :)

30 31

Для остальных ресурсов выполняет тоже самое

32

!!!Важный момент!!!

 На сервере баз данных SQL должно быть свободное место (на том же логическом диске где и базы) для выполнения служебных заданий и хранения временных файлов.

В нашем случае оно будет равняться объему изменений баз данных за определённый период при выполнении инкрементальной копии (synchronization).

Рассмотрим на примере:

При выполнении инкрементальной копии было передано 119 МБ

3334

35

Временный файл, в который происходит запись, называется Current.log

36

Запись данных в файл

37

После создания снимка файл копируется на DPM сервер в реплику (replica volume).

38

Было

39

Стало

 

40

!!!Важный момент!!!

После успешного создания инкрементальной (одной или нескольких) выполняем на DPM для базы данных полное резервное копирование (Express Full Backup). При полном резервном копировании (Express Full Backup) все данные передаются напрямую на сервер DPM БЕЗ СОЗДАНИЯ ВРЕМЕННЫХ ФАЙЛОВ.

 

41 42 43

Получаем, что синхронизированные блоки перешли из реплики (replica volume) в точку восстановления (recovery point volume).

После этого временный файл из папки “ E:_Базы SQL\DPM_SQL_PROTECT\” удален и объем свободного места диска, на котором находятся базы, увеличился.

44

 

!!!Важный момент!!!

Как ранее уже обсуждалось, DPM не умеет сжимать (shrink) базу данных (уменьшать размер лог файла ldf). Поэтому для уменьшения объема лог файла необходимо выполнить команду в SQL Management Studio.

В примере, размер лог файла станет 500 МБ

USE %название базы данных%
ALTER DATABASE %название базы данных%SET RECOVERY SIMPLE
DBCC SHRINKFILE (%название базы данных%_Log, 500);
ALTER DATABASE %название базы данных% SET RECOVERY FULL

 

@ITKBnews          blog.it.kb         blogitkb

Всего комментариев: 5 Комментировать

  1. Александр /

    Статья отличная, по русски с заметками.
    А нет ли такой же статьи про бекап ВМ в HYPER-V?
    Спасибо.

    1. Eugene Leitan /

      Сделаем :)

      1. Александр /

        Спасибо за понимание, будем ждать!

  2. Обратная ссылка: 31 марта — Всемирный день резервного копирования | Блог IT-KB /

  3. Юрий /

    Привет. Ребят а есть мысли почему после обновления агента DPM на MSSQL Server 2008R2, DPM перестает видеть активный инстант (это скрин не вирус http://joxi.ru/YmEB45jT0oOGB2)

Добавить комментарий