Копия информационной базы 1С силами администратора: файлы, SQL и ibcmd
Содержание
Скопировать базу 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С знает только, куда подключаться.
Затем выгоните пользователей. Копия, снятая «на ходу», может оказаться несогласованной: часть транзакций попадёт в файл, часть нет. Узнать, кто сейчас в базе, можно двумя способами:
- В самой программе:
Все функции → Обработки → Активные пользователи. Пункт «Все функции» включается вГлавное меню → Сервис → Параметры, флажок «Отображать команду «Все функции»». - Для файловой базы в общей папке: на сервере откройте
Управление компьютером → Общие папки → Открытые файлы. Если1Cv8.1CDтам есть, кто-то его держит.
Для серверной базы список сеансов виден в консоли администрирования кластера, в ветке базы Сеансы.
Если вы завершаете чужие сеансы принудительно, пользователи потеряют несохранённые документы. Делайте это после предупреждения и вне рабочего времени.
Ещё один пункт подготовки — место на диске. Под копию нужно не меньше объёма исходной базы, а для .bak и дампа PostgreSQL ещё столько же под сам файл бэкапа, пока вы его не удалите.
Способ 1. Копирование файловой базы 1С через проводник
Самый простой случай. Файловая база — это папка, и её копия — тоже папка.
- Убедитесь, что в базе никто не работает (см. выше).
- Создайте новую папку, например
D:\Bases\Buh_copy. - Скопируйте в неё файл
1Cv8.1CDиз папки исходной базы. Этого достаточно, чтобы база открылась. - По желанию скопируйте и каталог
1Cv8Log— в нём журнал регистрации. Без него копия запустится с пустым журналом. - Проверьте копию утилитой
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_ONLY | MS SQL Server | Нет | Новые имена файлов через MOVE |
pg_dump / pg_restore | PostgreSQL | Нет | Сборка PostgreSQL для 1С |
CREATE DATABASE ... TEMPLATE | PostgreSQL, база небольшая или окно простоя | Да | Ни одного подключения к исходной |
Выгрузка .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 SQL | PostgreSQL | Только через .dt, бэкап СУБД не подойдёт |
| MS SQL / PostgreSQL | Файловая база | Через .dt |
.bak или дамп | Та же СУБД | Восстановление средствами СУБД |
Загрузка .dt полностью заменяет данные в целевой базе. Проверьте дважды, что в командной строке указана новая пустая база, а не рабочая.
Как подключить скопированную базу: кластер, список баз и права
Скопированные файлы или восстановленная база данных ещё не видны пользователям. Их нужно зарегистрировать.
Регистрация серверной копии в кластере
- Откройте консоль администрирования серверов 1С.
- Разверните
Кластеры → <ваш кластер> → Информационные базы, в контекстном меню выберитеСоздать → Информационная база. - Задайте имя, например
buh_test. Это имя вводят пользователи при подключении. - Укажите сервер СУБД, тип СУБД и имя базы данных — то, под которым вы восстановили копию (
buh_test). - Снимите флажок создания базы данных при её отсутствии: база уже есть, и кластер просто к ней подключится.
- Включите флажок
Блокировка регламентных заданий включена. Это главное для тестовой копии.
Если кластер работает под отдельной учётной записью СУБД, у неё должны быть права на новую базу данных. В MS SQL проверьте сопоставление пользователя в свойствах новой базы.
Добавление базы в список пользователей
В окне запуска 1С нажмите Добавить, выберите Добавление в список существующей информационной базы и укажите:
- для файловой копии — путь к папке, где лежит
1Cv8.1CD; - для серверной — имя сервера 1С и имя базы в кластере.
Назовите копию так, чтобы её нельзя было спутать с рабочей: БУХ — КОПИЯ для тестов. Список баз хранится у каждого пользователя свой, поэтому на других компьютерах базу придётся добавить отдельно или раздать готовый файл списка.
Права на папку файловой копии
Пользователям нужны права на чтение и запись в новую папку — платформа пишет туда временные файлы и журнал. Если копию положили в общую папку на сервере, выдайте права группе пользователей 1С на уровне NTFS и на уровне общего ресурса.
Журнал регистрации, регламентные задания и временные данные копии
Копия — полный двойник рабочей базы. Вместе с данными в неё переезжают настройки обменов, почты, загрузки банковских выписок, отправки отчётности. Если ничего не сделать, копия начнёт работать как вторая боевая база.
Что настроить в копии сразу:
- ⏸️ Регламентные задания. Для серверной базы — флажок блокировки в кластере (см. выше). Для файловой регламентные задания выполняются при открытых сеансах, поэтому отключите их в копии через
Все функции → Стандартные → Управление регламентными и фоновыми заданиями. - 🔒 Внешние ресурсы. Типовые конфигурации замечают, что база открыта по другому пути, и при первом входе предлагают заблокировать работу с внешними ресурсами: обмены, почту, интернет-сервисы. Для тестовой копии соглашайтесь на блокировку.
- 🔁 Обмены и синхронизация. Если копия участвует в РИБ или обмене с другой программой, не запускайте синхронизацию из неё. Иначе получатель примет данные копии за данные рабочей базы.
- 📝 Заголовок. Поменяйте заголовок программы в общих настройках, чтобы пользователи сразу видели, что работают не в рабочей базе.
Журнал регистрации в копии чаще всего не нужен. У файловой базы он лежит в папке 1Cv8Log рядом с 1Cv8.1CD — просто не копируйте её или удалите в копии, когда база закрыта. У серверной базы журнал хранится не в СУБД, а в каталоге кластера (srvinfo\reg_1541\<идентификатор базы>\1Cv8Log), поэтому при копировании через SQL он вообще не переносится. Новая база в кластере получит свой пустой журнал.
Кэш клиентов и временные файлы чистить не нужно: у копии другой путь или другой идентификатор, и платформа заведёт для неё собственный кэш.