Как правильно создать резервную копию базы 1С на MS SQL Server и нужно ли выгонять пользователей?

Системный администратор 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При администрировании клиент-серверных баз 1С:Предприятия часто возникает вопрос организации регулярного резервного копирования. Начинающие специалисты нередко пытаются применить к базам на MS SQL Server подходы, привычные для файловых версий: принудительно завершить работу всех пользователей, запустить Конфигуратор в пакетном режиме командной строки и выгрузить файл с расширением .dt. Разберем по шагам, почему такой подход является методически неверным, в каких случаях действительно требуется отключать пользователей и как правильно организовать резервное копирование базы данных.

Разница между резервной копией СУБД и выгрузкой в файл .dt

Выясним причину, по которой сама фирма «1С» настоятельно рекомендует разграничивать понятия резервного копирования и технологической выгрузки данных:

  1. Файл выгрузки .dt — это специализированный транспортный формат платформы 1С:Предприятие. Его основное назначение — перенос данных между разнородными СУБД (например, переход с файловой базы на MS SQL Server, PostgreSQL или обратно). Механизм создания .dt требует исключительно монопольного доступа ко всей информационной базе. Если в конфигурации присутствуют логические или физические повреждения таблиц, выгрузка либо завершится с фатальной ошибкой, либо сформирует архив, который впоследствии будет невозможно загрузить обратно.
  2. Резервная копия СУБД (файл .bak) — это полноценный физический снимок страниц базы данных и журнала транзакций на определенный момент времени. СУБД гарантирует транзакционную целостность: даже если пользователи активно читают и записывают данные в момент снятия копии, в резервный архив попадут только зафиксированные транзакции. Незавершенные транзакции будут автоматически откатаны при восстановлении.

Таким образом, для регулярной защиты данных необходимо настраивать создание бэкапов именно средствами СУБД, а не через выгрузку Конфигуратора.

Нужно ли завершать сеансы пользователей при резервном копировании MS SQL Server?

Проанализируем работу штатных механизмов Microsoft SQL Server. При выполнении инструкции создания резервной копии отключать пользователей не требуется. Это касается как пользователей, работающих в режиме тонкого или толстого клиента, так и разработчиков, у которых открыт Конфигуратор.

В момент снятия копии сервер баз данных фиксирует текущее состояние страниц и параллельно считывает журнал транзакций. Работа пользователей не блокируется, производительность базы данных снижается лишь незначительно на время дисковых операций ввода-вывода. По этой причине прерывать сеансы пользователей, а тем более использовать блокировки соединений ради создания бэкапа MS SQL Server, нет никакой необходимости.

Автоматизация резервного копирования средствами СУБД через Планировщик Windows

Если используется редакция MS SQL Server Standard или Enterprise, резервное копирование настраивается с помощью планов обслуживания (Maintenance Plans) и встроенного агента SQL Server Agent. Однако в бесплатной редакции MS SQL Server Express агент отсутствует. В этом случае задачу запуска бэкапа по расписанию решает Планировщик заданий Windows в связке с консольной утилитой sqlcmd.

Рассмотрим пример создания резервной копии базы данных с динамическим формированием имени файла, содержащего дату и время. Для этого создадим командный файл со следующим сценарием:


@echo off
set SERVER_NAME=localhost\SQLEXPRESS
set DB_NAME=UPP
set BACKUP_DIR=E:\Backup\UPP

:: Формируем метку времени в формате ГГГГ-ММ-ДД
for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /value') do set datetime=%%I
set DATE_STAMP=%datetime:~0,4%-%datetime:~4,2%-%datetime:~6,2%

set BACKUP_FILE=%BACKUP_DIR%\%DB_NAME%_%DATE_STAMP%.bak

:: Выполняем создание бэкапа средствами утилиты sqlcmd
sqlcmd -S %SERVER_NAME% -E -Q "BACKUP DATABASE [%DB_NAME%] TO DISK = N'%BACKUP_FILE%' WITH FORMAT, INIT, COMPRESSION, CHECKSUM;"

Разберем параметры инструкции BACKUP DATABASE:

  1. COMPRESSION — включает встроенное сжатие резервной копии, что существенно экономит дисковое пространство и ускоряет запись на диск.
  2. CHECKSUM — проверяет контрольные суммы страниц данных перед их записью в архив, гарантируя физическую целостность создаваемого файла.
  3. INIT и FORMAT — перезаписывают заголовок медианабора, создавая чистый файл резервной копии.

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

Как выгнать пользователей, если требуется монопольный режим Конфигуратора

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

Разберем по шагам, как корректно заблокировать подключения, сбросить существующие сеансы и выполнить пакетную выгрузку.

  1. Установка блокировки соединений. Для запрета новых подключений к базе используется утилита администрирования rac (работающая через службу ras). Команда блокировки сеансов и фоновых заданий с установкой кода разрешения:
    
    rac infobase update --cluster=<ID_Кластера> --infobase=<ID_Базы> --sessions-deny=on --scheduled-jobs-deny=on --permission-code="BackupSecretCode"
    
  2. Принудительное завершение активных соединений. Утилита rac позволяет получить список активных сеансов командой rac session list и поочередно завершить их вызовом команды: rac session terminate --cluster=<ID_Кластера> --session=<ID_Сеанса> Также отключение сеансов можно выполнить программно через объект V83.COMConnector, вызвав метод TerminateSession() для каждого сеанса информационной базы.
  3. Запуск Конфигуратора в пакетном режиме. После освобождения базы вызывается исполняемый файл платформы. Обратите внимание на обязательные параметры:
    
    "C:\Program Files\1cv8\8.3.XX.XXXX\bin\1cv8.exe" DESIGNER /S "Server1C\UPP" /N "Администратор" /P "Пароль" /UC "BackupSecretCode" /DumpIB "E:\Backup\UPP\UPP_dump.dt" /DisableStartupMessages /DisableStartupDialogs /Out "E:\Backup\UPP\dump_log.txt" -NoTruncate
    
  4. Снятие блокировки соединений. После завершения процесса Конфигуратора необходимо вернуть доступ пользователям, отключив параметры блокировки:
    
    rac infobase update --cluster=<ID_Кластера> --infobase=<ID_Базы> --sessions-deny=off --scheduled-jobs-deny=off
    

Параметр /UC "BackupSecretCode" критически важен: он позволяет Конфигуратору успешно подключиться к информационной базе в обход установленной блокировки соединений. Параметры /DisableStartupMessages и /DisableStartupDialogs предотвращают зависание фонового скрипта на системных модальных окнах, а параметр /Out сохраняет протокол выполнения операции в текстовый файл для последующего анализа.

Итог: для повседневного резервного копирования клиент-серверных баз всегда используйте средства MS SQL Server без отключения пользователей. Прибегать к выгону пользователей и пакетному режиму Конфигуратора следует исключительно для процедур обновления и технологического обслуживания информационной базы.

← На главную