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

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

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

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

MSSQL Error 19421: Availability group failed to transition to requested role — Решение

Обновлено: 25.08.2026 · Официальная документация ↗
  • Сообщение в Errorlog: Availability group 'AG_1C' has failed to transition to the requested role (Target role: 1 / 2). Error code: 0x...
  • База данных 1С переходит в статус Not Synchronizing, Recovery Pending или Suspect.
  • Сбой планового или аварийного переключения (Failover) между узлами.
  • Пользователи 1С не могут начать работу из-за недоступности основной реплики.

1. Проверка текущих состояний реплик и баз данных

-- Детальный статус реплик Always On
SELECT 
    ag.name AS ag_name,
    ar.replica_server_name,
    drs.database_id,
    DB_NAME(drs.database_id) AS database_name,
    drs.synchronization_state_desc,
    drs.synchronization_health_desc,
    drs.database_state_desc
FROM sys.dm_hadr_database_replica_states drs
JOIN sys.availability_replicas ar ON drs.replica_id = ar.replica_id
JOIN sys.availability_groups ag ON ar.group_id = ag.group_id;

2. Проверка блокировок фазы Recovery (Undo/Redo)

Если на вторичной реплике скопилась огромная очередь повтора (Redo Queue) от тяжелых транзакций 1С, перевод в роль Primary будет заблокирован до завершения наката логов:

SELECT 
    database_name,
    redo_queue_size,
    redo_rate,
    (redo_queue_size / NULLIF(redo_rate, 0)) AS est_redo_completion_seconds
FROM sys.dm_hadr_database_replica_states
WHERE is_local = 1;

3. Принудительный перевод роли при аварии (Force Failover with Data Loss)

Если основной узел потерян, а автоматический переход не удался:

-- Выполняется строго на вторичной реплике при аварии
ALTER AVAILABILITY GROUP [AG_1C] FORCE_FAILOVER_ALLOW_DATA_LOSS;

4. Возобновление синхронизации после сбоя перехода

-- Возобновление передачи данных для конкретной базы 1С
ALTER DATABASE [buh_1c] SET HADR RESUME;
💡 Практика специалистов: Перед проведением планового переключения Always On с базой 1С обязательно убедитесь, что redo_queue_size равен нулю, и временно остановите регламентные фоновые задания в консоли 1С.

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

Что означают коды целевых ролей (Target Role: 1 / 2)?

Role 1 соответствует роли Primary (основная реплика), Role 2 — роли Secondary (вторичная реплика).

Почему большая очередь Redo блокирует переключение на Primary?

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

Как ускорить процесс Redo для баз 1С?

Начиная с SQL Server 2016 доступен параллельный накат (Parallel Redo). Убедитесь, что вторичный сервер обладает достаточным количеством процессорных ядер и быстрым диском под ldf.

Могут ли зависшие распределенные транзакции (MSDTC) вызвать ошибку 19421?

Да, незавершенные распределенные транзакции в состоянии In-Doubt могут заблокировать перевод базы данных в консистентный статус при смене роли.

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