MSSQL Error 19421: Availability group failed to transition to requested role — Решение
- Сообщение в 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; Частые вопросы (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 могут заблокировать перевод базы данных в консистентный статус при смене роли.