Как безопасно подключить копию базы MS SQL из файлов MDF и LDF на тот же сервер?

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При обслуживании и разработке информационных систем «1С:Предприятие» часто требуется оперативно создать копию рабочей базы данных для тестирования, отладки или проверки обновлений. Когда развертывание стандартного бэкапа (.bak) через медленную сеть занимает слишком много времени, возникает вопрос: можно ли скопировать файлы .mdf и .ldf, переименовать их и подключить на том же экземпляре Microsoft SQL Server? Разберем подробно технические нюансы, риски и правила выполнения этой операции, а также способы ускорения стандартных процедур восстановления.

Можно ли подключить копию файлов MDF/LDF на тот же экземпляр SQL Server?

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

Рассмотрим ключевые условия, при которых операция пройдет успешно:

  1. Файлы должны находиться в консистентном состоянии (Clean Shutdown). Нельзя просто скопировать файлы данных работающей «горячей» базы через файловый проводник. Чтобы получить корректную копию файлов без повреждения страниц, исходная база данных должна быть предварительно переведена в режим Offline, отсоединена (Detach) либо скопирована с использованием механизма теневого копирования томов (VSS).
  2. Уникальные пути и имена файлов. Физические файлы копии должны иметь другие имена и/или располагаться в отдельном каталоге, отличном от рабочей базы.
  3. Уникальное имя базы данных в СУБД. При операции подключения (Attach) необходимо задать новое имя базы данных, не совпадающее с оригиналом.

Пошаговый процесс подключения копии базы данных

Разберем по шагам, как правильно выполнить операцию подключения файлов через T-SQL, чтобы исключить ошибки:

  1. Размещаем скопированные файлы .mdf и .ldf в целевой папке на диске сервера (например, D:\SQLData\Base_Test_Data.mdf и L:\SQLLog\Base_Test_Log.ldf).
  2. Подключаем базу данных с новым именем с помощью инструкции CREATE DATABASE ... FOR ATTACH:

CREATE DATABASE [Base_Test]   
    ON (FILENAME = 'D:\SQLData\Base_Test_Data.mdf'),   
    (FILENAME = 'L:\SQLLog\Base_Test_Log.ldf')   
    FOR ATTACH;
  1. Генерируем новый идентификатор Service Broker, если этот механизм используется. Это исключит конфликт очередей и маршрутизации сообщений между рабочей и тестовой базами на одном экземпляре:

ALTER DATABASE [Base_Test] SET NEW_BROKER WITH ROLLBACK IMMEDIATE;

  1. При необходимости корректируем внутренние (логические) имена файлов, чтобы они соответствовали новому имени базы:

ALTER DATABASE [Base_Test] MODIFY FILE (NAME = N'OriginalBase_Data', NEWNAME = N'Base_Test_Data');
ALTER DATABASE [Base_Test] MODIFY FILE (NAME = N'OriginalBase_Log', NEWNAME = N'Base_Test_Log');

Обязательные действия со стороны платформы «1С:Предприятие»

После успешного подключения базы данных в MS SQL Server и перед ее регистрацией в кластере серверов «1С:Предприятия» необходимо выполнить защитные настройки:

  1. Блокировка регламентных заданий. В консоли администрирования кластера серверов 1С при создании информационной базы обязательно устанавливаем флаг «Блокировка регламентных заданий включена». Если этого не сделать, тестовая база сразу начнет выполнять фоновые задания: отправку писем клиентам, интеграции с внешними сервисами, загрузку банковских выписок и обмен с другими узлами, что приведет к повреждению данных в реальных системах.
  2. Блокировка начала сеансов. Включаем флаг «Блокировка начала сеансов включена», чтобы предотвратить случайный вход пользователей в тестовую копию до завершения всех проверок.
  3. Устранение проблем с учетными записями СУБД (Orphaned Users). Если копия монтируется на другом сервере SQL, пользователи базы могут потерять связь с серверными логинами из-за несовпадения идентификаторов SID. Для восстановления привязки пользователя usr1cv8 выполняем команду:

USE [Base_Test];
ALTER USER [usr1cv8] WITH LOGIN = [usr1cv8];

Альтернативные способы быстрого создания копий

Если прямое копирование файлов MDF/LDF сопряжено с рисками или требует остановки рабочей базы, проанализируем штатные способы ускорения резервного копирования и восстановления больших баз (от 100 ГБ и более):

  1. Мгновенная инициализация файлов (Instant File Initialization). Предоставление учетной записи службы SQL Server права локальной политики Windows «Выполнение задач по обслуживанию томов» (SE_MANAGE_VOLUME_NAME) отключает обнуление выделяемого места на диске при восстановлении. Это ускоряет развертывание базы данных из бэкапа в несколько раз.
  2. Сжатие резервных копий (WITH COMPRESSION). Использование компрессии при создании бэкапа уменьшает итоговый размер файла в 3–5 раз, что существенно снижает время передачи данных по локальной сети.
  3. Многопоточное резервное копирование. Выгрузка бэкапа одновременно в несколько файлов распределяет нагрузку на дисковую подсистему и сокращает общее время операции:

BACKUP DATABASE [Base_Work] 
TO DISK = 'D:\Backup\Base_Part1.bak',
   DISK = 'D:\Backup\Base_Part2.bak',
   DISK = 'D:\Backup\Base_Part3.bak',
   DISK = 'D:\Backup\Base_Part4.bak'
WITH COMPRESSION, STATS = 10;
  1. Использование моментальных снимков (Database Snapshots). Если тестовая копия базы нужна на короткий срок для отладки или проверки функционала, создание снимка базы данных выполняется мгновенно и не требует дублирования всего объема данных на диске.
← На главную