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

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

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

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

Аварийный режим EMERGENCY и REPAIR_ALLOW_DATA_LOSS в MSSQL: спасение базы

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

Крайняя мера восстановления базы данных применяется в следующих безвыходных ситуациях:

  • Полное физическое уничтожение или повреждение заголовка файла журнала транзакций (.ldf) при отсутствии бэкапов;
  • Фатальные повреждения критических системных каталогов базы данных (sysallocunits, sysrowsets, Allocation Maps);
  • База зависает в цикличном сбое при старте, блокируя любой доступ пользователям.

1. Архитектура аварийного восстановления

Параметр REPAIR_ALLOW_DATA_LOSS выполняет комплекс деструктивных, но необходимых операций:

  • Восстанавливает целостность распределения страниц (PFS, GAM, SGAM);
  • Удаляет битые страницы данных из цепочек таблиц и индексов;
  • При отсутствии или разрушении LDF файла — принудительно генерирует новый пустой журнал транзакций.

2. Пошаговый сценарий спасения базы

USE [master];
GO

-- 1. Переводим базу в Emergency и Single-User режим
ALTER DATABASE [ERP_1C] SET EMERGENCY;
GO
ALTER DATABASE [ERP_1C] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO

-- 2. Запуск деструктивного восстановления и пересоздания журнала транзакций
DBCC CHECKDB ([ERP_1C], REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS, ALL_ERRORMSGS;
GO

-- 3. Возврат в многопользовательский режим
ALTER DATABASE [ERP_1C] SET MULTI_USER;
GO

3. Пересоздание LDF принудительно через ATTACH_REBUILD_LOG

Если файл LDF полностью утерян, а MDF цел:

CREATE DATABASE [ERP_1C] ON 
( FILENAME = N'D:\Data\ERP_1C.mdf' )
FOR ATTACH_REBUILD_LOG;
GO

4. Обязательные действия после восстановления

После применения REPAIR_ALLOW_DATA_LOSS логическая целостность бизнес-логики нарушена. Выполните:

  1. Тестирование и исправление в конфигураторе 1С:Предприятие (ТИИ);
  2. Создание полного бэкапа (Full Backup), так как цепочка LSN была разорвана;
  3. Сверка ключевых балансовых отчетов и регистров.
💡 Практика специалистов: Всегда делайте побитовую копию поврежденного файла MDF перед запуском REPAIR_ALLOW_DATA_LOSS. Если процедура восстановления разрушит критическую системную страницу, у вас останется шанс обратиться к специализированным утилитам парсинга сырых страниц.

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

Гарантирует ли REPAIR_ALLOW_DATA_LOSS 100% восстановление базы?

Нет. Если повреждены критические метаданные (системные таблицы нижнего уровня ядра), команда завершится ошибкой. В этом случае единственным выходом будет извлечение уцелевших данных через BCP/SELECT в новую пустую базу.

Почему после исправления база находится в модели восстановления SIMPLE?

Принудительное пересоздание журнала транзакций и удаление страниц сбрасывает метаданные транзакций. SQL Server автоматически переводит базу в режим Simple. Необходимо вручную вернуть модель Full и сделать новый Full Backup.

Как минимизировать объем удаляемых строк при восстановлении?

Перед запуском CHECKDB попробуйте выгрузить максимальное количество таблиц в CSV/скрипты в режиме EMERGENCY через SELECT INTO или утилиту bcp.

Можно ли выполнить откат операции REPAIR_ALLOW_DATA_LOSS?

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

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