Как восстановить базу данных SQL из другой базы данных или архивной копии, если ее нет в списке источников?

Системный администратор IT и автоматизация бизнеса
← На главную

При работе с MS SQL Server администраторы 1С часто сталкиваются с задачей создания копии рабочей базы для целей тестирования, разработки или анализа данных на определенную дату. Типичная проблема возникает при использовании графического интерфейса SQL Server Management Studio (SSMS): при попытке выбрать базу-источник в мастере восстановления нужная база просто отсутствует в выпадающем списке, либо там отображаются объекты с других серверов. Разберем подробно, почему это происходит и как правильно выполнить восстановление, не затерев при этом рабочие данные.

Выясним причину: почему список «Источник» в SSMS пуст или некорректен

Для начала проанализируем ситуацию с точки зрения механизмов самого SQL Server. Окно восстановления в SSMS формирует список баз данных в поле «Source» (Источник) не на основе тех баз, которые физически прикреплены к серверу в данный момент, а на основе системной таблицы msdb.dbo.backupset. Рассмотрим основные причины «неправильного» поведения списка:

  1. Отсутствие истории бэкапов: Если база данных существует на сервере, но для нее ни разу не создавался бэкап средствами самого SQL Server (например, через Maintenance Plan или команду BACKUP DATABASE), она не появится в списке источников. Система «не знает», из чего восстанавливаться.
  2. Базы с других серверов: Если вы видите названия баз, которых нет на текущем сервере, это означает, что на данном экземпляре SQL ранее восстанавливалась системная база msdb с другого сервера. Вместе с ней «переехала» и история бэкапов.
  3. Ручное удаление файлов: Если бэкапы делались, но файлы были перемещены или удалены вручную с диска без ведома SQL Server, попытка восстановления из списка «Database» приведет к ошибке, так как записи в msdb станут недействительными.

Рекомендация: Вместо использования варианта «Database» в качестве источника, профессиональнее и надежнее использовать вариант «Device» (Устройство) и указывать прямой путь к файлу .bak.

Восстановление на определенный момент времени (Point-in-Time Recovery)

Разберем вопрос о возможности возврата состояния базы «на вчерашний вечер», если последний бэкап был сделан сегодня утром. Здесь важно понимать теорию резервного копирования:

Бэкап — это мгновенный снимок. Если у вас есть полная копия (Full Backup) на 8:00 утра понедельника, вы не можете «откатить» ее к вечеру воскресенья, используя только этот файл. Для восстановления на произвольный момент времени должны соблюдаться следующие условия:

Для визуального выбора времени в SSMS предусмотрена кнопка Timeline. Она позволяет буквально передвинуть ползунок на нужную секунду, но только если накоплены логи транзакций за этот период.

Технические нюансы создания копии базы: как не затереть оригинал

Рассмотрим ситуацию, когда нам нужно восстановить базу Work_Base в новую базу Test_Copy на том же сервере. Это критический момент: по умолчанию SQL Server попытается восстановить файлы в те же папки и с теми же именами, что у оригинала. Если нажать «ОК» без дополнительных настроек, можно повредить рабочую базу.

Проанализируем шаги во вкладке Files (Файлы) мастера восстановления:

  1. Установите флаг Relocate all files to folder или вручную измените пути в колонке Restore As.
  2. Убедитесь, что имена файлов .mdf и .ldf отличаются от имен файлов оригинальной базы. Например, вместо Work_Base.mdf укажите Test_Copy.mdf.

Во вкладке Options обязательно обратите внимание на следующие параметры:

Использование скрипта T-SQL как самого надежного метода

Рассмотрим пример скрипта, который позволяет выполнить восстановление максимально прозрачно. Использование RESTORE DATABASE с параметром WITH MOVE — это «золотой стандарт» администратора.


-- Пример восстановления базы из файла с переименованием файлов данных и лога
RESTORE DATABASE [Test_Copy] 
FROM DISK = N'D:\Backups\Work_Base_Full.bak' 
WITH 
    MOVE N'Work_Base_Data_Logical_Name' TO N'E:\SQL_Data\Test_Copy.mdf', 
    MOVE N'Work_Base_Log_Logical_Name' TO N'E:\SQL_Logs\Test_Copy_log.ldf',
    REPLACE, 
    RECOVERY, 
    STATS = 10;

Разберем параметры этого скрипта подробнее:

Особенности для систем на базе 1С:Предприятие

После того как база успешно восстановлена на SQL-уровне, работа администратора 1С не заканчивается. Проанализируем необходимые действия в самой системе:

  1. Регистрация в консоли: Базу необходимо добавить в консоль администрирования серверов 1С под новым именем.
  2. Блокировка регламентных заданий: Сразу после развертывания копии крайне рекомендуется заблокировать выполнение регламентных заданий. Это предотвратит ситуацию, когда тестовая база начнет рассылать реальные уведомления клиентам, выполнять обмены с сайтом или другими системами, «думая», что она является рабочей.
  3. Очистка списка пользователей: В некоторых случаях (например, при передаче базы сторонним разработчикам) требуется очистить таблицу v8users через SQL-запрос, чтобы обеспечить безопасность данных.

Таким образом, мы выяснили, что отсутствие базы в списке источников — это лишь особенность ведения истории в msdb, а не критическая ошибка. Используя восстановление через файлы (Device) или T-SQL скрипты, вы получаете полный контроль над процессом и гарантируете сохранность своих данных.

← На главную