Обратный звонок RedConnect
ИТ-поддержка

Резервное копирование 1С на MSSQL

Резервное копирование баз 1С происходит стандартными планами обслуживания СУБД MSSQL. Система позволяет делать надежные полные, а также дифференциальные копии баз данных. Процесс резервного копирования проходит незаметно для клиента и может выполняться в рабочее время без остановки работы пользователей в 1С.

Порядок действий:

  1. Необходимо запустить Microsoft SQL Server Management Studio и выполнить подключение к серверу.
  2. Для ВСЕХ пользовательских баз данных отключить автоматическое обновление индексов. Это связано с тем, что обновление индексов будет производиться по указанному нами расписанию.
    1. Открываем список баз данных, выделяем базу и вызываем правой кнопкой мыши контекстное меню.
    2. Открываем опции базы, меняем значение параметра Auto update statistics с true на false.
  3. Создаем новый план обслуживания Maintenance:
  4. Корректируем имя субплана и настраиваем расписание. Двойной клик по имени Subplan_1.

    Пример расписания:

    При такой настройке расписания задача будет выполняться ежедневно в 0:00, кроме воскресенья.

  5. При работе с индексами баз данных желательно перевести пользовательские базы из режима восстановления FULL в режим SIMPLE. Для этого добавляем в субплан задачу Execute T-SQL Statement task.
    1. В настройках задачи добавляем код:
      DECLARE @name VARCHAR(50)
      DECLARE db_cursor CURSOR FOR
      SELECT name
      FROM master.dbo.sysdatabases
      WHERE name NOT IN ('master','model','msdb','tempdb')
      
      OPEN db_cursor
      FETCH NEXT FROM db_cursor INTO @name
      WHILE @@FETCH_STATUS = 0
      BEGIN
       EXEC('ALTER DATABASE ['+@name+'] SET RECOVERY SIMPLE WITH NO_WAIT')
       FETCH NEXT FROM db_cursor INTO @name
      END
  6. Добавляем задачу реорганизации индексов:
    1. В настройках задачи выбираем реорганизацию всех пользовательских баз:
  7. После реорганизации индексов следует провести обновление статистики пользовательских баз:
    1. В настройках выбираем обновление всей статистики всех пользовательских баз с полным сканированием:
  8. Сбрасываем процедурный кэш SQL-сервера и возвращаем пользовательские базы из режима восстановления SIMPLE в режим FULL. Для этого добавляем в субплан задачу Execute T-SQL Statement task.
    1. В настройках задачи добавляем код:
      DBCC FREEPROCCACHE
      
      DECLARE @name VARCHAR(50)
      DECLARE db_cursor CURSOR FOR
      SELECT name
      FROM master.dbo.sysdatabases
      WHERE name NOT IN ('master','model','msdb','tempdb')
      
      OPEN db_cursor
      FETCH NEXT FROM db_cursor INTO @name
      WHILE @@FETCH_STATUS = 0
      BEGIN
       EXEC('ALTER DATABASE ['+@name+'] SET RECOVERY FULL WITH NO_WAIT')
       FETCH NEXT FROM db_cursor INTO @name
      END
      
  9. Теперь необходимо добавить в субплан задачи очистки. Эти задачи способны обрабатывать только один тип файлов резервных копий. Так как создается 2 типа файлов (bak и trn), задания делаем тоже два.
    1. В настройках задания указываем путь к резервным копиям, возраст копий для удаления (4 недели) и расширение файлов.
    2. Резервные копии складываются в отдельные папки для каждой базы, поэтому включаем поиск в подкаталогах первого уровня:
    3. Настройки второй задачи отличаются расширением удаляемых файлов: trn.
  10. После удаления устаревших резервных копий добавляем задачу создания новой полной резервной копии:
    1. Настраиваем добавленное задание:
    2. Указываем тип backup Full, указываем пункт все пользовательские базы без игнорирования отключенных баз.
    3. Ставим время устаревания резервных копий 14 дней.
    4. Указываем создание отдельных файлов для каждой базы данных с созданием отдельных папок для каждой базы, указываем путь для сохранения (локальный или сетевой). Расширение файлов резервных копий bak.
    5. Включаем проверку целостности резервных копий (Verify backup integrity), включаем сжатие резервных копий (Compress backup).
  11. Теперь необходимо связать последовательно все задачи. Для этого необходимо выделить первую, нажать на стрелке внизу задачи и нажать на следующей.
    1. Добавляем субпланы Daily_diff и Daily_log:
    2. Расписание и настройки для Daily_diff:

      Данный субплан будет выполняться с понедельника по пятницу дважды в день, в 12.00 и 17:00.

    3. Добавляем задачу создания разностной резервной копии:
    4. Настройки для задачи резервирования в субплане Daily_diff аналогичны таковым в Daily_full, за исключением типа резервирования: Differential.
    5. Расписание и настройки для Daily_log:

      Расписание задачи настроено на выполнение с понедельника по пятницу каждые 15 минут с 8.00 до 19.00.

  12. Добавляем задачу создания резервной копии.

    Настройки задачи резервирования log отличаются типом (transaction log) и расширением (trn) резервных копий.

  13. Создадим субплан Weekly еженедельного обслуживания:
    1. Настраиваем расписание:

      Задача будет запускаться каждое воскресенье в 0.00.

    2. Переводим пользовательские базы из режима восстановления FULL в режим SIMPLE. Для этого добавляем в субплан задачу Execute T-SQL Statement task.
    3. В настройках задачи добавляем код:
      DECLARE @name VARCHAR(50)
      DECLARE db_cursor CURSOR FOR
      SELECT name
      FROM master.dbo.sysdatabases
      WHERE name NOT IN ('master','model','msdb','tempdb')
      
      OPEN db_cursor
      FETCH NEXT FROM db_cursor INTO @name
      WHILE @@FETCH_STATUS = 0
      BEGIN
       EXEC('ALTER DATABASE ['+@name+'] SET RECOVERY SIMPLE WITH NO_WAIT')
       FETCH NEXT FROM db_cursor INTO @name
      END
      
    4. Добавляем задачу перестроения индексов:
    5. В настройках задачи выбираем перестроение индексов всех пользовательских баз:
    6. Сбрасываем процедурный кэш SQL-сервера и возвращаем пользовательские базы из режима восстановления SIMPLE в режим FULL. Для этого добавляем в субплан задачу Execute T-SQL Statement task.
    7. В настройках задачи добавляем код:
      DBCC FREEPROCCACHE
      
      DECLARE @name VARCHAR(50)
      DECLARE db_cursor CURSOR FOR
      SELECT name
      FROM master.dbo.sysdatabases
      WHERE name NOT IN ('master','model','msdb','tempdb')
      
      OPEN db_cursor
      FETCH NEXT FROM db_cursor INTO @name
      WHILE @@FETCH_STATUS = 0
      BEGIN
       EXEC('ALTER DATABASE ['+@name+'] SET RECOVERY FULL WITH NO_WAIT')
       FETCH NEXT FROM db_cursor INTO @name
      END
      
    8. Так как план еженедельного обслуживания не выполняется в воскресенье, добавим задачу создания полной резервной копии пользовательских баз:
    9. Настраиваем добавленное задание:
      • Ставим время устаревания резервных копий 14 дней.
      • Включаем проверку целостности резервных копий (Verify backup integrity), включаем сжатие резервных копий (Compress backup).
      • Указываем создание отдельных файлов для каждой базы данных с созданием отдельных папок для каждой базы, указываем путь для сохранения (локальный или сетевой). Расширение файлов резервных копий bak.
    10. Указываем тип backup Full, указываем пункт все пользовательские базы без игнорирования отключенных баз.
    11. Теперь необходимо связать последовательно все задачи. Для этого необходимо выделить первую, нажать на стрелке внизу задачи и нажать на следующей.
  • Рђ зачем так сложно? Если есть деньги РЅР° MS SQL - то найдутся деньги РЅР° Veeam. Veeam умеет делать бэкап всей машины, Рё РІ придачу пишет лог транзакций - точки восстановления можно делать чуть ли РЅРµ каждую минуту.
  • После перевода баз в simple recovery model вы теряете возможность восстановления по журналу транзакций, которую предоставляет full. Случись что в интервале между переводом в simple и созданием резервной копии – вы потеряете день. Такие рецепты – подробные, с картинками, без описания того, почему делается именно это – попросту опасны.
  • Спасибо, Станислав, за Ваше внимание к нашей статье. Перед выполнением плана обслуживания выполняется полная резервная копия, которая собственно и закрывает цепочку логов, после чего проводится обслуживание с базой. Поэтому восстановление по журналу транзакций не потеряется. Так что в данной инструкции нет ничего опасного, если сделать как написано.
  • Иван, Veeam отличное решение, но вот на счет средств на его закупку - спорное утверждение. И именно для тех, кому хватило денег только на MS SQL и написана данная инструкция, могу вас уверить, что таких пользователей достаточно много!