В процессе администрирования клиент-серверных баз 1С периодически возникает необходимость получить файл выгрузки базы данных (формат .dt), например, для передачи копии базы разработчику или тестирования в локальной среде. При этом стандартное резервное копирование рабочей базы данных должно осуществляться средствами самой СУБД (MS SQL Server или PostgreSQL), так как формат .dt не является полноценным инструментом транзакционного бэкапа. Разберем по шагам, как решить задачу выгрузки данных, корректно отключить пользователей и фоновые задания, а также рассмотрим риски и правильные сценарии автоматизации.
Проанализируем механику работы платформы при выполнении команды выгрузки /DumpIB. Выгрузка в .dt считывает таблицы базы данных последовательно. Если в этот момент пользователи или фоновые регламентные задания вносят изменения в базу данных (создают или проводят документы, пишут записи в регистры), ссылочная целостность в полученном файле нарушается: часть связанных объектов попадет в выгрузку в новом состоянии, а часть — в старом.
Кроме того, категорически запрещено подключать в консоли кластера серверов 1С две разные информационные базы к одной и той же базе данных SQL для «тихого» снятия выгрузки. Это приводит к рассинхронизации серверного кэша метаданных, сбоям в работе менеджера транзакционных блокировок и нарушению уникальности нумерации документов.
Рассмотрим наиболее надежный и рекомендованный способ получения файла .dt без выгона пользователей из рабочей системы и без риска повредить рабочие данные:
Блокировка регламентных заданий включена и Блокировка начала сеансов включена.Посмотрим на пример командной строки для выгрузки из предварительно заблокированной базы:
"C:\Program Files\1cv8\common\1cestart.exe" DESIGNER /S "app-server\tech_base" /N "Администратор" /P "Пароль123" /DumpIB "D:\Backups\Base_Copy.dt" /DisableStartupMessages /DisableStartupDialogs /Out "D:\Backups\dump_log.txt" -NoTruncate
Если требуется выполнить регламентные работы или выгрузку непосредственно на рабочей базе данных в ночное время, необходимо полностью исключить активность пользователей и регламентных фоновых заданий. Выясним причину: согласно технологическим стандартам 1С, перед выполнением монопольных процедур все регламентные процессы должны быть остановлены.
Разберем способы автоматизации блокировки:
rac.exe позволяет автоматизировать управление сеансами и свойствами базы данных через командные файлы:
rac infobase --cluster=cluster-id update --infobase=ib-id --sessions-denied=on --scheduled-jobs-denied=on --permission-code="AdminCode" --denied-message="База на обслуживании"
rac session --cluster=cluster-id terminate --infobase=ib-id
/UC с кодом разрешения, заданным ранее:
"C:\Program Files\1cv8\common\1cestart.exe" DESIGNER /S "app-server\work_base" /N "Администратор" /P "Пароль123" /UC "AdminCode" /DumpIB "D:\Backups\Base.dt" /Out "D:\Backups\dump_log.txt"
SessionsDenied, ScheduledJobsDenied, устанавливаем интервал DeniedFrom и принудительно вызываем метод TerminateSession() для всех текущих подключений.Если файл .dt создается для передачи разработчику в файловую среду, важно учитывать ограничения формата файловой базы 1CD. Размер любой отдельной таблицы в файловой базе не может превышать 4 ГБ. Если база на SQL имеет крупные таблицы итогов, журнала регистрации или версий объектов, выгрузка в .dt пройдет успешно, но загрузить ее в файловую базу разработчик не сможет из-за ошибки переполнения таблицы. В таких случаях для разработки рекомендуется разворачивать бесплатный локальный сервер СУБД (например, MS SQL Server Express) и восстанавливать данные напрямую из резервной копии SQL.