Зарегистрированные серверы SSMS с намерением приложения ReadOnly


10

Мы работаем над POC-тестированием SQL Server 2014 с AlwaysOn, и один из пользователей спросил о сохранении конфигурации SSMS с ReadOnly Intent с использованием зарегистрированных серверов в группе локальных серверов. Таким образом, им не нужно вводить псевдоним каждый раз, когда им требуется доступ к реплике ReadOnly .

К сожалению, на зарегистрированных серверах нет возможности добавить опцию ApplicationIntent в отличие от обычного проводника объектов.

Я натолкнулся на эту статью от Microsoft об изменении строки подключения в RegSrvr.xml.

https://connect.microsoft.com/SQLServer/feedback/details/786323/ssms-sql-server-management-studio-2012-missing-connection-properties-for-availability-groups

Я попробовал их предложение, и он не подключился к нужному узлу реплики при подключении через локальный сервер на зарегистрированных серверах.

Опция ReadOnly отлично работает в обозревателе объектов при использовании параметров в окне подключения> Дополнительные параметры подключения. Но это не сохраняет изменения, внесенные в соединение.

Кто-нибудь знает какие-либо альтернативные решения по сохранению конфигураций со свойством ReadOnly Intent в SSMS? Заранее спасибо за помощь.

Ответы:


3

SQL Management Studio (версии до 2016 года)

К сожалению, есть некоторые предостережения, которые делают использование Application Intent в SQL Management Studio несколько болезненным:

Для подключения вручную с намерением ReadOnly после вызова диалогового окна « Подключиться к серверу » из обозревателя объектов пользователи должны не забыть:

  1. Нажмите Опции >> .
  2. Перейдите на вкладку « Дополнительные параметры подключения ».
  3. Введите дополнительный параметр как ApplicationIntent = ReadOnly;
  4. (Примечание. Пользователи не должны нажимать кнопку « Параметры <<» после ввода дополнительных параметров подключения, иначе параметры будут потеряны.)
  5. Нажмите Подключиться .
  6. Всегда запускайте окна запросов, щелкая правой кнопкой мыши нужную базу данных в представлении « Обозреватель объектов» и выбирая « Новый запрос», чтобы избежать появления замечания № 3 ниже.

Применяются следующие предостережения:

  1. Несмотря на то, что вы можете заставить SQL Management Studio подключаться с намерением только для чтения, он не сохраняет дополнительные параметры подключения при добавлении подключения к зарегистрированным серверам.
  2. Поведение при ручном редактировании локально зарегистрированных серверов в файле RegSrvr.xml для добавления намерения приложения крайне противоречиво и будет перезаписываться каждый раз, когда изменение вносится через графический интерфейс пользователя, что делает этот обходной путь ненадежным.
  3. База данных Always On должна быть выбрана до открытия окна запроса; в противном случае соединение направляется на основной сервер. Если вы попытаетесь выбрать базу данных, используя раскрывающееся окно запроса после того, как окно запроса уже открыто для базы данных, которая не всегда включена, вы получите диалоговое окно с сообщением об ошибке. Если вы попытаетесь изменить базу данных на базу данных Always On с оператором USE после того, как окно запроса уже открыто для базы данных, отличной от Always On, результаты будут выглядеть следующим образом при попытке выполнить запрос SQL:
      Msg 979, Level 14, State 1, Line 1
      The target database ('AlwaysOnDatabase') is in an availability group 
      and currently does not allow read only connections. For more 
      information about application intent, see SQL Server Books Online.

SQL Management Studio (версии 2016 или выше)

SQL Server Management Studio 2016 или более поздней версии может подключаться с намерением приложения «Только чтение» (используя те же 6 шагов, что и в предыдущих версиях), и в нем хранятся Дополнительные параметры подключения. Есть еще несколько предостережений:

  1. Представление обозревателя объектов не будет перечислять какие-либо таблицы или другие объекты в базах данных AlwaysOn. Попытка расширить их приводит к сообщению об отказе в доступе.
  2. Вы не можете одновременно открыть доступ только для чтения и не только для чтения к одному и тому же слушателю.
  3. Intellisense для имен объектов в базе данных не работает. (Как ни странно, Объекты очень хорошо перечисляются в Конструкторе запросов, который можно запустить с помощью Дизайнерского запроса в Редакторе ... из контекстного меню.)
  4. Предостережение 3 из предыдущих версий предостережения все еще применяется.

Сторонние продукты

При сохранении соединения LinqPad сохраняет всю строку подключения, включая Application Intent и базу данных, и поэтому может быть приемлемым вариантом для выполнения запросов только для чтения к базам данных Always On.


0

Возможно, вы упускаете важную часть головоломки или, по крайней мере, я не видел ее нигде в вашем вопросе:

ApplicationIntent=readonlyэто половина уравнения. Вам также необходимо передать параметр MultiSubnetFailover=True.

Например, на вкладке Дополнительные параметры подключения вы хотите ввести следующее:

MultiSubnetFailover=True;ApplicationIntent=readonly;

Спасибо Тони, но это не та проблема, которая у меня возникла.
DBAuser

0

Вы пробовали скрипт PowerShell, но использовали другое написание (с пробелом) для намерения приложения? Или я перепутал методы подключения?

Server=$regsrv ; integrated security=true;Initial Catalog=dbname;
Application Intent=ReadOnly"); 

Подключение к SQL Server с использованием намерения приложения только для чтения


0

Возможно ли создать файл конфигурации, а затем автоматически создать необходимые зарегистрированные серверы в SSMS? Как упоминалось в моей статье MSSQLTips:

Автоматизация регистрации и обслуживания серверов в SQL Server Management Studio (SSMS)


Привет Цзяо, Спасибо за ваш ответ. В этой статье вы опубликовали заинтересованный скрипт powershell, но, к сожалению, он не работает со свойством ApplicationIntent. Я изменил PS, чтобы использовать следующее: New-Item -Name $ (encode-sqlname $ g.value) -path "sqlserver: \ SQLRegistration \ $ ($ choice) \ $ ($ g.parentfolder)" -ItemType $ g .type -Value ("Сервер = $ regsrv; встроенная безопасность = true; Исходный каталог = имя_базы; ApplicationIntent = ReadOnly"); Неудачно! Если бы это сработало, я был бы более чем счастлив использовать это в качестве опции. Еще раз спасибо.
DBAuser

0

Это было исправлено в SQL 2016 SSMS при использовании с зарегистрированными серверами. Мне удалось зарегистрировать соединение ReadOnly Intent как часть группы локальных серверов и открыть сохраненное соединение для будущего использования. Спасибо за помощь с этим.


0

Я не могу комментировать, но добавляю в ответ DBAUser.

Я не увидел опции для добавления Application Intent в GUI при настройке соединения в области зарегистрированных серверов.

Мне нужно было либо подключиться с помощью обозревателя объектов (с помощью Data Source=<Listener>;Initial Catalog=<Database>;ApplicationIntent=ReadOnly), а затем зарегистрировать сервер, как только я подключился.

Или добавьте Initial Catalog=<Database>;ApplicationIntent=ReadOnlyв строку подключения в файле .regsrvr.


Вам необходимо зарегистрировать сервер readOnly в обозревателе объектов, чтобы рассматривать это как часть локальных групп серверов на зарегистрированных серверах. В обозревателе объектов, как только вы создадите соединение readOnly с сервером с applicationintent, щелкните правой кнопкой мыши на сервере и выберите «Регистрация». Затем измените зарегистрированное имя сервера на то, которое вы хотите. Это будет сохранено как часть локальных серверов на зарегистрированных серверах. Надеюсь это поможет!
DBAuser
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.