Администрирование · 11 мин
Как восстановить базу данных 1С на SQL Server
Как восстановить базу 1С на SQL Server из бэкапа .bak или файлов .mdf: пошаговые инструкции, команды T-SQL, проверка результата и типичные ошибки.
Клиент-серверная база 1С физически хранится в СУБД — чаще всего Microsoft SQL Server. Поэтому восстановление такой базы выполняется средствами самого SQL Server: либо из резервной копии .bak, либо подключением файлов данных .mdf и журнала .ldf. Конфигуратор 1С в этой процедуре участвует только на финальном этапе — для проверки, что база открывается и работает корректно.
Главный риск при восстановлении — перезаписать рабочую базу устаревшей копией или потерять данные, накопленные после создания бэкапа. Поэтому перед любыми действиями нужно зафиксировать текущее состояние: сделать резервную копию существующей (пусть и повреждённой) базы и скопировать файлы .mdf/.ldf, если они доступны. Это «страховочный» слой, к которому можно вернуться при неудаче.
Ниже разобраны оба основных сценария: восстановление из бэкапа и присоединение файлов базы, а также проверка результата, типичные ошибки и границы самостоятельной работы.
Определите, из чего будете восстанавливать базу
Порядок действий зависит от того, какие исходные данные у вас есть. Возможны три типичные ситуации: есть актуальный файл резервной копии .bak, есть только файлы базы .mdf и .ldf (например, скопированные с вышедшего из строя сервера), есть только выгрузка .dt, сделанная через конфигуратор. Каждый вариант требует своего подхода.
Файл .dt — это не резервная копия SQL Server, а выгрузка средствами 1С. Он загружается через конфигуратор в заранее созданную пустую базу и не подходит для восстановления средствами СУБД. Если есть и .bak, и .dt, предпочтителен .bak: он восстанавливается быстрее и сохраняет базу в целостном виде на уровне СУБД.
Как выбрать способ восстановления
Подготовка: что сделать до восстановления
Первое действие — завершить все сеансы пользователей с базой. Открытые соединения блокируют операцию RESTORE, и восстановление завершится ошибкой «database is in use». Сеансы завершают через консоль кластера серверов 1С, через оснастку служб (остановка агента сервера 1С) или установкой базы в однопользовательский режим.
Второе обязательное действие — сохранить текущее состояние. Если база ещё доступна, сделайте полную резервную копию средствами SSMS. Если база недоступна, но файлы .mdf и .ldf читаются, скопируйте их на другой диск. Пока существует эта копия, любую ошибку при восстановлении можно откатить.
Третий шаг — убедиться, что на диске достаточно места. Восстановленная база займёт примерно столько же места, сколько занимала исходная, плюс потребуется место под сам файл бэкапа. Проверьте также версию SQL Server: базу, созданную на более новой версии, нельзя восстановить на более старой — это жёсткое ограничение СУБД.
Восстановление из файла резервной копии .bak
Стандартный способ — графический мастер в SQL Server Management Studio. Откройте SSMS, подключитесь к экземпляру сервера, щёлкните правой кнопкой по узлу «Базы данных» и выберите «Восстановить базу данных». Укажите источник «Устройство» и путь к файлу .bak. Если восстанавливаете поверх существующей базы, на вкладке «Параметры» отметьте «Перезаписать существующую базу данных (WITH REPLACE)» — без этого флага операция будет отклонена.
Обратите внимание на вкладку «Файлы»: там указаны пути, куда будут размещены .mdf и .ldf. Если бэкап делался на другом сервере с иной структурой дисков, пути нужно скорректировать вручную, иначе восстановление завершится ошибкой доступа.
Тот же результат даёт команда T-SQL, которая удобнее для автоматизации и повторяемых операций:
RESTORE DATABASE [TradeBase]
FROM DISK = N'D:\Backups\TradeBase_full.bak'
WITH REPLACE,
MOVE N'TradeBase' TO N'D:\SQLData\TradeBase.mdf',
MOVE N'TradeBase_log' TO N'D:\SQLData\TradeBase_log.ldf';Имена логических файлов в предложении MOVE должны совпадать с именами внутри бэкапа. Узнать их можно командой RESTORE FILELISTONLY FROM DISK = 'путь_к_бэкапу' — она выводит список файлов, хранящихся в копии.
- 1Завершите сеансы пользователей и сделайте копию текущего состояния базы
- 2Откройте SSMS и проверьте свободное место на целевом диске
- 3Выполните RESTORE FILELISTONLY, чтобы узнать логические имена файлов
- 4Запустите RESTORE DATABASE с параметрами REPLACE и MOVE
- 5Дождитесь сообщения об успешном завершении и проверьте статус базы
- 6Откройте базу в 1С и выполните контрольную проверку данных
Восстановление присоединением файлов .mdf и .ldf
Если бэкапа нет, но сохранились файлы базы данных — например, их скопировали с отказавшего сервера, — базу можно присоединить к новому экземпляру SQL Server. В SSMS щёлкните правой кнопкой по узлу «Базы данных», выберите «Присоединить», добавьте файл .mdf. Файл журнала .ldf подтянется автоматически, если лежит рядом; если журнал потерян, его можно удалить из списка — SQL Server создаст новый пустой журнал, но это допустимо только если база была корректно закрыта перед копированием.
Критическое условие: файлы .mdf/.ldf должны быть скопированы при остановленной службе SQL Server или после отсоединения базы. Файлы, скопированные «на горячую» с работающего сервера, почти гарантированно несогласованны, и присоединить их не удастся. Если копия снята теневым копированием (VSS) — шансы выше, но проверка целостности обязательна.
После присоединения проверьте, что база перешла в статус ONLINE, и сразу выполните проверку целостности:
DBCC CHECKDB (N'TradeBase') WITH NO_INFOMSGS;Подключение восстановленной базы к 1С
Если база восстановлена на тот же сервер под тем же именем и сервер 1С не менялся, дополнительных действий обычно не требуется — информационная база в консоли кластера уже ссылается на нужную базу данных. Достаточно запустить сеансы и проверить вход.
Если база восстановлена на новый сервер или под другим именем, откройте консоль администрирования серверов 1С, найдите информационную базу и в её свойствах укажите новые параметры: имя сервера СУБД, имя базы данных, учётные данные для доступа. Учётная запись, под которой сервер 1С обращается к SQL Server, должна иметь права владельца (db_owner) на восстановленную базу.
После подключения запустите конфигуратор и выполните тестирование и исправление информационной базы в режиме проверки логической целостности. Это выявит рассогласования на уровне 1С, которые не видны средствами SQL Server. Также полезно сверить ключевые показатели — остатки по складу, взаиморасчёты, обороты за последний закрытый период — с данными, известными пользователям.
Как проверить результат восстановления
База в состоянии ONLINE, без пометок Suspect или Recovery Pending
База в статусе Suspect, Restoring или недоступна
Проверка завершилась без сообщений об ошибках
Есть сообщения об ошибках целостности страниц или цепочек данных
Пользователи входят, документы и отчёты открываются
Ошибки соединения с СУБД или падение сеансов
Остатки и обороты совпадают с ожидаемыми значениями
Пропали документы или расхождения в итогах
Что делать, если база повреждена и бэкапа нет
Ситуация, когда база в статусе Suspect, а резервной копии нет, — самая тяжёлая. Первый шаг — перевести базу в аварийный режим: ALTER DATABASE [Имя] SET EMERGENCY. В этом режиме база доступна только для чтения, и можно попытаться выгрузить данные скриптами или средствами экспорта.
Далее выполняется DBCC CHECKDB с параметром REPAIR_ALLOW_DATA_LOSS после перевода базы в однопользовательский режим. Название параметра честно отражает суть: восстановление идёт с потерей данных — повреждённые страницы и цепочки записей удаляются. Для базы 1С это почти всегда означает потерю части документов или регистров, поэтому такой ремонт — крайняя мера, после которой обязательна полная сверка данных.
Если ценность данных высока, а собственного опыта восстановления повреждённых баз нет, разумнее остановиться на этапе EMERGENCY-режима и привлечь специалиста по SQL Server. Неумелые действия на этом этапе сокращают шансы даже на профессиональное восстановление.
Профилактика: как не оказаться без бэкапа
Настройте регулярное резервное копирование средствами SQL Server: полные копии ежедневно, разностные или копии журнала транзакций — несколько раз в день. Для баз в полной модели восстановления (Full) копии журнала позволяют восстановить состояние на произвольный момент времени, а не только на момент последнего бэкапа.
Храните копии минимум на двух независимых носителях, один из которых физически отделён от сервера. И периодически выполняйте контрольное восстановление на тестовом сервере: бэкап, который ни разу не проверяли восстановлением, нельзя считать надёжным.
Что важно запомнить
Базу 1С на SQL Server восстанавливают средствами СУБД: RESTORE DATABASE из .bak или присоединение .mdf/.ldf. Перед началом всегда фиксируйте текущее состояние, после восстановления проверяйте целостность через DBCC CHECKDB и сверяйте данные в 1С. Регулярные проверенные бэкапы — единственная надёжная защита.
Часто задаваемые вопросы
Можно ли восстановить базу 1С из .bak на SQL Server другой версии?
Только в сторону повышения версии: бэкап со старого сервера восстанавливается на новом без проблем. Обратное невозможно — SQL Server не поддерживает восстановление базы на версию ниже той, где она была создана. Если целевой сервер старше, вариант один: промежуточный сервер нужной версии и перенос данных скриптами или выгрузкой .dt.
Чем восстановление из .bak отличается от загрузки .dt?
Файл .bak — копия на уровне СУБД, восстанавливается быстро и сохраняет базу целиком, включая все служебные структуры. Файл .dt — выгрузка средствами 1С, загружается дольше, требует предварительно созданной пустой базы и иногда «теряет» специфические настройки. Для аварийного восстановления предпочтителен .bak, .dt удобен для переноса между разными СУБД.
База в статусе Recovery Pending — что это значит?
SQL Server не может завершить восстановление базы после сбоя — чаще всего из-за нехватки места на диске или недоступности файлов. Проверьте свободное место, доступность дисков с .mdf и .ldf, затем перезапустите службу SQL Server или выполните RESTORE DATABASE с параметром RECOVERY. Если не помогло — действуйте как при статусе Suspect.
Можно ли восстановить данные на конкретный момент времени?
Да, если база работала в полной модели восстановления и у вас есть цепочка: полная копия + копии журнала транзакций до нужного момента. В мастере восстановления SSMS или в команде RESTORE LOG указывается параметр STOPAT с датой и временем. В простой модели восстановления (Simple) такая возможность отсутствует — только на момент создания копии.
Почему после восстановления 1С не подключается к базе?
Наиболее частые причины: учётная запись сервера 1С не имеет прав на восстановленную базу (нужна роль db_owner), в свойствах информационной базы в консоли кластера указаны старые имя сервера или имя базы, либо база осталась в однопользовательском режиме после обслуживания. Проверьте эти три пункта в указанном порядке.
Нужно ли останавливать сервер 1С на время восстановления?
Строго говоря, достаточно завершить сеансы с конкретной базой — останавливать весь агент сервера 1С не обязательно, если на нём работают другие базы. Но если восстановление затрагивает общие ресурсы сервера или выполняется в нерабочее время, остановка агента — простой и надёжный способ гарантировать отсутствие подключений.