Как скопировать базу 1С на уровне СУБД и подключить копию к серверу 1С
Содержание
Копию клиент-серверной базы 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 либо связка:
- роль сервера
dbcreator— чтобы создать базу при восстановлении; - роль
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
- В обозревателе объектов щёлкните правой кнопкой по базе →
Tasks→Back Up.... - Тип —
Full, отметьте флажокCopy-only backup. - В блоке
Destinationудалите старый путь и добавьте новый файл.bak. - На странице параметров выберите сжатие и проверку контрольных сумм, нажмите
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С Предприятия(консоль кластера). - Разверните
Кластеры→ ваш кластер →Информационные базы. - Правой кнопкой →
Создать→Информационная база. - Заполните поля:
- Имя —
buh_copy_0915; - Защищённое соединение — как у рабочей базы;
- Сервер баз данных — тот же сервер СУБД;
- Тип СУБД —
MS SQL ServerилиPostgreSQL; - База данных — ровно то имя, под которым вы её восстановили;
- Пользователь сервера БД и пароль — логин, которому вы отдали базу;
- Создать базу данных в случае её отсутствия — снять (база уже есть);
- Установить блокировку регламентных заданий — обязательно отметить.
- Имя —
- Нажмите
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С:Предприятие под администратором.
- Сравните ключевые цифры с рабочей базой: оборотно-сальдовую ведомость за прошлый месяц или остатки по складу.
- При сомнениях запустите в Конфигураторе
Администрирование→Тестирование и исправлениетолько с флажком проверки логической целостности, без исправления. Для этого нужен монопольный доступ к копии, рабочую базу он не затрагивает.
Что «почистить» в копии
- 🔕 В разделе
Администрированиетиповой конфигурации отключите синхронизацию данных и обмены. - 📧 Удалите или смените пароли учётных записей электронной почты, если копию отдают подрядчику.
- 👥 Отключите вход пользователей, которым копия не нужна.
- 🗑 Удалите файл
.bakили.dump, когда копия проверена: он занимает место и содержит все данные компании.