У нас есть группа доступности Always On с первичным и вторичным доступом с поддержкой чтения. У нас есть пользователь для команды внедрения, который использует базу данных для проверки правильности данных, которые они намереваются поместить в базу данных.
Пользователи имеют права только на чтение из базы данных, но когда они подключаются (через SSMS) через прослушиватель AG, они всегда подключаются к активному узлу.
Я пытался заставить их обращаться к экземпляру только для чтения напрямую, но они застряли на своем пути, и через день или два они снова вернулись на активный узел.
Есть ли способ для SQL Server сказать, что этот пользователь всегда будет с намерением только для чтения, и перенаправить его туда?
ПРИМЕЧАНИЕ. Я попытался установить «ApplicationIntent = ReadOnly» в дополнительных параметрах соединения, но, похоже, это не перенаправляет на вторичный узел и не является идеальным решением, поскольку они неизбежно забудут настроить его для новых стартеров.
SQL Server 2012 Enterprise, группа доступности 1 первичная, 1 читаемая вторичная с синхронной фиксацией.
Я не собираюсь подключать пользователя к связанному серверу или через любой другой сервер. Пользователи подключаются напрямую к базе данных через SSMS (никакое другое приложение), и я хотел бы, чтобы прослушиватель AG (или что-то еще там) мог направить этого пользователя на вторичный узел, если он доступен (поскольку он имеет только доступ для чтения там). нет никакого смысла в доступе к основному) без необходимости что-либо делать, поскольку пользователи перемещаются по машинам и забывают добавить намерение приложения. Также я считаю, что добавление к дополнительным параметрам подключения не всегда направляет вас на дополнительный узел.
Ответы:
У меня нет ответа на весь ваш вопрос (хотя я дал ответ на аналогичный вопрос сегодня https://dba.stackexchange.com/a/137844/36812 ), но вы упомянули, что использование ApplicationIntent = ReadOnly не работает должным образом.
Вы установили URL маршрутизации только для чтения? Потому что это не сделано из коробки, и если вы не сделаете это, эти настройки и этот флаг не будут работать. Я думаю, что если у вас это получится, вы можете начать переоценивать свои требования.
Инструкции для MSDN https://msdn.microsoft.com/en-us/library/hh710054.aspx и проще всего сделать в PowerShell.
источник
Ste, то, что вы хотите, это решение типа «укажи и щелкни» или параметр где-нибудь К сожалению, ни один из них в настоящее время не существует в готовом виде. Было бы очень хорошо, если бы Microsoft включила это в настройки подключения для Зарегистрированного сервера, чтобы его можно было сохранить, но, увы, нет.
Это оставляет вас с одним из двух вариантов:
Я наткнулся на загрузку Microsoft для SNAC - SQL Native Access Client, ища что-то, что могло бы удовлетворить ваши требования. Это позволит вам написать небольшой кусочек кода, чтобы дать пользователям кнопку для доступа непосредственно к вторичному устройству только для чтения. https://blogs.msdn.microsoft.com/alwaysonpro/2013/08/02/connect-to-sql-server-using-application-intent-read-only/
Другая возможность - заставить пользователей заполнять диалог параметров соединения при подключении через SSMS. Чтобы вызвать такое поведение, вам нужно изменить имена входа на первичном и вторичном серверах, запретив подключение к первичному серверу и разрешив подключение к вторичным. Вы можете использовать задание агента SQL для проверки состояния сервера и установки логинов соответственно.
Правда, я не пытался сделать последнее, но теоретически это должно работать.
источник
Похоже, что теперь это функция в SQL Server 2019.
От Перенаправления вторичной реплики к первичной реплике для чтения / записи (всегда в группах доступности) в официальной документации:
источник