Зареєстровані сервери 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-available-groups

Я спробував їхню пропозицію, і він не підключився до правильного вузла репліку при підключенні через локальний сервер на зареєстрованих серверах.

Опція ReadOnly прекрасно працює від провідника об'єктів при використанні параметрів у вікні підключення> Додаткові параметри підключення. Але це не економить зміни, внесені до з'єднання.

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

Відповіді:


3

Студія управління SQL (версії до 2016 року)

На жаль, є деякі застереження, які роблять використання намірів програми в студії управління SQL дещо болісно:

Щоб підключитися вручну з наміром ReadOnly, після відкриття діалогового вікна Підключення до сервера з Провідника об’єктів користувачі повинні пам’ятати про:

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

Застереження, що застосовуються, такі:

  1. Хоча ви можете змусити SQL Management Studio підключитися до Інтенції лише для читання, вона не зберігає додаткові параметри з'єднання, коли з'єднання додається до зареєстрованих серверів.
  2. Поведінка при ручному редагуванні локально зареєстрованих серверів у файлі RegSrvr.xml для додавання наміру програми є надзвичайно непослідовною і буде перезаписана щоразу, коли зміни, зроблені через графічний інтерфейс, роблять цю проблему ненадійною.
  3. База даних Always On повинна бути обрана до відкриття вікна запиту; в іншому випадку з'єднання перенаправляється на основний сервер. Якщо ви спробуєте вибрати базу даних за допомогою випадаючого вікна запиту після того, як вікно запиту вже було відкрито до бази даних, яка не працює завжди, ви отримаєте діалогове вікно помилок. Якщо ви спробуєте змінити базу даних на базу даних Always On з оператором USE після того, як вікно запиту вже відкрито до бази даних, яка не є завжди, результати виглядають приблизно так, коли ви намагаєтесь виконати запит 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 (версії 2016 або новішої версії)

SQL Server Management Studio 2016 або новішої версії може підключатися до Інтенції програми лише для читання (використовуючи ті ж 6 кроків, що і попередні версії), і вона зберігає додаткові параметри підключення. Є ще деякі застереження:

  1. Перегляд Object Explorer не перераховує жодну з таблиць або інших об'єктів у базах даних AlwaysOn. Спроба розширити їх призводить до повідомлення про заборону доступу.
  2. Ви не можете одночасно відкривати підключення лише для читання та лише для читання до одного слухача.
  3. Intellisense для імен об'єктів у базі даних не працює. (Як не дивно, об'єкти просто перераховуються в конструкторі запитів, який можна запустити за допомогою дизайнерського запиту в редакторі ... з меню правої кнопки.)
  4. Застереження 3 із попередніх версій досі застосовуються.

Сторонні товари

LinqPad зберігає всю рядок з'єднання, включаючи Намір додатків та базу даних, коли ви зберігаєте з'єднання, і тому це може бути життєздатним варіантом для виконання запитів лише для читання проти баз даних 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 (SSMS)


Привіт jyao, дякую за вашу відповідь. У цій статті ви розмістили зацікавлений скрипт повноважень, але, на жаль, не працює з властивістю ApplicationIntent. Я змінив PS на використання наступного: New-Item -Name $ (encode-sqlname $ g.value) -ath "sqlserver: \ SQLRegistration \ $ ($ choice) \ $ ($ g.parentfolder)" -ItemType $ g .type -Value ("Сервер = $ regsrv; інтегрована безпека = вірно; Початковий каталог = dbname; ApplicationIntent = ReadOnly"); Не вдалося! Якби це спрацювало, я б більше ніж радий використати це як варіант. Знову дякую.
DBAuser

0

Це було зафіксовано в SQL 2016 SSMS при використанні з зареєстрованими серверами. Мені вдалося зареєструвати з'єднання ReadOnly Intent як частину локальної групи серверів та відкрити збережене з'єднання для подальшого використання. Дякуємо за допомогу в цьому.


0

Я не можу коментувати, але додаю відповідь DBAUser.

Не вдалося побачити можливість додавання намірів програми в графічний інтерфейс під час налаштування з'єднання в межах зареєстрованої області серверів.

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

Або додати Initial Catalog=<Database>;ApplicationIntent=ReadOnlyдо рядка з'єднання у файлі .regsrvr.


Вам потрібно буде зареєструвати сервер readOnly в провіднику об'єктів, щоб побачити це як частину локальних груп серверів на зареєстрованих серверах. У провіднику об'єктів, щойно ви створюєте з'єднання для читання на сервері із застосуванням програми, клацніть правою кнопкою миші на сервері та натисніть кнопку Реєстрація. Потім змініть ім’я зареєстрованого сервера на те, яке вам потрібно. Це буде збережено як частина локальних серверів на зареєстрованих серверах. Сподіваюся, це допомагає!
DBAuser
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.