Время от времени мы должны размещать базу данных на узле А в
ограниченный режим для применения обновлений или исправлений, это, в свою очередь, устанавливает
база данных на узле B в ограниченном режиме, вызывая клиентов
сообщает об ошибке
Это звучит как дизайн базы данных, где вы можете установить флаг для блокировки пользователей из базы данных. Эта транзакция DML естественно будет копироваться на вторичную. Для таких вещей, как задания агента SQL, вы можете условно выполнить задание, если оно является или не является первичной репликой, с помощью sys.fn_hadr_is_paimary_replica
, но это не сработает для условного выполнения чего-то вроде оператора UPDATE
.
Можно ли установить базы данных узла А только в ограниченном режиме,
оставляя узел B доступным для клиентов только для чтения
доступ
Да. В идеале вы просто запустите это:
ALTER DATABASE [your_database]
SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
Но тогда вы получите сообщение об ошибке:
Операция не может быть выполнена в базе данных "your_database", потому что
он участвует в сеансе зеркального отображения базы данных или доступности
группа. Некоторые операции не разрешены в базе данных, которая
участие в сеансе зеркального отображения базы данных или в доступности
группа.
Таким образом, некоторые опции:
- Удалите вторичное устройство из AG, примените исправления, прочитайте вторичное устройство и подождите, пока оно не догонит
- Восстановите еще одну копию БД на сервере, которую ваши клиенты будут использовать во время простоя