Копия серверной базы 1С: через .dt, через SQL Server и PostgreSQL

· 10 мин

Содержание

Скопировать базу 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

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

Во время выгрузки пользователи могут продолжать работать, но данные, которые они введут в эти минуты, могут попасть в копию не целиком. Для тестовой базы это обычно не страшно. Если нужен точный срез — заблокируйте начало сеансов (об этом ниже, в разделе про автоматизацию).

Шаг 2. Создайте пустую базу в кластере

  1. Запустите консоль администрирования серверов 1С.
  2. Раскройте кластер, щёлкните правой кнопкой по ветке Информационные базы и выберите Создать → Информационная база.
  3. Заполните поля:
    • Имя — buh_test;
    • Сервер баз данных — имя сервера СУБД (то же, что у рабочей базы);
    • Тип СУБД — MS SQL Server или PostgreSQL;
    • База данных — buh_test;
    • Пользователь сервера БД и Пароль — логин, под которым кластер работает с СУБД;
    • флажок Создать базу данных в случае ее отсутствия — включить;
    • флажок Установить блокировку регламентных заданий — включить.
  4. Нажмите ОК. Кластер создаст пустую базу в СУБД и зарегистрирует её.

Тот же диалог открывается и из окна запуска 1С: Добавить → Создание новой информационной базы → Создание информационной базы без конфигурации, вариант «На сервере 1С:Предприятия». Удобно, если доступа к консоли нет, но права администратора кластера всё равно понадобятся.

Шаг 3. Загрузите .dt в новую базу

  1. Добавьте buh_test в список баз в окне запуска и откройте её в Конфигураторе. Пользователей в пустой базе ещё нет, поэтому пароль не спросят.
  2. Выберите Администрирование → Загрузить информационную базу и укажите файл .dt.
  3. Подтвердите, что текущие данные будут заменены.
  4. После загрузки Конфигуратор перезапустится. Теперь вход только под пользователями из рабочей базы — с их логинами и паролями.

Загрузку .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С о ней не знает. Её нужно зарегистрировать.

  1. В консоли администрирования: Информационные базы → Создать → Информационная база.
  2. Имя — buh_test, в поле База данных укажите ровно имя восстановленной базы.
  3. Флажок Создать базу данных в случае ее отсутствия — снимите. Базу не нужно создавать, она уже есть.
  4. Флажок Установить блокировку регламентных заданий — включите.
  5. Нажмите ОК и добавьте базу в окно запуска у тех, кто будет с ней работать: Добавить → Добавление в список существующей информационной базы, указав сервер кластера и имя 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 идут при работающих пользователях. Копия будет немного «размыта» по времени, для теста этого достаточно.
Почему в копии не работает лицензия?
Если копия на том же сервере, она использует те же лицензии кластера. Если на другом сервере — нужна своя лицензия на этом сервере 1С и клиентские лицензии для пользователей копии.
Сколько места занимает копия?
Столько же, сколько рабочая база в СУБД, плюс временный файл .dt или .bak. На базе 50 ГБ закладывайте около 100 ГБ свободного места на время операции.
Можно ли сделать копию в файловую базу?
Да, через .dt: создайте пустую файловую базу и загрузите в неё файл. Для баз больше нескольких гигабайт файловый вариант будет работать заметно медленнее серверного.
Как удалить ненужную копию?
В консоли выберите базу и удалите её с вариантом «Удалить базу данных». Сначала убедитесь, что выбрана именно копия, а не рабочая база.

Источники

  • Федеральный закон от 27.07.2006 № 152-ФЗ «О персональных данных»