MSSQL Error 3110: Restore plan includes file already used by database — Решение
Ошибка 3110 возникает при попытке восстановить резервную копию базы данных под новым именем (например, создание тестовой базы из рабочей), когда файлы данных или лога из бэкапа накладываются на физические файлы, уже занятые другой активной базой на этом же экземпляре СУБД.
- Сообщение:
The proposed RESTORE plan includes file '%ls' which is already used by database '%ls'(Severity 16, State 1). - Отказ восстановления тестовой копии 1С на том же сервере, где работает рабочая база.
- Блокировка восстановления при несовпадении целевых путей размещения файлов.
1. Просмотр логических имен и исходных путей файлов в бэкапе
RESTORE FILELISTONLY
FROM DISK = N'D:\Backups\Production_Full.bak';2. Проверка физических путей файлов существующих баз на сервере
SELECT
DB_NAME(database_id) AS DatabaseName,
name AS LogicalName,
physical_name AS PhysicalPath
FROM sys.master_files
WHERE physical_name LIKE '%YourConflictFileName%';3. Восстановление с явным переназначением путей через WITH MOVE
Задайте уникальные имена целевых физических файлов для новой базы данных:
RESTORE DATABASE [Production_Copy_Test]
FROM DISK = N'D:\Backups\Production_Full.bak'
WITH
MOVE N'Production_Data' TO N'E:\MSSQL\Data\Production_Copy_Test.mdf',
MOVE N'Production_Log' TO N'E:\MSSQL\Data\Production_Copy_Test_log.ldf',
MOVE N'Production_Data_NDF' TO N'E:\MSSQL\Data\Production_Copy_Test_2.ndf', -- если файлов несколько
REPLACE,
STATS = 5;4. Проверка прав доступа службы SQL Server к целевой папке
Убедитесь, что каталог E:\MSSQL\Data\ существует и учетная запись MSSQLSERVER имеет права на запись.
Частые вопросы (FAQ)
Почему SSMS выдает эту ошибку при восстановлении через GUI?
В графическом интерфейсе SSMS на вкладке 'Files' (Файлы) по умолчанию подставляются оригинальные пути из бэкапа. Установите флажок 'Relocate all files to folder' или вручную скорректируйте пути к файлам.
Что произойдет, если выполнить Restore с одинаковыми путями без WITH MOVE?
SQL Server заблокирует операцию ошибкой 3110, чтобы предотвратить катастрофическую перезапись и повреждение работающей производственной базы данных.
Как узнать логические имена файлов без SSMS?
Используйте T-SQL команду RESTORE FILELISTONLY FROM DISK = 'путь_к_бэкапу'. Колонка 'LogicalName' содержит точные имена для секции WITH MOVE.
Можно ли перенести лог транзакций на отдельный быстрый NVMe диск при Restore?
Да, достаточно указать путь к новому NVMe диску в строке MOVE N'Logical_Log_Name' TO N'F:\FastLog\database_log.ldf'.