Администрирование · 11 мин
1С и SQL: как скопировать базу данных
Как скопировать базу данных 1С на SQL Server: резервное копирование через SSMS, detach/attach, выгрузка через конфигуратор, восстановление и проверка результата.
Копирование базы данных 1С, развёрнутой на Microsoft SQL Server, — типовая задача администратора: создать тестовую копию для обкатки обновления, перенести базу на другой сервер, сделать резервную копию перед рискованной операцией. В отличие от файловой версии, где достаточно скопировать каталог с файлом 1Cv8.1CD, клиент-серверная база хранится в СУБД, и простое копирование файлов .mdf и .ldf «на горячую» недопустимо — файлы заблокированы службой SQL Server, а при их принудительном копировании получится повреждённая копия.
Существует три рабочих способа скопировать SQL-базу 1С: резервное копирование и восстановление средствами SQL Server (BACKUP/RESTORE), отсоединение и присоединение файлов (detach/attach) и выгрузка информационной базы в файл .dt через конфигуратор с последующей загрузкой. Выбор зависит от цели копии, размера базы и того, совпадают ли версии SQL Server на источнике и приёмнике.
Важно понимать двухуровневую природу 1С в клиент-серверном режиме: данные лежат в базе SQL Server, а регистрация информационной базы — в кластере сервера 1С:Предприятия. Скопировать только базу в СУБД недостаточно — нужно ещё зарегистрировать её в консоли кластера или подключить через список баз, иначе пользователи её не увидят.
Подготовка: что проверить перед копированием
Перед началом определите, какая копия вам нужна: полная копия со всеми данными для тестов или архива, либо «чистая» структура для новой организации. От этого зависит выбор метода. Также проверьте версии: базу, созданную на более новой версии SQL Server, нельзя восстановить или присоединить на более старой — это жёсткое ограничение SQL Server, обойти его можно только выгрузкой в .dt.
Убедитесь, что на целевом диске достаточно места: для RESTORE потребуется объём, сопоставимый с размером исходной базы, а файл резервной копии при сжатии обычно занимает заметно меньше, но без сжатия — примерно столько же. Уточните размер базы в свойствах базы в SQL Server Management Studio (SSMS) на вкладке General.
Для работы потребуются права: учётная запись должна иметь роль sysadmin или права на BACKUP/RESTORE в SQL Server, а для регистрации базы — доступ администратора к кластеру серверов 1С. Если копия делается для тестов, заранее решите вопрос блокировки регламентных заданий, чтобы тестовая копия не начала рассылать отчёты или обмениваться данными с реальными системами.
Способ 1: копирование через резервную копию (BACKUP и RESTORE)
Это основной и самый безопасный метод: исходная база продолжает работать, простой пользователей не требуется. Откройте SSMS, подключитесь к серверу, найдите нужную базу, щёлкните правой кнопкой — Tasks — Back Up. Выберите тип Full, укажите путь к файлу .bak на диске с достаточным объёмом и запустите копирование. Для больших баз включите сжатие резервной копии (Compression), если редакция SQL Server его поддерживает.
Затем восстановите копию под новым именем. Правый клик по узлу Databases — Restore Database, источник — Device, укажите файл .bak. В поле Destination впишите новое имя базы, например Trade_Test. Обязательно перейдите на вкладку Files и проверьте пути к файлам данных и журнала: по умолчанию RESTORE пытается разместить файлы по старым путям, и если исходная база на этом же сервере, возникнет конфликт имён файлов — измените имена .mdf и .ldf на уникальные.
Те же действия можно выполнить скриптом, что удобно для регулярного создания тестовых копий:
BACKUP DATABASE [Trade] TO DISK = N'D:\Backup\Trade_copy.bak' WITH COMPRESSION, INIT;
GO
RESTORE DATABASE [Trade_Test] FROM DISK = N'D:\Backup\Trade_copy.bak'
WITH MOVE N'Trade' TO N'D:\SQLData\Trade_Test.mdf',
MOVE N'Trade_log' TO N'D:\SQLData\Trade_Test_log.ldf', REPLACE;Имена логических файлов в предложении MOVE (в примере Trade и Trade_log) посмотрите в свойствах исходной базы на вкладке Files — они не всегда совпадают с именем базы. После успешного восстановления новая база появится в списке и будет находиться в состоянии Online.
Способ 2: отсоединение и присоединение (detach/attach)
Detach/attach подходит для разового переноса базы на другой сервер той же или более новой версии SQL Server. Сначала завершите сеансы пользователей: в консоли кластера 1С удалите активные соединения или заблокируйте информационную базу, иначе отсоединение завершится ошибкой из-за открытых подключений.
В SSMS: правый клик по базе — Tasks — Detach, отметьте Drop Connections и при необходимости Update Statistics. После отсоединения файлы .mdf и .ldf освобождаются, их можно скопировать на другой сервер обычным способом. На целевом сервере: правый клик по Databases — Attach — Add, укажите .mdf-файл, журнал подцепится автоматически, если лежит рядом.
Учтите, что на время между detach и attach исходная база недоступна, поэтому метод не подходит для создания копии без остановки работы. Если копируете файлы на тот же сервер, attach с теми же файлами невозможен — сначала скопируйте их под другими именами и присоединяйте копию.
Способ 3: выгрузка в .dt через конфигуратор
Выгрузка информационной базы в файл .dt — универсальный метод, не зависящий от СУБД: так можно перенести базу между SQL Server, PostgreSQL и файловым режимом, а также между разными версиями СУБД. Откройте конфигуратор под пользователем с полными правами, меню Администрирование — Выгрузить информационную базу, укажите путь к файлу .dt.
На приёмнике создайте пустую информационную базу (в кластере 1С с новой базой SQL Server или файловую), откройте её конфигуратором и выполните Администрирование — Загрузить информационную базу. Загрузка полностью заменяет содержимое целевой базы, включая список пользователей 1С.
Ограничения метода существенны: выгрузка и загрузка требуют монопольного доступа, на больших базах (десятки и сотни гигабайт) процесс занимает часы, а файл .dt растёт медленнее, но всё же достигает большого размера. Кроме того, выгрузка .dt — это не средство резервного копирования в полном смысле: она не гарантирует целостность при сбое и не заменяет SQL-бэкапы в продуктивной схеме.
Сравнение способов копирования
Лучший выбор для копии на том же или другом сервере той же версии. Работает без остановки пользователей, быстро на больших базах. Не подходит для перехода на старую версию SQL Server.
Подходит для разового переноса на другой сервер. Требует остановки работы с базой и совместимости версий. Не создаёт копию без копирования файлов под новыми именами.
Универсален: любые СУБД и версии, заодно переиндексирует данные. Медленно на больших базах, требует монопольного доступа, не заменяет регулярные бэкапы.
Регистрация копии в кластере 1С
После создания базы в SQL Server её нужно зарегистрировать в сервере 1С:Предприятия. Откройте консоль управления серверами 1С, разверните кластер, правый клик по «Информационные базы» — Создать — Информационная база. Задайте имя (оно будет видно пользователям в списке баз), выберите тип СУБД MS SQL Server, укажите сервер баз данных и имя созданной базы (например, Trade_Test), а также учётные данные для доступа к SQL Server.
Критически важный шаг для тестовой копии — установить блокировку регламентных заданий. В параметрах информационной базы в консоли кластера поставьте флажок «Блокировка регламентных заданий включена». Иначе копия начнёт выполнять те же фоновые задачи, что и рабочая база: обмены с сайтом, рассылки, выгрузки в банк — с реальными данными контрагентов.
Если сервера 1С в инфраструктуре нет (база подключается напрямую), пользователь может добавить базу через диалог запуска 1С: кнопка «Добавить» — «Добавление в список существующей информационной базы» — серверный вариант с указанием сервера 1С и имени базы в кластере.
- 1Сделайте полную резервную копию рабочей базы через SSMS (Tasks — Back Up, тип Full)
- 2Восстановите её под новым именем через Restore Database, изменив пути и имена файлов .mdf/.ldf
- 3Зарегистрируйте базу в консоли кластера 1С с новым именем
- 4Включите блокировку регламентных заданий для копии
- 5Войдите в копию конфигуратором и в пользовательском режиме, проверьте данные
- 6При необходимости выполните обработку очистки персональных данных или подстановку тестовых настроек обменов
Проверка результата и частые ошибки
После копирования проверьте базу на двух уровнях. На уровне SQL Server: база в состоянии Online, размер файлов соответствует ожиданиям, в журнале ошибок SQL Server нет сообщений о повреждениях. Для глубокой проверки выполните DBCC CHECKDB — на больших базах это занимает время, но выявит скрытые проблемы целостности.
На уровне 1С: войдите в копию в пользовательском режиме, откройте несколько ключевых отчётов (оборотно-сальдовую ведомость, остатки склада) и сравните итоги с рабочей базой на одну и ту же дату. Проверьте, что в копии отключены обмены и регламентные задания, а в параметрах указаны тестовые каталоги и адреса.
Как проверить результат
Status — Online, файлы на месте, размер соответствует источнику
Suspect, Restoring или Recovery Pending — база требует восстановления
База открывается в пользовательском и конфигураторском режимах
Ошибка соединения с СУБД или 'информационная база не обнаружена'
Блокировка включена, задания не выполняются
В журнале регистрации копии появляются записи о выполненных заданиях
Итоги отчётов совпадают с рабочей базой на дату копии
Расхождения в остатках и оборотах — копия неактуальна или повреждена
Частые вопросы
Можно ли скопировать базу 1С SQL, не останавливая работу пользователей?
Да, методом BACKUP/RESTORE: резервное копирование SQL Server не блокирует работу базы, а восстановление выполняется в новую базу под другим именем. Учтите только, что копия будет соответствовать моменту завершения бэкапа, а не произвольному моменту времени.
Как скопировать базу с SQL Server 2019 на SQL Server 2014?
Напрямую никак: резервные копии и файлы данных несовместимы вниз по версиям. Единственный штатный путь — выгрузить информационную базу в файл .dt через конфигуратор и загрузить её в пустую базу на старом сервере.
Нужно ли копировать базу кластера 1С вместе с базой SQL?
Нет. Регистрация информационной базы в кластере — это небольшая запись, которую проще создать заново через консоль серверов 1С. Все данные хранятся именно в базе SQL Server.
Чем копирование через .dt отличается от SQL-бэкапа по результату?
Загрузка из .dt физически пересоздаёт таблицы и индексы, что заодно устраняет фрагментацию и часть логических проблем. SQL-бэкап создаёт побайтовую копию, включая фрагментацию и возможные скрытые дефекты страниц данных.
Как регулярно обновлять тестовую копию актуальными данными?
Настройте скрипт BACKUP на рабочем сервере и RESTORE WITH REPLACE в тестовую базу по расписанию через SQL Server Agent или планировщик Windows. После каждого восстановления заново проверяйте блокировку регламентных заданий — при замене базы параметры кластера сохраняются, но перепроверка обязательна.
Можно ли просто скопировать файлы .mdf и .ldf на другой диск?
Только если база предварительно отсоединена (detach) или служба SQL Server остановлена. Копирование файлов работающей базы даёт несогласованные данные, и такая копия с высокой вероятностью не присоединится.
Что важно запомнить
Рабочая SQL-база 1С копируется тремя способами: BACKUP/RESTORE — без остановки работы и предпочтительно, detach/attach — для разового переноса, выгрузка .dt — для смены СУБД или версии. После копирования базу регистрируют в кластере 1С, включают блокировку регламентных заданий и проверяют вход и итоги отчётов. Копировать файлы .mdf/.ldf работающей базы нельзя.