Копия серверной базы 1С: через .dt, через SQL Server и PostgreSQL
Содержание
Скопировать базу 1С на сервере можно двумя путями. Первый — выгрузить рабочую базу в файл .dt через Конфигуратор и загрузить его в новую пустую базу, созданную в кластере. Второй — сделать резервную копию на уровне СУБД (SQL Server или PostgreSQL), восстановить её под новым именем и зарегистрировать эту новую базу данных в кластере 1С.
Для баз до 20–30 ГБ обычно хватает .dt: это проще и не требует прав на сервере СУБД. Для больших баз быстрее средства СУБД — бэкап и восстановление занимают минуты там, где загрузка .dt идёт часами. В обоих случаях копию нужно сразу отвязать от внешнего мира: заблокировать регламентные задания и обмены, иначе тестовая база начнёт отправлять почту, выгружать данные в ЭДО и обмениваться с другими узлами.
Ниже речь о клиент-серверном варианте 1С:Предприятия 8.3 с кластером серверов 1С. Порядок общий для любой конфигурации: Бухгалтерии, ЗУП, УТ, ERP.
Что подготовить перед копированием серверной базы
Сначала решите, зачем нужна копия. От этого зависят способ и настройки.
| Задача | Что важно |
|---|---|
| 🧪 Тестовая база для проверки обновления | Свежие данные, блокировка регламентных заданий |
| 🎓 Учебная база для сотрудников | Обезличить персональные данные |
| 🚚 Перенос на другой сервер | Совпадение версий платформы, проверка прав |
| 🔍 Разбор ошибки или расследование | Копия «на момент», без изменений в рабочей базе |
Что проверить до старта:
- 🔑 Права. Нужен администратор информационной базы (пользователь 1С с полными правами), администратор кластера (если на кластере задан пароль), а для способа через СУБД — логин на SQL Server или PostgreSQL с правами на резервное копирование и создание баз.
- 💾 Место на диске. Файл
.dtобычно в 5–10 раз меньше самой базы — он сжат. Бэкап SQL Server без сжатия близок к объёму данных. Плюс место под саму копию: столько же, сколько занимает рабочая база. - 🖥 Версия платформы. Загрузить
.dtможно в базу на платформе с номером не ниже той, на которой файл выгружен. Для копии на том же кластере вопрос не стоит. - 🏷 Имя копии. Сразу придумайте имя, по которому копию не спутать с рабочей:
buh_test,zup_copy_0710. Одно и то же имя будет у базы в кластере и у базы данных в СУБД — так проще поддерживать порядок.
Копирование не меняет рабочую базу, но выгрузка .dt и бэкап большой базы нагружают сервер. Запускайте их вечером или в обед, когда пользователей мало.
Способ 1: копия через кластер и выгрузку .dt
Этот способ работает без доступа к серверу СУБД. Всё делается из консоли администрирования серверов и Конфигуратора.
Шаг 1. Выгрузите рабочую базу в .dt
- Откройте рабочую базу в режиме Конфигуратора.
- Выберите
Администрирование → Выгрузить информационную базу. - Укажите путь и имя файла, например
D:\Backup\buh_0710.dt. - Дождитесь сообщения о завершении выгрузки.
Во время выгрузки пользователи могут продолжать работать, но данные, которые они введут в эти минуты, могут попасть в копию не целиком. Для тестовой базы это обычно не страшно. Если нужен точный срез — заблокируйте начало сеансов (об этом ниже, в разделе про автоматизацию).
Шаг 2. Создайте пустую базу в кластере
- Запустите консоль администрирования серверов 1С.
- Раскройте кластер, щёлкните правой кнопкой по ветке
Информационные базыи выберитеСоздать → Информационная база. - Заполните поля:
- Имя —
buh_test; - Сервер баз данных — имя сервера СУБД (то же, что у рабочей базы);
- Тип СУБД — MS SQL Server или PostgreSQL;
- База данных —
buh_test; - Пользователь сервера БД и Пароль — логин, под которым кластер работает с СУБД;
- флажок Создать базу данных в случае ее отсутствия — включить;
- флажок Установить блокировку регламентных заданий — включить.
- Имя —
- Нажмите ОК. Кластер создаст пустую базу в СУБД и зарегистрирует её.
Тот же диалог открывается и из окна запуска 1С: Добавить → Создание новой информационной базы → Создание информационной базы без конфигурации, вариант «На сервере 1С:Предприятия». Удобно, если доступа к консоли нет, но права администратора кластера всё равно понадобятся.
Шаг 3. Загрузите .dt в новую базу
- Добавьте
buh_testв список баз в окне запуска и откройте её в Конфигураторе. Пользователей в пустой базе ещё нет, поэтому пароль не спросят. - Выберите
Администрирование → Загрузить информационную базуи укажите файл.dt. - Подтвердите, что текущие данные будут заменены.
- После загрузки Конфигуратор перезапустится. Теперь вход только под пользователями из рабочей базы — с их логинами и паролями.
Загрузку .dt выполняйте только в новую базу. Перепутаете окно — сотрёте рабочую. Проверяйте имя базы в заголовке Конфигуратора перед тем, как нажать ОК.
Способ 2: копирование средствами СУБД
Для баз от нескольких десятков гигабайт этот вариант заметно быстрее. Он требует доступа к серверу СУБД.
SQL Server: бэкап с COPY_ONLY и восстановление под новым именем
Откройте SQL Server Management Studio и выполните бэкап рабочей базы. Параметр COPY_ONLY важен: такая копия не ломает цепочку разностных бэкапов, которую ведёт регламентный план обслуживания.
BACKUP DATABASE [buh]
TO DISK = N'D:\Backup\buh_copy.bak'
WITH COPY_ONLY, COMPRESSION, STATS = 10;
Перед восстановлением узнайте логические имена файлов. У баз, созданных кластером 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;
ALTER DATABASE [buh_test] SET RECOVERY SIMPLE;
Последняя строка переводит копию в простую модель восстановления. Для тестовой базы полная модель не нужна, а журнал без регулярных бэкапов быстро разрастается.
Без MOVE SQL Server попытается записать файлы поверх файлов рабочей базы и выдаст ошибку, что они заняты. Не пытайтесь «обойти» её через REPLACE — этот параметр предназначен для перезаписи существующей базы.
COMPRESSION поддерживают редакции Standard и Enterprise. На Express уберите этот параметр из запроса.
PostgreSQL: pg_dump и pg_restore
В PostgreSQL копию делают дампом. Формат -Fc сжимается и позволяет восстанавливать в несколько потоков.
pg_dump -U postgres -Fc -f D:\Backup\buh.dump buh
createdb -U postgres -T template0 buh_test
pg_restore -U postgres -j 4 -d buh_test D:\Backup\buh.dump
Ключ -j 4 запускает восстановление в четыре потока. Ставьте число не больше количества ядер сервера.
Есть быстрый вариант createdb -T buh buh_test: он копирует базу как шаблон. Но к исходной базе в этот момент не должно быть ни одного подключения, а значит, рабочий процесс 1С придётся отключить от неё. Для рабочей базы днём это неприемлемо.
Что выбрать
| Способ | Когда подходит | Ограничения |
|---|---|---|
.dt через Конфигуратор | Базы до 20–30 ГБ, нет доступа к СУБД, перенос между разными СУБД | Медленно на больших базах, на время загрузки копия недоступна |
| Бэкап SQL Server | Большие базы на MS SQL | Нужны права в SQL Server, только MS SQL → MS SQL |
pg_dump/pg_restore | Большие базы на PostgreSQL | Только PostgreSQL → PostgreSQL, нужна та же сборка PostgreSQL для 1С или новее |
Переносить базу между MS SQL и PostgreSQL средствами СУБД нельзя: структура таблиц у 1С одна, но типы данных разные. Для такого переезда есть только .dt.
Регистрация копии в кластере и права на базу данных
После восстановления средствами СУБД база существует только на сервере данных. Кластер 1С о ней не знает. Её нужно зарегистрировать.
- В консоли администрирования:
Информационные базы → Создать → Информационная база. - Имя —
buh_test, в поле База данных укажите ровно имя восстановленной базы. - Флажок Создать базу данных в случае ее отсутствия — снимите. Базу не нужно создавать, она уже есть.
- Флажок Установить блокировку регламентных заданий — включите.
- Нажмите ОК и добавьте базу в окно запуска у тех, кто будет с ней работать:
Добавить → Добавление в список существующей информационной базы, указав сервер кластера и имяbuh_test.
Права пользователя СУБД
Кластер подключается к СУБД под логином, который указан в свойствах базы. Если копия восстановлена на тот же сервер — логин уже есть, доступ обычно работает сразу.
На другом SQL Server бывает иначе. Пользователь внутри базы восстановится, а логина на сервере с таким же SID нет. Отсюда ошибка подключения при первом запуске. Решение — связать пользователя базы с логином:
USE [buh_test];
ALTER USER [user1c] WITH LOGIN = [user1c];
Проще всего сразу дать логину кластера роль db_owner в новой базе. Кластер всё равно работает с базой как владелец.
Пользователи 1С и доступ
Пользователи 1С хранятся внутри данных базы, поэтому копия получает тот же список и те же пароли. Если в рабочей базе включена аутентификация операционной системы, сотрудники зайдут в копию под своей учётной записью Windows — без паролей. Для учебной базы это удобно, для копии с зарплатой или кадрами — нет. Ограничьте список: в Конфигураторе Администрирование → Пользователи или в пользовательском режиме через раздел Администрирование → Настройки пользователей и прав.
Отвязка копии от рабочей среды
Копия — точный двойник рабочей базы. Она знает адреса почты, параметры обменов, сертификаты ЭДО, настройки отправки отчётности. Без отвязки она начнёт работать как вторая рабочая база.
Блокировка регламентных заданий
Флажок в свойствах базы в кластере, который мы включили, останавливает все регламентные задания: загрузку курсов валют, обмены, получение почты, обработку очередей ЭДО. Это первая и главная защита. Снимать его в тестовой базе стоит только если вы точно знаете, какие задания будут работать.
Окно «база перемещена или скопирована»
Типовые конфигурации на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11 и другие) сами замечают, что база запущена по новому адресу. При первом входе появится вопрос с двумя вариантами:
- Это копия информационной базы — выберите для тестовой копии. Программа заблокирует работу с внешними ресурсами: обмены, отправку почты, синхронизацию.
- Информационная база перемещена — только если это переезд и старая база больше не используется.
Не нажимайте «Информационная база перемещена» в тестовой копии. Иначе в ней снова включатся обмены, и данные могут уйти в другие базы от имени рабочей.
Обмены и распределённая база
Если рабочая база — узел РИБ или участвует в обменах (с Розницей, с ЗУП, с сайтом), в копии сохранится код текущего узла и номера сообщений. Копия выглядит для других баз так же, как оригинал. Любой запущенный обмен из копии собьёт нумерацию сообщений, и рабочему узлу придётся заново синхронизироваться.
В тестовой копии отключите синхронизацию данных в разделе Администрирование → Синхронизация данных и не запускайте её вручную.
Персональные данные
Копия с ЗУП или кадровыми сведениями содержит паспорта, СНИЛС, оклады. Её обработка подпадает под закон о персональных данных так же, как обработка рабочей базы. Для учебных баз данные сотрудников стоит обезличить: заменить ФИО, документы, контакты обработкой собственной разработки или готовым решением. Тестовой копии хватит ограниченного доступа и удаления после проверки.
Как автоматизировать регулярное копирование
Если тестовую базу обновляют регулярно (например, каждый понедельник перед проверкой обновлений), процесс стоит превратить в скрипт.
Пакетный режим Конфигуратора
1cv8.exe умеет выгружать и загружать базу без открытия окна. Пример .bat:
set V8="C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe"
set SRC=srv1c\buh
set DST=srv1c\buh_test
set DT=D:\Backup\buh_weekly.dt
%V8% DESIGNER /S"%SRC%" /N"Админ" /P"пароль" /DumpIB "%DT%" /Out "D:\Backup\dump.log"
%V8% DESIGNER /S"%DST%" /N"Админ" /P"пароль" /RestoreIB "%DT%" /Out "D:\Backup\restore.log"
Номер платформы в пути замените на свой. Пароль в открытом виде в .bat — компромисс: храните файл в папке с доступом только для администраторов. После загрузки .dt пользователи и пароли в копии те же, что в рабочей базе.
Задание в SQL Server Agent или cron
Для способа через СУБД заведите задание в SQL Server Agent из двух шагов: бэкап с COPY_ONLY и восстановление с REPLACE поверх старой копии buh_test. Здесь REPLACE уместен — вы перезаписываете именно копию.
Перед восстановлением поверх buh_test в копии не должно быть сеансов. Если тестировщики работают, их сеансы оборвутся с потерей несохранённых данных. Предупредите их или запускайте задание ночью.
Для PostgreSQL на Linux то же делают скриптом через cron: dropdb, createdb, pg_restore.
Блокировка сеансов на время копирования
Чтобы получить согласованный срез без пользователей, в свойствах рабочей базы в консоли включите Блокировка начала сеансов включена, задайте время начала, сообщение и Код разрешения. Скрипт подключается с этим кодом через параметр /UC:
%V8% DESIGNER /S"%SRC%" /N"Админ" /P"пароль" /UC"копия" /DumpIB "%DT%"
Блокировка не выкидывает уже открытые сеансы — их завершают вручную в консоли или ждут, пока пользователи выйдут сами. После копирования снимите флажок, иначе утром никто не войдёт.
Частые вопросы
Можно ли скопировать базу без остановки работы пользователей?
.dt и бэкап SQL Server с COPY_ONLY идут при работающих пользователях. Копия будет немного «размыта» по времени, для теста этого достаточно.Почему в копии не работает лицензия?
Сколько места занимает копия?
.dt или .bak. На базе 50 ГБ закладывайте около 100 ГБ свободного места на время операции.Можно ли сделать копию в файловую базу?
.dt: создайте пустую файловую базу и загрузите в неё файл. Для баз больше нескольких гигабайт файловый вариант будет работать заметно медленнее серверного.Как удалить ненужную копию?
Источники
- Федеральный закон от 27.07.2006 № 152-ФЗ «О персональных данных»