Zarejestrowane serwery SSMS z przeznaczeniem aplikacji ReadOnly

10

Pracujemy nad testami POC programu SQL Server 2014 z AlwaysOn i jeden z użytkowników zapytał o zapisanie konfiguracji SSMS z ReadOnly Intent przy użyciu zarejestrowanych serwerów w lokalnej grupie serwerów. W ten sposób nie muszą wpisywać nazwy aliasu za każdym razem, gdy muszą uzyskać dostęp do repliki ReadOnly .

Niestety w zarejestrowanych serwerach nie ma opcji dodania opcji ApplicationIntent w przeciwieństwie do zwykłego eksploratora obiektów.

Natknąłem się na ten artykuł od Microsoft o zmianie ciągu połączenia w RegSrvr.xml.

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

Próbowałem ich sugestii i nie łączyło się ono z właściwym węzłem repliki podczas łączenia przez serwer lokalny na zarejestrowanych serwerach.

Opcja ReadOnly działa dobrze z eksploratora obiektów, gdy używasz opcji w oknie połączenia> Dodatkowe parametry połączenia. Ale nie zapisuje zmian dokonanych w połączeniu.

Czy ktoś zna jakieś alternatywne rozwiązania dotyczące zapisywania konfiguracji za pomocą właściwości ReadOnly Intent za pomocą SSMS? Z góry dziękuje za twoją pomoc.

DBAuser
źródło

Odpowiedzi:

3

SQL Management Studio (wersje przed 2016)

Niestety istnieją pewne zastrzeżenia, które sprawiają, że korzystanie z aplikacji Intent w SQL Management Studio jest nieco bolesne:

Aby połączyć się ręcznie z intencją ReadOnly, po otwarciu okna dialogowego Połącz z serwerem z Eksploratora obiektów, użytkownicy muszą pamiętać:

  1. Kliknij Opcje >> .
  2. Przejdź do zakładki Dodatkowe parametry połączenia .
  3. Wprowadź dodatkowy parametr jako ApplicationIntent = ReadOnly;
  4. (Uwaga: użytkownicy nie mogą klikać przycisku Opcje << po wprowadzeniu dodatkowych parametrów połączenia, w przeciwnym razie parametry zostaną utracone).
  5. Kliknij Połącz .
  6. Zawsze uruchamiaj okna zapytań, klikając prawym przyciskiem myszy żądaną bazę danych w widoku Eksploratora obiektów i wybierając Nowe zapytanie, aby uniknąć uruchamiania się z zastrzeżeniem nr 3 poniżej.

Zastrzeżenia, które mają zastosowanie, są następujące:

  1. Mimo że SQL Management Studio może połączyć się z intencją tylko do odczytu, nie zapisuje dodatkowych parametrów połączenia, gdy połączenie zostanie dodane do zarejestrowanych serwerów.
  2. Zachowanie podczas ręcznej edycji lokalnie zarejestrowanych serwerów w pliku RegSrvr.xml w celu dodania zamiaru aplikacji jest wyjątkowo niespójne i zostanie zastąpione za każdym razem, gdy zostanie wprowadzona zmiana w interfejsie GUI, co spowoduje, że to obejście będzie niewiarygodne.
  3. Baza danych Always On musi zostać wybrana przed otwarciem okna zapytania; w przeciwnym razie połączenie zostanie przekierowane do serwera głównego. Jeśli spróbujesz wybrać bazę danych za pomocą menu rozwijanego okna zapytania, po tym jak okno zapytania zostało już otwarte dla bazy danych nie zawsze włączonej, pojawi się okno dialogowe błędu. Jeśli spróbujesz zmienić bazę danych na bazę danych Always On z instrukcją USE po otwarciu okna zapytania na bazę danych Always On, wyniki będą wyglądać następująco podczas próby wykonania zapytania 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 (wersje 2016 lub nowsza)

SQL Server Management Studio 2016 lub nowszy może łączyć się z intencją aplikacji tylko do odczytu (wykonując te same 6 kroków, co poprzednie wersje) i przechowuje dodatkowe parametry połączenia. Wciąż są pewne zastrzeżenia:

  1. Widok Eksploratora obiektów nie będzie wyliczał żadnych tabel ani innych obiektów w bazach danych AlwaysOn. Próba ich rozszerzenia powoduje wyświetlenie komunikatu o odmowie dostępu.
  2. Nie można mieć połączenia Tylko do odczytu i połączenia nie tylko do tego samego odbiornika otwartego w tym samym czasie.
  3. Intellisense dla nazw obiektów w bazie danych nie działa. (Co dziwne, obiekty są dobrze wyliczane w Projektancie zapytań, które można uruchomić za pomocą Design Query w Edytorze ... z menu po kliknięciu prawym przyciskiem myszy.)
  4. Zastrzeżenie 3 z wcześniejszych wersji nadal obowiązuje.

Produkty innych firm

LinqPad przechowuje cały ciąg połączenia, w tym Intent aplikacji i bazę danych podczas zapisywania połączenia, i dlatego może być wykonalną opcją do wykonywania zapytań tylko do odczytu w bazach danych Always On.

JamieSee
źródło
0

Być może brakuje ci ważnej części układanki lub przynajmniej nie widziałem jej nigdzie w twoim pytaniu:

ApplicationIntent=readonlyjest połową równania. Musisz także przekazać parametr MultiSubnetFailover=True.

Na przykład na karcie Dodatkowe parametry połączenia chcesz wprowadzić następujące dane:

MultiSubnetFailover=True;ApplicationIntent=readonly;
Tony Castro
źródło
Dzięki Tony, ale nie o to chodzi.
DBAuser,
0

Czy to możliwe, że utworzysz plik konfiguracyjny, a następnie automatycznie utworzysz niezbędne zarejestrowane serwery w SSMS? Tak jak wspomniano w moim artykule MSSQLTips:

Automatyzacja rejestracji i obsługi serwerów w SQL Server Management Studio (SSMS)

jyao
źródło
Cześć jyao, dziękuję za odpowiedź. W tym artykule opublikowałeś zainteresowany skrypt PowerShell, ale niestety nie działa on z właściwością ApplicationIntent. Zmieniłem PS, aby użyć następujących elementów: New-Item -Name $ (encode-sqlname $ g.value) -path "sqlserver: \ SQLRegistration \ $ ($ choice) \ $ ($ g.parentfolder)" -ItemType $ g .type -Value ("Server = $ regsrv; zintegrowane zabezpieczenia = true; katalog początkowy = dbname; ApplicationIntent = tylko do odczytu"); Brak szczęścia! Jeśli to zadziała, z przyjemnością skorzystam z tej opcji. Dzięki jeszcze raz.
DBAuser
0

Zostało to naprawione w SQL 2016 SSMS podczas korzystania z zarejestrowanych serwerów. Udało mi się zarejestrować połączenie ReadOnly Intent jako część lokalnej grupy serwerów i otworzyć zapisane połączenie do wykorzystania w przyszłości. Dzięki za pomoc w tym.

DBAuser
źródło
0

Nie mogę komentować, ale dodaję do odpowiedzi DBAUser.

Podczas konfigurowania połączenia w obszarze zarejestrowanych serwerów nie widziałem opcji dodania zamiaru aplikacji w GUI.

Musiałem albo połączyć się za pomocą eksploratora obiektów (używając Data Source=<Listener>;Initial Catalog=<Database>;ApplicationIntent=ReadOnly), a następnie zarejestrować serwer, gdy tylko się połączyłem.

Lub dodaj Initial Catalog=<Database>;ApplicationIntent=ReadOnlydo ciągu połączenia w pliku .regsrvr.

marclancy
źródło
Musisz zarejestrować serwer readOnly w eksploratorze obiektów, aby widzieć go jako część lokalnych grup serwerów na zarejestrowanych serwerach. W eksploratorze obiektów Po utworzeniu połączenia readOnly z serwerem za pomocą applicationintent kliknij prawym przyciskiem myszy serwer i kliknij polecenie Zarejestruj. Następnie zmień zarejestrowaną nazwę serwera na taką, którą chcesz. Zostanie to zapisane jako część serwerów lokalnych na zarejestrowanych serwerach. Mam nadzieję że to pomoże!
DBAuser