MSSQL Error 3154: The backup set holds a backup of a database other than existing
Ошибка 3154 является одной из наиболее распространенных ошибок при восстановлении резервных копий. Она возникает, когда имя целевой существующей базы данных на сервере отличается от имени базы данных, указанного в заголовке файла бэкапа.
- Сообщение:
The backup set holds a backup of a database other than the existing '%.*ls' database(Severity 16, State 4). - Отказ выполнения команды
RESTORE DATABASEв Management Studio или через T-SQL. - Сбой автоматического развертывания баз разработчиков из боевых бэкапов.
1. Восстановление через SSMS с включением флага перезаписи
- В диалоговом окне Restore Database перейдите на страницу Options (Параметры).
- Установите флажок Overwrite the existing database (WITH REPLACE).
- На странице Files проверьте правильность целевых путей размещения файлов данных и лога.
2. Универсальный T-SQL скрипт восстановления
USE [master];
GO
-- 1. Сброс подключений к целевой базе
IF DB_ID('Target_1C_DB') IS NOT NULL
BEGIN
ALTER DATABASE [Target_1C_DB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
END
GO
-- 2. Восстановление с перезаписью и переносом файлов
RESTORE DATABASE [Target_1C_DB]
FROM DISK = N'D:\Backups\Prod_1C_DB_backup.bak'
WITH
MOVE N'Prod_1C_DB_Data' TO N'D:\MSSQL\Data\Target_1C_DB.mdf',
MOVE N'Prod_1C_DB_Log' TO N'D:\MSSQL\Data\Target_1C_DB_log.ldf',
REPLACE,
RECOVERY,
STATS = 10;
GO
-- 3. Возврат в многопользовательский режим
ALTER DATABASE [Target_1C_DB] SET MULTI_USER;
GO3. Исправление осиротевших пользователей (Orphaned Users) после восстановления
Если после Restore пользователи 1С не могут авторизоваться:
USE [Target_1C_DB];
GO
-- Поиск пользователей без связанных SQL-логинов
EXEC sp_change_users_login 'Report';
-- Автоматическая привязка логина к пользователю базы
EXEC sp_change_users_login 'Auto_Fix', 'usr1cv8';
GO Частые вопросы (FAQ)
Почему Restore работает без ошибки, если восстанавливать в базу с тем же именем?
Если имя базы совпадает с заголовком бэкапа, SQL Server считает операцию штатным накатом бэкапа. При различии имен требуется явное подтверждение через WITH REPLACE.
Можно ли восстановить бэкап поверх базы без удаления ее текущих пользователей?
Нет, операция RESTORE полностью заменяет содержимое базы данных (включая таблицы пользователей sys.database_principals) состоянием на момент создания бэкапа.
Что делать, если база зависла в состоянии 'In Recovery' после ошибки 3154?
Дождитесь окончания отката транзакций либо выполните принудительный вывод: RESTORE DATABASE [DB] WITH RECOVERY.
Влияет ли версия совместимости (Compatibility Level) на появление ошибки 3154?
Нет, ошибка 3154 связана исключительно с проверкой имени исходной и целевой базы данных.