При администрировании клиент-серверных баз 1С:Предприятия часто возникает вопрос организации регулярного резервного копирования. Начинающие специалисты нередко пытаются применить к базам на MS SQL Server подходы, привычные для файловых версий: принудительно завершить работу всех пользователей, запустить Конфигуратор в пакетном режиме командной строки и выгрузить файл с расширением .dt. Разберем по шагам, почему такой подход является методически неверным, в каких случаях действительно требуется отключать пользователей и как правильно организовать резервное копирование базы данных.
Выясним причину, по которой сама фирма «1С» настоятельно рекомендует разграничивать понятия резервного копирования и технологической выгрузки данных:
.dt — это специализированный транспортный формат платформы 1С:Предприятие. Его основное назначение — перенос данных между разнородными СУБД (например, переход с файловой базы на MS SQL Server, PostgreSQL или обратно). Механизм создания .dt требует исключительно монопольного доступа ко всей информационной базе. Если в конфигурации присутствуют логические или физические повреждения таблиц, выгрузка либо завершится с фатальной ошибкой, либо сформирует архив, который впоследствии будет невозможно загрузить обратно..bak) — это полноценный физический снимок страниц базы данных и журнала транзакций на определенный момент времени. СУБД гарантирует транзакционную целостность: даже если пользователи активно читают и записывают данные в момент снятия копии, в резервный архив попадут только зафиксированные транзакции. Незавершенные транзакции будут автоматически откатаны при восстановлении.Таким образом, для регулярной защиты данных необходимо настраивать создание бэкапов именно средствами СУБД, а не через выгрузку Конфигуратора.
Проанализируем работу штатных механизмов Microsoft SQL Server. При выполнении инструкции создания резервной копии отключать пользователей не требуется. Это касается как пользователей, работающих в режиме тонкого или толстого клиента, так и разработчиков, у которых открыт Конфигуратор.
В момент снятия копии сервер баз данных фиксирует текущее состояние страниц и параллельно считывает журнал транзакций. Работа пользователей не блокируется, производительность базы данных снижается лишь незначительно на время дисковых операций ввода-вывода. По этой причине прерывать сеансы пользователей, а тем более использовать блокировки соединений ради создания бэкапа MS SQL Server, нет никакой необходимости.
Если используется редакция 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:
COMPRESSION — включает встроенное сжатие резервной копии, что существенно экономит дисковое пространство и ускоряет запись на диск.CHECKSUM — проверяет контрольные суммы страниц данных перед их записью в архив, гарантируя физическую целостность создаваемого файла.INIT и FORMAT — перезаписывают заголовок медианабора, создавая чистый файл резервной копии.Данный командный файл добавляется в стандартный Планировщик задач Windows для ежедневного ночного запуска. Никаких прерываний сессий пользователей при этом не происходит.
Существуют регламентные операции, когда монопольный доступ к информационной базе действительно необходим (например, обновление конфигурации базы данных, тестирование и исправление или периодическая выгрузка в .dt для передачи разработчикам). В этом случае пакетный режим Конфигуратора завершится ошибкой, если в базе останется хотя бы один активный сеанс или фоновое задание.
Разберем по шагам, как корректно заблокировать подключения, сбросить существующие сеансы и выполнить пакетную выгрузку.
rac (работающая через службу ras). Команда блокировки сеансов и фоновых заданий с установкой кода разрешения:
rac infobase update --cluster=<ID_Кластера> --infobase=<ID_Базы> --sessions-deny=on --scheduled-jobs-deny=on --permission-code="BackupSecretCode"
rac позволяет получить список активных сеансов командой rac session list и поочередно завершить их вызовом команды:
rac session terminate --cluster=<ID_Кластера> --session=<ID_Сеанса>
Также отключение сеансов можно выполнить программно через объект V83.COMConnector, вызвав метод TerminateSession() для каждого сеанса информационной базы.
"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
rac infobase update --cluster=<ID_Кластера> --infobase=<ID_Базы> --sessions-deny=off --scheduled-jobs-deny=off
Параметр /UC "BackupSecretCode" критически важен: он позволяет Конфигуратору успешно подключиться к информационной базе в обход установленной блокировки соединений. Параметры /DisableStartupMessages и /DisableStartupDialogs предотвращают зависание фонового скрипта на системных модальных окнах, а параметр /Out сохраняет протокол выполнения операции в текстовый файл для последующего анализа.
Итог: для повседневного резервного копирования клиент-серверных баз всегда используйте средства MS SQL Server без отключения пользователей. Прибегать к выгону пользователей и пакетному режиму Конфигуратора следует исключительно для процедур обновления и технологического обслуживания информационной базы.