Резервная копия клиент-серверной базы 1С: .dt, SQL Server, PostgreSQL и VSS

· 10 мин

Содержание

Копию серверной базы 1С делают двумя путями: выгрузкой в файл .dt через Конфигуратор или резервной копией средствами СУБД (BACKUP DATABASE в MS SQL Server, pg_dump в PostgreSQL). Для ежедневного бэкапа рабочей базы надёжнее второй путь: он быстрее, не мешает пользователям и проверяется контрольными суммами.

Выгрузка .dt удобна, когда копию нужно перенести на другой сервер или другую СУБД. Какой бы способ вы ни выбрали, копия ценна только тогда, когда из неё хоть раз восстановились.

Встроенная обработка «Резервное копирование» в типовых конфигурациях рассчитана на файловые базы. В клиент-серверном варианте программа сама предлагает пользоваться средствами СУБД.

Подготовка: права, место на диске и имя базы в СУБД

Прежде чем запускать копирование, выясните три вещи. Без них бэкап чаще всего падает на середине.

1. Как база называется в СУБД. Имя информационной базы в кластере 1С и имя базы данных на SQL Server могут не совпадать. Откройте консоль администрирования серверов 1С, найдите базу в разделе Информационные базы и посмотрите её свойства: там указаны сервер баз данных, тип СУБД и имя базы данных.

2. Права.

  • 🔑 Для .dt — пользователь 1С с административными правами (роль «Полные права» или аналогичная).
  • 🔑 Для SQL Server — логин с ролью db_backupoperator на нужной базе или sysadmin.
  • 📁 Папка для бэкапов должна быть доступна на запись учётной записи службы SQL Server, а не вашему пользователю Windows. Иначе получите Operating system error 5(Access is denied.).
  • 🐘 Для PostgreSQL — роль-владелец базы или суперпользователь postgres.

3. Место. Полный бэкап SQL без сжатия занимает примерно столько же, сколько данные в файле .mdf (без свободного места внутри). Со сжатием — обычно в 3–6 раз меньше. Файл .dt уже сжат и тоже заметно меньше базы.

СпособКогда подходитРабота пользователейСкорость на базе 100 ГБ
Выгрузка .dtперенос на другой сервер или СУБД, копия для разработчикалучше без пользователейчасы
BACKUP DATABASE (MS SQL)ежедневный бэкап, копия для тестовне мешаетминуты–десятки минут
pg_dump (PostgreSQL)бэкап и перенос в пределах PostgreSQLне мешаетдесятки минут
VSS-снимок всего серверарезервирование ВМ или сервера целикомне мешаетзависит от системы бэкапа

Время — ориентировочное, сильно зависит от дисков и процессора.

Выгрузка в .dt через Конфигуратор и роль консоли кластера

Файл .dt — это логическая выгрузка базы средствами платформы. Он не зависит от СУБД: выгрузили из MS SQL, загрузили в PostgreSQL или в файловую базу .

Пошагово

  1. Запустите 1С, выберите серверную базу и нажмите Конфигуратор.
  2. В меню выберите Администрирование → Выгрузить информационную базу.
  3. Укажите путь и имя файла, например D:\Backup\buh_20261007.dt.
  4. Дождитесь сообщения о завершении выгрузки.

Выгрузку большой базы лучше запускать вечером, когда пользователи не работают. Пока идёт выгрузка, данные продолжают меняться, а на базе в десятки гигабайт процесс занимает часы.

Зачем здесь консоль кластера

Сама консоль администрирования серверов 1С бэкап не делает. Но она нужна для подготовки:

  • 🔒 в свойствах базы включите Блокировку начала сеансов, задайте время и сообщение для пользователей, а также код разрешения — с ним вы сами сможете войти;
  • ⏸ включите Блокировку регламентных заданий, чтобы обмены и загрузки не стартовали посреди выгрузки;
  • 👥 в разделе Сеансы проверьте, кто ещё работает в базе.

Если завершить сеансы принудительно, пользователи потеряют несохранённые документы. Предупредите их заранее и делайте это вне рабочего времени.

Файл .dt не заменяет полноценный бэкап СУБД. Его удобно держать как дополнительную копию раз в неделю или перед обновлением, но для ежедневной защиты он слишком медленный.

Копия серверной базы средствами MS SQL Server

Это основной способ для баз на SQL Server. Копию можно сделать мышкой в SQL Server Management Studio или одной командой.

Через SSMS

  1. Подключитесь к серверу, раскройте Databases.
  2. Правой кнопкой по базе → Tasks → Back Up….
  3. Тип — Full. Если это разовая копия, отметьте Copy-only backup.
  4. В Destination удалите старый путь и добавьте новый файл .bak.
  5. На странице параметров включите проверку контрольной суммы и, если редакция позволяет, сжатие.

Командой T-SQL

BACKUP DATABASE [buh]
TO DISK = N'D:\Backup\buh_copy.bak'
WITH COPY_ONLY, COMPRESSION, CHECKSUM, STATS = 10;
  • COPY_ONLY — разовая копия не ломает цепочку разностных бэкапов, если она у вас настроена.
  • COMPRESSION — сжатие. В редакции Express его нет, уберите параметр.
  • CHECKSUM — SQL Server проверит страницы при чтении и запишет контрольные суммы в файл.
  • STATS = 10 — прогресс каждые 10 %.

Модель восстановления и журнал

В модели Full журнал транзакций растёт, пока вы не делаете бэкап журнала (BACKUP LOG). Если бэкапы журнала не настроены, файл .ldf за пару месяцев может стать больше самой базы.

Для небольшой организации обычно хватает модели Simple и ежедневного полного бэкапа. Модель Full с бэкапом журнала каждые 15–60 минут нужна, когда потеря даже дня работы недопустима.

Если база 1С работает на PostgreSQL

Для PostgreSQL используйте pg_dump в формате custom — он сжат и позволяет восстанавливать выборочно.

"C:\Program Files\PostgreSQL\15\bin\pg_dump.exe" -U postgres -h localhost -Fc -f D:\Backup\buh.backup buh

На Linux команда та же, без пути к программе. Пароль удобно хранить в файле pgpass.conf (Windows) или ~/.pgpass (Linux), чтобы скрипт не спрашивал его.

Восстановление в новую базу:

createdb -U postgres -T template0 buh_test
pg_restore -U postgres -d buh_test D:\Backup\buh.backup

Используйте pg_dump и pg_restore из той же сборки PostgreSQL, на которой работает 1С. Сборки для 1С содержат доработки, и утилиты от другой версии могут не прочитать архив.

Как развернуть копию как отдельную базу в кластере

Частая задача — не просто сохранить бэкап, а поднять рядом с рабочей тестовую копию. Здесь есть приём, который часто пропускают.

Шаг 1. Восстановите бэкап под новым именем

Сначала узнайте логические имена файлов внутри бэкапа:

RESTORE FILELISTONLY FROM DISK = N'D:\Backup\buh_copy.bak';

Затем восстановите, переименовав физические файлы, чтобы не затереть рабочие:

RESTORE DATABASE [buh_test]
FROM DISK = N'D:\Backup\buh_copy.bak'
WITH MOVE N'buh' TO N'D:\SQLData\buh_test.mdf',
     MOVE N'buh_log' TO N'D:\SQLData\buh_test_log.ldf',
     RECOVERY, STATS = 10;

Вместо buh и buh_log подставьте значения из столбца LogicalName, которые вернул первый запрос.

Шаг 2. Зарегистрируйте базу в кластере 1С

  1. В консоли администрирования серверов 1С: правой кнопкой по Информационные базы → Создать → Информационная база.
  2. Имя — например, buh_test. Сервер баз данных и тип СУБД — как у рабочей.
  3. Имя базы данных — buh_test, то есть та, что вы только что восстановили.
  4. Флажок «Создать базу данных в случае её отсутствия» снимите: база уже есть.
  5. Обязательно отметьте «Блокировка регламентных заданий включена».

Последний пункт — главный. Без него копия начнёт выполнять регламентные задания рабочей базы: отправлять документы в ЭДО, загружать выписки, запускать обмены с сайтом и другими базами. В итоге в рабочих системах появятся дубли.

Шаг 3. Первый запуск копии

При первом входе типовые конфигурации на БСП обычно замечают, что база запущена по другому адресу, и спрашивают, копия это или перенос. Выберите вариант, что это копия: тогда работа с внешними ресурсами в ней останется заблокированной.

Для тестовой базы также стоит поменять заголовок приложения в настройках программы, например на «КОПИЯ — не работать!». Так пользователи не перепутают окна.

VSS-снимки: когда копия сервера целиком годится для 1С

Системы резервирования серверов (Windows Server Backup, Veeam и подобные) используют службу теневого копирования VSS. Снимок делается за секунды, а данные копируются уже с него.

Чтобы снимок базы был целостным

  • ✅ Служба SQL Server VSS Writer должна быть запущена (проверьте в services.msc).
  • ✅ В системе бэкапа включена обработка приложений (application-aware). Тогда SQL Server на мгновение «замораживает» запись, и файлы базы попадают в снимок в согласованном состоянии.
  • ✅ Для PostgreSQL VSS-писателя нет. Снимок файлов работающего PostgreSQL получается «как после отключения питания». Надёжнее рядом делать pg_dump по расписанию.

Подвох с цепочкой бэкапов

У Windows Server Backup есть выбор между «полным резервным копированием VSS» и «копирующим резервным копированием VSS». Полный вариант SQL Server считает обычным полным бэкапом: он может обрезать журнал и сдвинуть базу для разностных бэкапов. Если бэкапы базы уже делает SQL Server по своему расписанию, в системе бэкапа сервера выбирайте копирующий режим.

Никогда не копируйте файлы .mdf и .ldf проводником или robocopy при работающей службе SQL Server. Такая копия часто не подключается или подключается с повреждениями.

Каталог служебных файлов сервера 1С (srvinfo) в бэкап базы не входит. Сохраняйте его отдельно, при остановленной службе сервера 1С: там список баз и настройки кластера. Остановка службы оборвёт сеансы пользователей, поэтому делайте это вне рабочего времени.

Автоматический бэкап по расписанию: скрипты и планировщик

На полноценном SQL Server используйте планы обслуживания (Management → Maintenance Plans) или задание SQL Server Agent. В редакции Express агента нет — там выручает Планировщик заданий Windows.

Скрипт для SQL Server Express

Файл D:\Scripts\backup_buh.sql:

DECLARE @f nvarchar(260) =
  N'D:\Backup\buh_' + FORMAT(GETDATE(), 'yyyyMMdd_HHmm') + N'.bak';
BACKUP DATABASE [buh] TO DISK = @f WITH CHECKSUM, INIT, STATS = 10;

Файл D:\Scripts\backup_buh.bat:

sqlcmd -S localhost\SQLEXPRESS -E -b -i D:\Scripts\backup_buh.sql -o D:\Scripts\backup_buh.log
forfiles /p D:\Backup /m buh_*.bak /d -14 /c "cmd /c del @path"

Первая строка делает бэкап и пишет отчёт в лог. Вторая удаляет архивы старше 14 дней.

Планировщик заданий Windows

  1. Откройте taskschd.msc → Создать задачу .
  2. На вкладке «Общие» выберите учётную запись, у которой есть доступ к SQL Server, и отметьте «Выполнять для всех пользователей».
  3. «Триггеры» — ежедневно, например в 23:00.
  4. «Действия» — запуск D:\Scripts\backup_buh.bat.
  5. Запустите задачу вручную и проверьте лог и появление файла .bak.

Выгрузка .dt по расписанию

Для еженедельной выгрузки .dt запускайте Конфигуратор в пакетном режиме:

"C:\Program Files\1cv8\8.3.24.1691\bin\1cv8.exe" DESIGNER /S "srv1c\buh" /N "Администратор" /P "пароль" /DumpIB "D:\Backup\buh.dt" /Out "D:\Backup\dump.log" /DisableStartupDialogs

Номер версии в пути замените на свой. Если в базе включена блокировка начала сеансов, добавьте ключ /UC с кодом разрешения.

Пароль администратора 1С в bat-файле лежит открытым текстом. Ограничьте доступ к папке со скриптами, а для выгрузки заведите отдельного пользователя 1С.

Хранение и проверка целостности архивов

Бэкап, из которого ни разу не восстанавливались, — это надежда, а не копия. Проверка занимает немного времени и делается по трём уровням.

Где хранить

Классическое правило 3-2-1: три копии данных, на двух разных носителях, одна — вне сервера. Минимум для небольшой организации:

  • 💾 свежие бэкапы на отдельном диске сервера (не на том, где база);
  • 🌐 копия на NAS или другом сервере, например через robocopy D:\Backup \\nas\1c_backup /MIR — с осторожностью, /MIR удаляет на приёмнике то, чего нет в источнике;
  • ☁️ еженедельная копия в облако или на отключаемый носитель — на случай шифровальщика.

Ориентир по глубине хранения: ежедневные — 14 дней, еженедельные — 2 месяца, месячные (на конец месяца) — год. Глубину подгоняйте под объём диска и требования бухгалтерии.

Как проверить архив

  1. Читаемость файла — без восстановления:
RESTORE VERIFYONLY FROM DISK = N'D:\Backup\buh_copy.bak' WITH CHECKSUM;
  1. Целостность самой базы — раз в неделю на рабочей базе или на восстановленной копии:
DBCC CHECKDB (N'buh_test') WITH NO_INFOMSGS;
  1. Пробное восстановление — раз в месяц восстановите бэкап под другим именем, зарегистрируйте в кластере с блокировкой регламентных заданий и откройте в 1С. Сформируйте оборотно-сальдовую ведомость за прошлый месяц и сравните с рабочей базой.
Ежемесячная проверка бэкапа 1С
Выполнено: 0 / 7

Частые вопросы

Можно ли делать копию серверной базы, пока в ней работают пользователи?
Да, если это бэкап средствами СУБД: BACKUP DATABASE и pg_dump дают согласованную копию на момент начала без остановки работы. Выгрузку .dt лучше делать без пользователей.
Почему восстановленная копия весит меньше рабочей базы?
В бэкап не попадает пустое место внутри файлов данных, а сжатие уменьшает его ещё в несколько раз. Это нормально, данные не потерялись.
Можно ли восстановить бэкап SQL Server на более старую версию SQL?
Нет. Бэкап восстанавливается только на ту же или более новую версию SQL Server. Чтобы перенести базу «вниз», сделайте выгрузку .dt и загрузите её в новую базу.
Как перенести серверную базу с MS SQL на PostgreSQL?
Только через .dt: выгрузите в Конфигураторе, создайте в кластере новую базу на PostgreSQL и загрузите файл. Бэкапы разных СУБД между собой несовместимы.
Нужно ли сохранять что-то кроме самой базы?
Да: список баз и настройки кластера (каталог служебных файлов сервера 1С), файлы лицензий, внешние обработки и скрипты резервного копирования. Без них восстановление сервера с нуля займёт заметно больше времени.