Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.

MSSQL Ошибка 5170: Cannot create file because it already exists — Решение

Обновлено: 25.08.2026  ·  Официальная база знаний
  • Сообщение: Msg 5170, Level 16, State 1: Cannot create file 'D:\Data\Base1C.mdf' because it already exists. Change the file path or the name, and retry the operation.
  • Сбой при развертывании копии рабочей базы 1С для разработки или тестирования.
  • Ошибка при попытке создания новой базы с именем, которое ранее уже использовалось.

1. Перезапись файлов при восстановлении из бэкапа (WITH REPLACE)

Если выполняется операция восстановления поверх существующей тестовой базы, явно укажите флаг перезаписи REPLACE:

RESTORE DATABASE [Base1C_Test] 
FROM DISK = N'D:\Backup\Base1C_prod.bak' 
WITH 
    MOVE N'Base1C_Data' TO N'D:\Data\Base1C_Test.mdf',
    MOVE N'Base1C_Log' TO N'D:\Data\Base1C_Test_log.ldf',
    REPLACE, RECOVERY;
GO

2. Удаление брошенных (Orphaned) файлов на диске

Если база данных была ранее удалена из SSMS без фактического удаления файлов с файловой системы:

  1. Проверьте, не подключен ли данный файл к другой базе:
SELECT name, physical_name FROM sys.master_files WHERE physical_name LIKE '%Base1C.mdf%';
GO
  1. Если файл не числится в sys.master_files, переименуйте или удалите его вручную в проводнике Windows.

3. Использование уникальных имен для новых баз

При создании нескольких тестовых баз на одном сервере задавайте уникальные имена физических файлов:

CREATE DATABASE [Base1C_Dev] ON 
( NAME = N'Base1C_Dev_Data', FILENAME = N'D:\Data\Base1C_Dev.mdf' )
LOG ON 
( NAME = N'Base1C_Dev_Log', FILENAME = N'D:\Data\Base1C_Dev_log.ldf' );
GO
Практический опыт инженера: При регулярном автоматическом развертывании тестовых копий 1С из боевых бэкапов (DevOps CI/CD) всегда формируйте имя физического файла с динамическим суффиксом даты или номера ветки (например, Base1C_dev_20250101.mdf).

Частые вопросы (FAQ)

Почему DROP DATABASE иногда оставляет файлы на диске?

Если во время удаления базы данных диск был перегружен или антивирус заблокировал дескриптор файла, запись из системного каталога удаляется, но физический файл остается на накопителе.

Опасно ли использовать параметр WITH REPLACE?

Да, параметр WITH REPLACE без предупреждения перезапишет существующие файлы базы данных с тем же именем. Используйте его с осторожностью, чтобы случайно не затереть рабочую базу 1С.

Что делать, если файл занят и не удаляется из проводника?

Используйте утилиту OpenFiles или Process Explorer, чтобы найти процесс, удерживающий дескриптор (часто это сторонний сервис бэкапа или зависший поток СУБД).

Как скриптом проверить существование файла перед созданием базы?

Используйте системную процедуру: EXEC master.dbo.xp_fileexist 'D:\Data\Base1C.mdf', @result OUTPUT.