Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

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

MSSQL_ERROR_3145 1С:Предприятие и СУБД

MSSQL Error 3145: The backup set holds a backup of different database — Решение

Обновлено: 25.08.2026 · Официальная документация ↗

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

  • Сообщение: The backup set holds a backup of a database other than the existing database (Severity 16, State 1).
  • Невозможность развернуть бэкап рабочей базы в базу с другим именем (например, acc_prod.bak в acc_test).
  • Сбой шагов восстановления в планах обслуживания и автоматизированных конвейерах CI/CD.

1. Проверка метаданных бэкапа

RESTORE HEADERONLY 
FROM DISK = N'D:\Backups\SourceDatabase.bak';

Обратите внимание на значение в поле DatabaseName.

2. Использование директивы WITH REPLACE

Для явного подтверждения перезаписи существующей базы данных бэкапом другой базы используйте параметр WITH REPLACE:

USE [master];
GO
ALTER DATABASE [TargetDatabase] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
RESTORE DATABASE [TargetDatabase]
FROM DISK = N'D:\Backups\SourceDatabase.bak'
WITH 
    MOVE N'SourceDB_Data' TO N'D:\MSSQL\Data\TargetDatabase.mdf',
    MOVE N'SourceDB_Log'  TO N'D:\MSSQL\Data\TargetDatabase_log.ldf',
    REPLACE,
    STATS = 10;
GO
ALTER DATABASE [TargetDatabase] SET MULTI_USER;
GO

3. Восстановление в новое имя (если базы Target еще не существует)

Если база данных создается с нуля, просто опустите директиву REPLACE, но обязательно укажите WITH MOVE:

RESTORE DATABASE [NewDatabaseName]
FROM DISK = N'D:\Backups\SourceDatabase.bak'
WITH 
    MOVE N'SourceDB_Data' TO N'D:\MSSQL\Data\NewDatabaseName.mdf',
    MOVE N'SourceDB_Log'  TO N'D:\MSSQL\Data\NewDatabaseName_log.ldf',
    STATS = 10;
💡 Практика специалистов: После разворачивания продакшн-копии 1С в тестовую среду с параметром WITH REPLACE обязательно отключите интеграции, рассылки и регламентные фоновые задания, чтобы тестовая база не отправляла реальные данные во внешние системы.

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

Зачем SQL Server требует флаг WITH REPLACE?

Флаг WITH REPLACE служит защитным барьером от случайной перезаписи критической базы данных бэкапом совершенно другой информационной системы.

В чем отличие ошибки 3145 от ошибки 3154?

Ошибки идентичны по смыслу: 3145 генерируется старыми версиями ядра СУБД или при определенных вызовах OLE DB, тогда как 3154 — стандартное сообщение современного движка. Обе устраняются параметром WITH REPLACE.

Сохранятся ли пользователи и права после перезаписи через WITH REPLACE?

Нет. База будет полностью заменена состоянием из бэкапа, включая всех локальных пользователей базы данных (database users), схемы и разрешения.

Что делать с потерянными пользователями (Orphaned Users) после восстановления?

Свяжите пользователей базы с серверными логинами через процедуру: EXEC sp_change_users_login 'Auto_Fix', 'username'.

Полезные материалы
Рекомендуем