• DevOps
  • Защита информации
  • ИТ-поддержка
  • Резервное копирование 1С на MSSQL

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

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

    Вместе с резервным копированием целесообразно выполнять регламентные операции СУБД, они также делаются встроенными инструментами и их включают в планы обслуживания. Основные регламентные операции это:

    • Обновление статистики
    • Очистка процедурного КЭШа
    • Реорганизация индекса
    • Перестроение индекса

    В нашей инструкции мы рассмотрим следующий план резервного копирования и регламентных операций с СУБД.

    Субпланы резервного копирования

    Daily_Full - Ежедневно в 0:00, кроме воскресенья. Полная резервная копия баз, реорганизация индексов, обновление статистик, очистка процедурного кэша.

    Daily_diff - С понедельника по пятницу дважды в день, в 12.00 и 17:00. Дифференциальная копия баз.

    Daily_log - С понедельника по пятницу каждые 15 минут с 8.00 до 19.00. Копия логов.

    Weekly - Каждое воскресенье в 0.00. Полная резервная копия баз. Перестроение индексов.

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

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

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

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

      ВАЖНО! Пояснение по переводу режимов восстановления.

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

    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 ['[email protected]+'] 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 ['[email protected]+'] 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 ['[email protected]+'] 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 ['[email protected]+'] 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 и написана данная инструкция, могу вас уверить, что таких пользователей достаточно много!
    • Инструкция какой-то сумбур. Новичку приходится 1000 раз перечитывать, чтобы понять ход мыслей автора. Например "Теперь необходимо добавить в субплан задачи очистки". В какой субплан? Откуда можно понять, что мы создали отдельный план обслуживания CleanUp (только по скриншоту?) и видимо так же нужно создать отдельный план Backup? Или мы все это делаем в одном плане обслуживания? Лучше видео сделайте, понятней будет. Так же в начале не хватает описания что мы в принципе будем делать. Т.е. какие действия поэтапно будет производить сервер.
    • Добрый день, Алексей, спасибо за Ваш отзыв, обязательно учтем при написании следующих инструкций. Действительно вопрос резервного копирования - не всегда прост и прозрачен, поэтому иногда лучше нетривиальную задачу поручить профессионалам.
    • а обслуживать базы вим умеет?)
    • В инструкции Резервное копирование 1С на MSSQL пункты 10 и 13.8 разве не делают одну и ту же операцию. В чем смысл такого дублирования?
    • Добрый день. Этот материал будет дописан, зайдите чуть позже, мы скоро разместим актуальную версию.
    • А для чего постоянно перекидвать базу из Full в simple и обратно что будет если этого не делать?
    • Добрый день. Этот материал будет дописан, зайдите чуть позже, мы скоро разместим актуальную версию.
    • Переписали инструкцию? Есть смысл делать по ней сейчас?
    • Добавили информацию по субпланам и уточнение в п.4. Так то инструкция рабочая и была.
    • Вообще не понятно, в кокой момент мы создаем Maintenance plan, в какой субплан; очень неинформативные скриншоты... Простой админ не осилил настроить бекап по вашей инструкции, пришлось самому раскуривать.
    • Сначала Maintenance (п.3), затем субпланы. Да, инструкция устарела. Напишем новую.
    • Здравствуйте. Подскажите (может я не прав) в суб. плане Daily_diff - Вы пишете 2 раза в день. Насколько мне известно (может я не прав конечно) но Разностные (Differential) можно делать только после полного бекапа. А как делать 2 раза после 1 бекапа?
    • делается фул-бэкап, на основе него 2 инкрементных
    Содержание

    Есть вопросы?

    Закажите звонок специалиста!

    Есть вопросы?

    Закажите звонок специалиста!
    *нажимая на кнопку, Вы даете согласие на обработку персональных данных