• 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. Теперь необходимо связать последовательно все задачи. Для этого необходимо выделить первую, нажать на стрелке внизу задачи и нажать на следующей.
    Не нашли ответа на свой вопрос?
    Содержание

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

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

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

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