Администрирование · 12 мин
Как скопировать базу 1С средствами SQL
Как скопировать базу 1С средствами SQL Server: полный backup/restore, detach/attach, генерация скриптов. Риски, проверка результата, частые ошибки и FAQ.
Копирование базы 1С через СУБД — стандартный способ развернуть тестовую копию рабочей базы, перенести данные на другой сервер или создать резервную копию перед обновлением. В отличие от выгрузки в .dt через конфигуратор, копирование средствами SQL выполняется быстрее и не требует монопольного доступа на длительное время, но предъявляет более строгие требования к правам и аккуратности.
Основной метод — создание резервной копии (backup) базы данных на уровне SQL Server и её восстановление (restore) под новым именем. Альтернатива — отключение базы (detach) с копированием файлов данных и журнала. Оба подхода работают с Microsoft SQL Server, под PostgreSQL логика аналогична, но команды другие.
Важно понимать: копирование на уровне СУБД создаёт точный образ физической базы, включая все таблицы, индексы и служебные данные. После восстановления копию нужно зарегистрировать в кластере 1С или подключить как файловую — в зависимости от цели. В этой инструкции разобран весь цикл: от подготовки до проверки результата.
Когда копирование через SQL подходит, а когда нет
Копирование средствами СУБД оправдано, если база большая (десятки гигабайт и больше), выгрузка в .dt занимает часы или завершается ошибкой, а также когда нужна точная побитовая копия для воспроизведения проблемы на тестовом стенде. Ещё один типичный сценарий — перенос базы на другой SQL-сервер при миграции инфраструктуры.
Метод не подходит, если нужно перенести данные между разными СУБД (например, с MS SQL на PostgreSQL) — физические файлы несовместимы. Также он бесполезен, когда требуется «очистить» базу от истории или перенести только часть данных: SQL-копия всегда полная. В этих случаях используют выгрузку .dt, обмен через XML или специализированные обработки переноса данных.
Сравнение способов копирования базы 1С
Универсально, работает без остановки рабочей базы, подходит для больших баз. Требует прав на SQL Server.
Быстро для больших файлов, но требует остановки базы. Подходит при переносе на другой сервер.
Не зависит от СУБД, но медленно на больших базах и требует монопольного доступа.
Переносит структуру и выборочно данные между разными СУБД, но не подходит для полной копии большой базы.
Подготовка: что проверить перед копированием
Перед началом убедитесь, что у учётной записи есть права на создание резервных копий (роль db_backupoperator или выше) и на восстановление баз (dbcreator или sysadmin). Проверьте свободное место на диске: файл резервной копии несжатой базы примерно равен размеру данных, а при восстановлении потребуется ещё столько же под файлы новой базы.
Узнайте точное имя базы данных в SQL Server — оно не всегда совпадает с именем информационной базы в списке 1С. Имя видно в свойствах базы в консоли кластера 1С или в списке баз в SQL Server Management Studio (SSMS). Заодно выясните, где физически лежат файлы данных (.mdf) и журнала (.ldf): при восстановлении под новым именем пути придётся указать явно, иначе можно перезаписать файлы рабочей базы.
Способ 1: копирование через Backup и Restore
Это рекомендуемый способ, поскольку исходная база продолжает работать в обычном режиме. Резервное копирование не блокирует пользователей надолго и не требует завершения сеансов 1С.
Откройте SQL Server Management Studio, подключитесь к серверу, найдите базу в обозревателе объектов. Щёлкните по ней правой кнопкой: «Задачи» → «Создать резервную копию». Тип копии — «Полная», назначение — «Диск», укажите путь к файлу .bak. Для ускорения и экономии места можно включить сжатие резервной копии в параметрах.
После завершения копирования восстановите копию: правой кнопкой по узлу «Базы данных» → «Восстановить базу данных». Источник — «Устройство», укажите созданный .bak-файл. В поле «База данных назначения» введите новое имя, например Base_Test. На вкладке «Файлы» обязательно измените пути и имена .mdf и .ldf на новые. На вкладке «Параметры» снимите флажок «Сохранить параметры репликации», если он активен, и при необходимости включите «Закрыть существующие соединения» — для новой базы это не критично.
- 1Проверьте свободное место и права учётной записи на SQL Server
- 2Создайте полную резервную копию рабочей базы в файл .bak
- 3Запустите восстановление с новым именем базы
- 4На вкладке «Файлы» задайте новые пути для .mdf и .ldf
- 5Дождитесь завершения restore и проверьте, что база в состоянии Online
- 6Зарегистрируйте копию в консоли кластера 1С или подключите к ней конфигуратор
Те же действия можно выполнить скриптом T-SQL — это удобно для регулярных копирований:
BACKUP DATABASE [Base_Work]
TO DISK = N'D:\SQLBackup\Base_Work_copy.bak'
WITH COMPRESSION, INIT;
GO
RESTORE DATABASE [Base_Test]
FROM DISK = N'D:\SQLBackup\Base_Work_copy.bak'
WITH MOVE N'Base_Work' TO N'D:\SQLData\Base_Test.mdf',
MOVE N'Base_Work_log' TO N'D:\SQLData\Base_Test_log.ldf',
REPLACE;
GO
Логические имена файлов в предложении MOVE должны точно совпадать с именами исходной базы — их можно посмотреть запросом SELECT name, physical_name FROM sys.master_files WHERE database_id = DB_ID('Base_Work').
Способ 2: Detach, копирование файлов, Attach
Этот способ быстрее на очень больших базах, так как не тратится время на формирование .bak, но требует остановки базы: все сеансы 1С должны быть завершены. В SSMS: правой кнопкой по базе → «Задачи» → «Отсоединить», отметьте «Удалить соединения» и при необходимости «Обновить статистику».
После отсоединения скопируйте файлы .mdf и .ldf в новый каталог средствами операционной системы. Затем присоедините исходную базу обратно («Присоединить» на узле «Базы данных» с указанием исходного .mdf) — рабочая база вернётся в строй. Скопированные файлы присоедините под новым именем: в мастере присоединения укажите скопированный .mdf и измените имя базы в поле «Присоединить как».
CREATE DATABASE [Base_Test] ON (FILENAME = N'D:\SQLCopy\Base_Test.mdf'), (FILENAME = N'D:\SQLCopy\Base_Test_log.ldf') FOR ATTACH;Риск способа — если в момент detach остались активные транзакции или копирование файлов прервалось, можно получить повреждённую копию. Поэтому перед отсоединением убедитесь, что база не используется, а после копирования сразу верните рабочую базу в работу.
Регистрация копии в кластере 1С
Сама по себе база в SQL Server ещё не доступна пользователям 1С — её нужно зарегистрировать в консоли администрирования серверов 1С. Откройте консоль, разверните кластер, узел «Информационные базы» → «Создать» → «Информационная база». Введите имя, тип СУБД, сервер баз данных и имя восстановленной базы. Параметр «Создать базу данных в случае её отсутствия» оставьте снятым — база уже существует.
Обязательно установите флажок «Блокировка регламентных заданий включена» для тестовой копии. Иначе копия начнёт выполнять те же регламентные задания, что и рабочая база: обмены, рассылки, синхронизации — с риском задвоения данных во внешних системах.
Проверка результата и ограничения метода
После восстановления проверьте состояние базы в SSMS: она должна быть Online, без пометок Restoring или Suspect. Затем запустите конфигуратор или тонкий клиент 1С, подключившись к новой информационной базе, и убедитесь, что открываются справочники и документы, а даты последних документов соответствуют моменту создания копии.
Дополнительная проверка — запрос копий ключевых таблиц: сравните количество строк в основных таблицах документов рабочей базы и копии. Полное совпадение означает, что копия целостна на момент backup.
Как проверить результат копирования
Online, без пометок Restoring/Suspect
База висит в Restoring — восстановление не завершено, выполните RESTORE ... WITH RECOVERY
Конфигуратор и клиент открываются, документы на месте
Ошибка соединения — проверьте регистрацию в кластере и права учётной записи 1С
Соответствует моменту создания backup
Данные старше ожидаемых — восстановлен не тот файл копии
Блокировка включена в свойствах ИБ
Блокировка снята — копия может запускать обмены
Учтите ограничения: восстановить базу можно только на SQL Server той же или более новой версии. Копия, снятая в момент активной работы пользователей, консистентна на уровне транзакций SQL, но бизнес-логически может содержать незавершённые операции — для критичных тестов лучше делать копию в нерабочее время.
Альтернативы и частные сценарии
Копирование на PostgreSQL
На PostgreSQL используют связку pg_dump и pg_restore либо копирование через создание базы из шаблона: CREATE DATABASE base_test TEMPLATE base_work; — при условии, что к исходной базе нет активных подключений. После копирования базу так же регистрируют в консоли кластера 1С с указанием типа СУБД PostgreSQL.
Регулярное обновление тестовой копии
Если тестовую копию нужно обновлять регулярно, автоматизируйте связку backup/restore скриптом T-SQL через задание SQL Server Agent или планировщик Windows с sqlcmd. Перед восстановлением завершайте сеансы 1С на тестовой базе через консоль кластера, иначе restore не сможет получить монопольный доступ.
Как выбрать способ копирования
Частые вопросы
Можно ли копировать базу 1С через SQL, пока пользователи работают?
Да, при использовании backup/restore — резервное копирование SQL Server не блокирует работу базы. Копия будет консистентна на уровне транзакций на момент завершения backup. Способ detach/attach требует полной остановки базы и завершения всех сеансов.
Чем копирование через SQL отличается от выгрузки .dt?
SQL-копия — это физическая копия файлов базы данных: быстро, точно, но привязана к конкретной СУБД и её версии. Выгрузка .dt — логическая выгрузка средствами платформы 1С: медленнее на больших базах, но переносима между разными СУБД и позволяет загрузить данные в базу с другой структурой каталогов.
Почему restore завершается ошибкой «база данных используется»?
К восстанавливаемой базе есть активные подключения — открытые сеансы 1С или соединения в SSMS. Завершите сеансы через консоль кластера 1С или добавьте в скрипт команду перевода базы в однопользовательский режим: ALTER DATABASE [Base_Test] SET SINGLE_USER WITH ROLLBACK IMMEDIATE, а после восстановления верните MULTI_USER.
Можно ли восстановить копию на SQL Server более старой версии?
Нет, обратная совместимость при restore отсутствует: базу, созданную или обновлённую на новой версии SQL Server, нельзя восстановить на старой. Варианты — обновить целевой сервер или перенести данные через выгрузку .dt либо генерацию скриптов.
Нужно ли что-то настраивать в 1С после восстановления копии?
Да. Зарегистрируйте базу в консоли кластера, включите блокировку регламентных заданий, отключите в копии настройки обменов и рассылок, если они хранятся внутри базы. Также проверьте, что в копии не остались активными подключения к внешним ресурсам рабочей системы — FTP, веб-сервисам, каталогам обмена.
Сколько места нужно для копирования базы через SQL?
Ориентировочно: размер .bak без сжатия близок к размеру данных базы, со сжатием — заметно меньше. Плюс при восстановлении потребуется место под файлы .mdf и .ldf новой базы, сопоставимое с размером исходной. Перед началом убедитесь, что свободного места хватает с запасом на рост журнала во время restore.
Что важно запомнить
Безопасный путь копирования базы 1С средствами SQL — полный backup и restore под новым именем с обязательной сменой путей файлов. После восстановления копию регистрируют в кластере 1С и включают блокировку регламентных заданий. Результат проверяют по состоянию базы в SSMS и запуску клиента 1С.