Копия информационной базы 1С силами администратора: файлы, SQL и ibcmd

· 10 мин

Содержание

Скопировать базу 1С без Конфигуратора можно тремя путями. Файловую базу копируют как обычную папку: закрывают все сеансы и переносят файл 1Cv8.1CD. Клиент-серверную копируют средствами СУБД: бэкапом MS SQL или дампом PostgreSQL, а затем регистрируют новую базу в кластере 1С. Если нужен универсальный файл .dt, его выгружает консольная утилита ibcmd, которая входит в платформу 8.3 и работает без окна Конфигуратора.

Всё это справедливо для любой конфигурации на платформе 8.3: Бухгалтерии, ЗУП, УТ, ERP. Копия получает те же данные, ту же конфигурацию и тех же пользователей с теми же паролями. Отличается только способ, и он зависит от типа базы.

Что проверить до копирования базы

Первым делом определите, с какой базой вы работаете. Откройте окно запуска 1С, выделите базу и посмотрите строку под списком.

  • 📁 File="D:\Bases\Buh" — файловая база. Вся она лежит в одном файле 1Cv8.1CD внутри этой папки.
  • 🖥️ Srvr="srv1c";Ref="buh" — клиент-серверная. Данные хранятся в СУБД (MS SQL Server, PostgreSQL), а кластер 1С знает только, куда подключаться.

Затем выгоните пользователей. Копия, снятая «на ходу», может оказаться несогласованной: часть транзакций попадёт в файл, часть нет. Узнать, кто сейчас в базе, можно двумя способами:

  1. В самой программе: Все функции → Обработки → Активные пользователи. Пункт «Все функции» включается в Главное меню → Сервис → Параметры, флажок «Отображать команду «Все функции»».
  2. Для файловой базы в общей папке: на сервере откройте Управление компьютером → Общие папки → Открытые файлы. Если 1Cv8.1CD там есть, кто-то его держит.

Для серверной базы список сеансов виден в консоли администрирования кластера, в ветке базы Сеансы.

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

Ещё один пункт подготовки — место на диске. Под копию нужно не меньше объёма исходной базы, а для .bak и дампа PostgreSQL ещё столько же под сам файл бэкапа, пока вы его не удалите.

Способ 1. Копирование файловой базы 1С через проводник

Самый простой случай. Файловая база — это папка, и её копия — тоже папка.

  1. Убедитесь, что в базе никто не работает (см. выше).
  2. Создайте новую папку, например D:\Bases\Buh_copy.
  3. Скопируйте в неё файл 1Cv8.1CD из папки исходной базы. Этого достаточно, чтобы база открылась.
  4. По желанию скопируйте и каталог 1Cv8Log — в нём журнал регистрации. Без него копия запустится с пустым журналом.
  5. Проверьте копию утилитой chdbfl.exe. Она лежит в каталоге bin установленной платформы, например C:\Program Files\1cv8\8.3.24.1691\bin\chdbfl.exe. Укажите путь к новому 1Cv8.1CD и запустите проверку без галочки исправления.

Остальные файлы папки (1Cv8tmp, файлы .cfl) переносить не нужно — это временные данные, платформа создаст их заново.

Если базу нужно копировать регулярно, удобнее скрипт. Пример для Windows:

@echo off
set SRC=D:\Bases\Buh
set DST=E:\Copies\Buh_%date:~6,4%-%date:~3,2%-%date:~0,2%
robocopy "%SRC%" "%DST%" 1Cv8.1CD /R:2 /W:5
robocopy "%SRC%\1Cv8Log" "%DST%\1Cv8Log" /E /R:2 /W:5

Шаблон даты в имени папки рассчитан на русский формат ДД.ММ.ГГГГ. На сервере с другим региональным форматом поменяйте позиции символов.

Файл 1Cv8.1CD хорошо сжимается: архив 7-Zip или ZIP обычно в несколько раз меньше исходника. Для переноса по сети или на флешку упакуйте его.

Способ 2. Скопировать клиент-серверную базу через SQL

Для серверной базы копируют не файлы, а базу данных в СУБД. Потом эту новую базу данных подключают к кластеру 1С как отдельную информационную базу.

MS SQL Server: бэкап и восстановление под новым именем

Откройте SQL Server Management Studio и выполните бэкап. Флаг COPY_ONLY важен: он не ломает цепочку регулярных резервных копий, которую ведёт план обслуживания.

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

Параметр COMPRESSION не поддерживается в редакции Express — там уберите его.

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

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',
     STATS = 10;

Имена buh и buh_log замените на те, что вернул FILELISTONLY. Для тестовой копии можно сразу перевести модель восстановления в простую, чтобы журнал транзакций не разрастался:

ALTER DATABASE [buh_test] SET RECOVERY SIMPLE;

Бэкап MS SQL снимается при работающих пользователях и остаётся согласованным — это механизм самой СУБД. Выгонять людей ради него не обязательно.

PostgreSQL: дамп или копия по шаблону

Для PostgreSQL есть два варианта. Первый — дамп и восстановление, работает при любых сеансах в исходной базе:

pg_dump -U postgres -h localhost -Fc -f /backup/buh.dump buh
createdb -U postgres -h localhost -T template0 buh_test
pg_restore -U postgres -h localhost -j 4 -d buh_test /backup/buh.dump

Ключ -Fc даёт сжатый дамп собственного формата, а -j 4 ускоряет восстановление в 4 потока.

Второй вариант быстрее: создать базу копированием на стороне сервера.

CREATE DATABASE buh_test TEMPLATE buh;

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

Восстанавливайте дамп только на PostgreSQL той сборки, которую поддерживает 1С (с расширениями для типов mchar и mvarchar). На «чистом» PostgreSQL восстановление упадёт на этих типах.

Сравнение способов

СпособКогда подходитНужно выгонять пользователейЧто учесть
Копия 1Cv8.1CDФайловая базаДаПроверить копию chdbfl.exe
BACKUP ... COPY_ONLYMS SQL ServerНетНовые имена файлов через MOVE
pg_dump / pg_restorePostgreSQLНетСборка PostgreSQL для 1С
CREATE DATABASE ... TEMPLATEPostgreSQL, база небольшая или окно простояДаНи одного подключения к исходной
Выгрузка .dt через ibcmdЛюбая база, перенос между СУБДДаМедленнее на больших базах

Способ 3. Выгрузка в .dt утилитой ibcmd и смена формата базы

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

Утилита ibcmd.exe лежит в том же каталоге bin платформы. Выгрузка файловой базы:

"C:\Program Files\1cv8\8.3.24.1691\bin\ibcmd.exe" infobase dump --db-path=D:\Bases\Buh D:\Backup\buh.dt

Для серверной базы ibcmd подключается прямо к СУБД, минуя кластер:

ibcmd infobase dump --dbms=MSSQLServer --db-server=sql01 --db-name=buh --db-user=sa --db-pwd=*** D:\Backup\buh.dt

Для PostgreSQL в --dbms указывают PostgreSQL. Загрузка .dt в новую базу выполняется командой ibcmd infobase restore; точный набор параметров для вашей версии платформы покажет ibcmd help infobase restore.

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

"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"

Для файловой базы вместо /S укажите /F "D:\Bases\Buh". Обратная операция — ключ /RestoreIB. Пользователь в /N должен иметь права администратора в базе.

Какой формат во что переводится:

Исходный форматНуженЧем
1Cv8.1CDСерверная базаВыгрузить .dt, загрузить в новую серверную базу
MS SQLPostgreSQLТолько через .dt, бэкап СУБД не подойдёт
MS SQL / PostgreSQLФайловая базаЧерез .dt
.bak или дампТа же СУБДВосстановление средствами СУБД

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

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

Скопированные файлы или восстановленная база данных ещё не видны пользователям. Их нужно зарегистрировать.

Регистрация серверной копии в кластере

  1. Откройте консоль администрирования серверов 1С.
  2. Разверните Кластеры → <ваш кластер> → Информационные базы, в контекстном меню выберите Создать → Информационная база.
  3. Задайте имя, например buh_test. Это имя вводят пользователи при подключении.
  4. Укажите сервер СУБД, тип СУБД и имя базы данных — то, под которым вы восстановили копию (buh_test).
  5. Снимите флажок создания базы данных при её отсутствии: база уже есть, и кластер просто к ней подключится.
  6. Включите флажок Блокировка регламентных заданий включена. Это главное для тестовой копии.

Если кластер работает под отдельной учётной записью СУБД, у неё должны быть права на новую базу данных. В MS SQL проверьте сопоставление пользователя в свойствах новой базы.

Добавление базы в список пользователей

В окне запуска 1С нажмите Добавить, выберите Добавление в список существующей информационной базы и укажите:

  • для файловой копии — путь к папке, где лежит 1Cv8.1CD;
  • для серверной — имя сервера 1С и имя базы в кластере.

Назовите копию так, чтобы её нельзя было спутать с рабочей: БУХ — КОПИЯ для тестов. Список баз хранится у каждого пользователя свой, поэтому на других компьютерах базу придётся добавить отдельно или раздать готовый файл списка.

Права на папку файловой копии

Пользователям нужны права на чтение и запись в новую папку — платформа пишет туда временные файлы и журнал. Если копию положили в общую папку на сервере, выдайте права группе пользователей 1С на уровне NTFS и на уровне общего ресурса.

Журнал регистрации, регламентные задания и временные данные копии

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

Что настроить в копии сразу:

  • ⏸️ Регламентные задания. Для серверной базы — флажок блокировки в кластере (см. выше). Для файловой регламентные задания выполняются при открытых сеансах, поэтому отключите их в копии через Все функции → Стандартные → Управление регламентными и фоновыми заданиями.
  • 🔒 Внешние ресурсы. Типовые конфигурации замечают, что база открыта по другому пути, и при первом входе предлагают заблокировать работу с внешними ресурсами: обмены, почту, интернет-сервисы. Для тестовой копии соглашайтесь на блокировку.
  • 🔁 Обмены и синхронизация. Если копия участвует в РИБ или обмене с другой программой, не запускайте синхронизацию из неё. Иначе получатель примет данные копии за данные рабочей базы.
  • 📝 Заголовок. Поменяйте заголовок программы в общих настройках, чтобы пользователи сразу видели, что работают не в рабочей базе.

Журнал регистрации в копии чаще всего не нужен. У файловой базы он лежит в папке 1Cv8Log рядом с 1Cv8.1CD — просто не копируйте её или удалите в копии, когда база закрыта. У серверной базы журнал хранится не в СУБД, а в каталоге кластера (srvinfo\reg_1541\<идентификатор базы>\1Cv8Log), поэтому при копировании через SQL он вообще не переносится. Новая база в кластере получит свой пустой журнал.

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

Копия запущена — проверьте до выдачи пользователям
Выполнено: 0 / 5

Ошибки при копировании базы 1С и что с ними делать

Диагностика: выберите симптом

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

Нужна ли отдельная лицензия на копию базы?
Нет. Лицензии 1С расходуются на рабочие места и сеансы, а не на базы. Копия на том же компьютере или сервере лицензий не добавляет.
Можно ли скопировать файловую базу, пока в ней работают?
Технически файл иногда копируется, но результат может быть несогласованным. Для надёжной копии закройте все сеансы.
Сохранятся ли в копии пользователи и пароли?
Да. Список пользователей хранится в самой базе, поэтому в копию входят под теми же логинами и паролями.
Можно ли скопировать серверную базу без прав администратора СУБД?
Нет, бэкап и восстановление требуют прав в СУБД. Без них остаётся выгрузка .dt через пакетный режим с правами администратора в самой базе 1С.
Чем копия через .dt хуже бэкапа СУБД?
На больших базах .dt выгружается и загружается заметно дольше и требует закрыть все сеансы. Зато он переносит базу между любыми СУБД и в файловый вариант.