Как скопировать базу 1С на уровне СУБД и подключить копию к серверу 1С

· 10 мин

Содержание

Копию клиент-серверной базы 1С быстрее всего сделать средствами самой СУБД: в MS SQL Server — BACKUP DATABASE ... WITH COPY_ONLY и RESTORE DATABASE под новым именем с MOVE, в PostgreSQL — pg_dump -Fc и pg_restore в новую пустую базу. Затем новую базу регистрируют в кластере серверов 1С с флажком блокировки регламентных заданий. Пользователей выгонять не нужно: обе СУБД снимают согласованную копию на ходу.

Типичная ситуация: бухгалтерия просит тестовую базу «как вчера», чтобы проверить обновление или перепровести квартал. Выгрузка в .dt на базе в 150 ГБ идёт час-два и требует монопольного доступа. Копия через консоль SQL или утилиты PostgreSQL на том же сервере занимает минуты и никого не останавливает.

Чем копия через SQL лучше выгрузки .dt

Выгрузка в .dt — универсальный способ, но не самый удобный для больших баз. Копирование на уровне СУБД переносит файлы данных как есть, без перепаковки в формат 1С.

СпособМонопольный доступСкорость на крупной базеКогда выбирать
Выгрузка/загрузка .dt в КонфигуратореНуженМедленноПеренос между разными СУБД, файловая база
Бэкап и восстановление MS SQLНе нуженБыстроБаза на MS SQL, копия на тот же или другой SQL Server
pg_dump / pg_restoreНе нуженСредне, зависит от числа потоковБаза на PostgreSQL
CREATE DATABASE ... TEMPLATEНужно отключить всех от исходной базыОчень быстроPostgreSQL, копия на том же сервере, ночью

Когда SQL-копия не подходит:

  • 🔁 нужно сменить СУБД, например перейти с MS SQL на PostgreSQL — тут только .dt;
  • 📁 база файловая — копируют каталог с 1Cv8.1CD при закрытых сеансах;
  • 🧩 версия целевого SQL Server ниже исходной — бэкап новой версии на старую не восстанавливается.

Копия через СУБД сохраняет всё: пользователей 1С, настройки обменов, регламентные задания, сохранённые пароли к сервисам. Именно поэтому после восстановления копию нужно «обезвредить» до первого запуска — об этом ниже.

Права и подготовка перед копированием базы 1С

Перед копированием проверьте три вещи: права учётной записи, место на диске и имя будущей базы.

Права в MS SQL Server

Логину, под которым вы работаете в SSMS, нужна роль sysadmin либо связка:

  1. роль сервера dbcreator — чтобы создать базу при восстановлении;
  2. роль db_backupoperator в исходной базе — чтобы снять бэкап.

Логин, под которым кластер 1С ходит в SQL (его указывают в свойствах информационной базы), должен стать владельцем новой базы или получить в ней роль db_owner. Иначе 1С при подключении сообщит, что не может открыть базу данных.

Права в PostgreSQL

Для pg_dump достаточно права чтения всех таблиц исходной базы — на практике дамп делают под пользователем postgres или под тем, под которым 1С создавала базу. Для CREATE DATABASE нужна роль с атрибутом CREATEDB.

Место и блокировки

  • 💾 Свободное место: бэкап MS SQL примерно равен объёму данных без пустого места, сжатый — в 3–6 раз меньше. Восстановленная база займёт столько же, сколько исходная, включая файл журнала.
  • 🔒 Блокировки: BACKUP и pg_dump не блокируют работу пользователей 1С. Нагрузка на диск при этом заметная, поэтому большие базы лучше копировать вне пиковых часов.
  • 🏷 Имя: придумайте имя без пробелов и кириллицы, например buh_copy_0915. Одно и то же имя удобно использовать и в СУБД, и в кластере 1С.

Создание резервной копии базы 1С в SQL Server

Через SQL-запрос

Откройте SSMS, нажмите New Query и выполните:

BACKUP DATABASE [buh]
TO DISK = N'D:\Backup\buh_copy.bak'
WITH COPY_ONLY, COMPRESSION, CHECKSUM, STATS = 10;

Что делают параметры:

  • COPY_ONLY — внеочередной бэкап. Он не сбрасывает базу для разностных копий и не ломает цепочку регламентного резервного копирования. Без этого флага ночной разностный бэкап начнёт опираться на ваш файл, и если вы его удалите, восстановить рабочую базу из разностных копий не получится.
  • COMPRESSION — сжатие. Доступно в редакциях Standard и Enterprise, в Express его нет — уберите параметр.
  • CHECKSUM — проверка контрольных сумм страниц во время записи.
  • STATS = 10 — прогресс каждые 10%.

Через интерфейс SSMS

  1. В обозревателе объектов щёлкните правой кнопкой по базе → Tasks → Back Up....
  2. Тип — Full, отметьте флажок Copy-only backup.
  3. В блоке Destination удалите старый путь и добавьте новый файл .bak.
  4. На странице параметров выберите сжатие и проверку контрольных сумм, нажмите OK.

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

Восстановление копии под новым именем

Главная ловушка — физические файлы. Если восстановить бэкап под новым именем без перемещения файлов, SQL Server попытается записать их поверх файлов рабочей базы и откажет с ошибкой, что файл занят.

Шаг 1. Узнайте логические имена файлов

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

В результате будут две строки: файл данных (тип D) и журнал (тип L). Запомните значения из колонки LogicalName, например buh и buh_log.

Шаг 2. Восстановите базу с новыми путями

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

Ни в коем случае не добавляйте REPLACE, если не уверены в имени базы: этот параметр разрешает перезаписать существующую базу.

Шаг 3. Переведите копию в простую модель восстановления

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

ALTER DATABASE [buh_copy_0915] SET RECOVERY SIMPLE;
USE [buh_copy_0915];
DBCC SHRINKFILE (N'buh_log', 1024);

Шаг 4. Назначьте владельца

ALTER AUTHORIZATION ON DATABASE::[buh_copy_0915] TO [sql_1c_user];

Вместо sql_1c_user — логин, который кластер 1С использует для подключения к SQL.

В SSMS то же самое делается мастером Restore Database: на странице Files отметьте Relocate all files to folder, а в поле Database впишите новое имя. Мастер сам переименует файлы, но имена всё равно проверьте глазами.

Как сделать копию базы 1С на PostgreSQL

1С работает со своей сборкой PostgreSQL (или с Postgres Pro), в которой есть типы mchar и mvarchar. Поэтому восстанавливать дамп нужно на сервере с такой же сборкой — на «чистом» PostgreSQL восстановление упадёт с ошибками про неизвестный тип.

Способ 1. pg_dump и pg_restore

Команды запускают от имени пользователя с доступом к СУБД, в Linux — обычно postgres.

# 1. Дамп в сжатом формате custom
pg_dump -U postgres -h localhost -Fc -f /backup/buh.dump buh

# 2. Пустая база с правильной кодировкой
createdb -U postgres -h localhost -T template0 -E UTF8 buh_copy_0915

# 3. Восстановление в 4 потока
pg_restore -U postgres -h localhost -j 4 -d buh_copy_0915 /backup/buh.dump

# 4. Статистика для планировщика
vacuumdb -U postgres -h localhost --analyze buh_copy_0915

Ключевые моменты:

  • -Fc даёт сжатый дамп, который можно восстанавливать в несколько потоков ключом -j. Число потоков берите по числу ядер, но не больше 8.
  • -T template0 создаёт базу без случайных объектов из template1.
  • Последний шаг пропускать нельзя. Статистика в дамп не попадает, и без ANALYZE первые часы копия будет заметно тормозить на тяжёлых отчётах.

В Windows те же утилиты лежат в папке bin каталога установки PostgreSQL. Пароль удобно передать через переменную PGPASSWORD или файл pgpass.conf, чтобы не вводить его на каждом шаге.

Способ 2. Копия шаблоном в пределах сервера

CREATE DATABASE buh_copy_0915 TEMPLATE buh OWNER usr1c;

Это самый быстрый вариант: файлы копируются целиком. Но к исходной базе в этот момент не должно быть ни одного подключения, иначе PostgreSQL ответит, что база используется другими пользователями.

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

Регистрация копии в кластере серверов 1С

Сама по себе база в СУБД для 1С не существует. Её нужно добавить в кластер.

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

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

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

Первый запуск копии

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

Проверка целостности и очистка копии

Проверка на стороне СУБД

Для MS SQL:

DBCC CHECKDB (N'buh_copy_0915') WITH NO_INFOMSGS;
EXEC [buh_copy_0915].sys.sp_updatestats;

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

Для PostgreSQL отдельной команды проверки нет. Признак нормального восстановления — pg_restore завершился без ошибок, а vacuumdb --analyze отработал до конца.

Проверка на стороне 1С

  1. Запустите копию в режиме 1С:Предприятие под администратором.
  2. Сравните ключевые цифры с рабочей базой: оборотно-сальдовую ведомость за прошлый месяц или остатки по складу.
  3. При сомнениях запустите в Конфигураторе Администрирование → Тестирование и исправление только с флажком проверки логической целостности, без исправления. Для этого нужен монопольный доступ к копии, рабочую базу он не затрагивает.

Что «почистить» в копии

  • 🔕 В разделе Администрирование типовой конфигурации отключите синхронизацию данных и обмены.
  • 📧 Удалите или смените пароли учётных записей электронной почты, если копию отдают подрядчику.
  • 👥 Отключите вход пользователей, которым копия не нужна.
  • 🗑 Удалите файл .bak или .dump, когда копия проверена: он занимает место и содержит все данные компании.
Диагностика: выберите симптом

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

Можно ли копировать базу 1С через SQL, когда в ней работают пользователи?
Да. BACKUP в MS SQL и pg_dump в PostgreSQL снимают согласованный снимок на момент старта. Документы, проведённые после старта, в копию не попадут.
Нужна ли отдельная лицензия 1С на копию базы?
Нет. Лицензии считаются по сеансам и рабочим местам, а не по числу баз. Но пользователи, работающие в копии, занимают лицензии так же, как в рабочей базе.
Как часто можно обновлять тестовую копию?
Сколько угодно. Удобнее всего восстанавливать новый бэкап поверх той же копии с параметром REPLACE: регистрация в кластере при этом сохраняется. Флажок блокировки регламентных заданий тоже остаётся на месте.
Можно ли перенести бэкап MS SQL на PostgreSQL?
Нет, форматы несовместимы. Между разными СУБД базу 1С переносят только выгрузкой в .dt и загрузкой в новую базу.
Почему копия весит меньше рабочей базы?
Восстановленная база получает размер файлов исходной. Меньше обычно выходит журнал: после перевода в модель SIMPLE и сжатия он теряет накопленное. Сами данные совпадают.