SSMS-registrierte Server mit ReadOnly-Anwendungsabsicht


10

Wir arbeiten an SQL Server 2014 POC - Tests mit AlwaysOn und einer der Benutzer aufgefordert , über die Konfiguration von SSMS mit dem Speichern von Readonly Intent die registrierten Server in der lokalen Servergruppe verwenden. Auf diese Weise müssen sie nicht jedes Mal den Aliasnamen eingeben, wenn sie auf das ReadOnly- Replikat zugreifen müssen .

Leider gibt es auf registrierten Servern keine Option zum Hinzufügen der ApplicationIntent-Option im Gegensatz zum regulären Objektexplorer.

Ich bin auf diesen Artikel von Microsoft über das Ändern der Verbindungszeichenfolge in RegSrvr.xml gestoßen.

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

Ich habe ihren Vorschlag ausprobiert und es wurde keine Verbindung zum richtigen Replikatknoten hergestellt, wenn eine Verbindung über den lokalen Server auf den registrierten Servern hergestellt wurde.

Die ReadOnly- Option funktioniert im Objekt-Explorer einwandfrei, wenn Sie die Optionen im Verbindungsfenster> Zusätzliche Verbindungsparameter verwenden. Die an der Verbindung vorgenommenen Änderungen werden jedoch nicht gespeichert.

Kennt jemand alternative Lösungen zum Speichern der Konfigurationen mit der ReadOnly Intent-Eigenschaft mit SSMS? Vielen Dank im Voraus für Ihre Hilfe.

Antworten:


3

SQL Management Studio (Versionen vor 2016)

Leider gibt es einige Einschränkungen, die die Verwendung von Application Intent in SQL Management Studio etwas schmerzhaft machen:

Um eine manuelle Verbindung mit ReadOnly-Absicht herzustellen , müssen Benutzer nach dem Aufrufen des Dialogfelds "Mit Server verbinden " im Objekt-Explorer Folgendes beachten:

  1. Klicken Sie auf Optionen >> .
  2. Wechseln Sie zur Registerkarte Zusätzliche Verbindungsparameter .
  3. Geben Sie den zusätzlichen Parameter als ApplicationIntent = ReadOnly ein.
  4. (Hinweis: Benutzer dürfen nach Eingabe der zusätzlichen Verbindungsparameter nicht auf die Schaltfläche Optionen << klicken, da sonst die Parameter verloren gehen.)
  5. Klicken Sie auf Verbinden .
  6. Starten Sie Abfragefenster immer, indem Sie in der Objekt-Explorer- Ansicht mit der rechten Maustaste auf die gewünschte Datenbank klicken und Neue Abfrage auswählen , um zu vermeiden, dass Sie auf die Einschränkung Nr. 3 unten stoßen.

Folgende Einschränkungen gelten:

  1. Obwohl Sie SQL Management Studio dazu bringen können, eine Verbindung mit Read Only Intent herzustellen, werden die zusätzlichen Verbindungsparameter nicht gespeichert, wenn eine Verbindung zu registrierten Servern hinzugefügt wird.
  2. Das Verhalten beim manuellen Bearbeiten der lokal registrierten Server in der Datei RegSrvr.xml zum Hinzufügen der Anwendungsabsicht ist äußerst inkonsistent und wird jedes Mal überschrieben, wenn eine Änderung über die GUI vorgenommen wird, wodurch diese Problemumgehung unzuverlässig wird.
  3. Die Always On-Datenbank muss ausgewählt sein, bevor das Abfragefenster geöffnet wird. Andernfalls wird die Verbindung zum Primärserver weitergeleitet. Wenn Sie versuchen, die Datenbank mithilfe der Dropdown-Liste des Abfragefensters auszuwählen, nachdem das Abfragefenster bereits für eine Datenbank geöffnet wurde, die nicht immer aktiv ist, wird ein Fehlerdialogfeld angezeigt. Wenn Sie versuchen, die Datenbank mit einer USE-Anweisung in eine Always On-Datenbank zu ändern, nachdem das Abfragefenster bereits für eine Nicht-Always On-Datenbank geöffnet wurde, sehen die Ergebnisse folgendermaßen aus, wenn Sie versuchen, die SQL-Abfrage auszuführen:
      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 (Versionen 2016 oder höher)

SQL Server Management Studio 2016 oder höher kann eine Verbindung mit schreibgeschützter Anwendungsabsicht herstellen (mit denselben 6 Schritten wie in früheren Versionen) und speichert die zusätzlichen Verbindungsparameter. Es gibt noch einige Einschränkungen:

  1. In der Objekt-Explorer-Ansicht werden keine Tabellen oder anderen Objekte in den AlwaysOn-Datenbanken aufgelistet. Der Versuch, sie zu erweitern, führt zu einer Nachricht, dass der Zugriff verweigert wurde.
  2. Sie können nicht gleichzeitig eine schreibgeschützte und eine nicht schreibgeschützte Verbindung zum selben Listener herstellen.
  3. Intellisense für Objektnamen in der Datenbank funktioniert nicht. (Seltsamerweise werden Objekte im Abfrage-Designer einwandfrei aufgelistet, die Sie mit der Entwurfsabfrage im Editor ... über das Kontextmenü starten können .)
  4. Vorbehalt 3 aus den Vorbehalten der Vorgängerversionen gilt weiterhin.

Produkte von Drittanbietern

LinqPad speichert die gesamte Verbindungszeichenfolge einschließlich Application Intent und der Datenbank, wenn Sie eine Verbindung speichern, und ist daher möglicherweise eine praktikable Option für schreibgeschützte Abfragen für Always On-Datenbanken.


0

Möglicherweise fehlt Ihnen ein wichtiger Teil des Puzzles, oder zumindest habe ich ihn in Ihrer Frage nirgends gesehen:

ApplicationIntent=readonlyist eine Hälfte der Gleichung. Sie müssen auch den Parameter übergeben MultiSubnetFailover=True.

Auf der Registerkarte Zusätzliche Verbindungsparameter möchten Sie beispielsweise Folgendes eingeben:

MultiSubnetFailover=True;ApplicationIntent=readonly;

Danke Tony, aber das ist nicht das Problem, das ich habe.
DBAuser


0

Ist es möglich, dass Sie eine Konfigurationsdatei erstellen und dann automatisch die erforderlichen registrierten Server in SSMS erstellen? Genau wie in meinem MSSQLTips-Artikel erwähnt:

Automatisieren der Registrierung und Wartung von Servern in SQL Server Management Studio (SSMS)


Hallo jyao, danke für deine Antwort. Sie haben in diesem Artikel ein interessiertes Powershell-Skript veröffentlicht, funktionieren jedoch leider nicht mit der ApplicationIntent-Eigenschaft. Ich habe die PS so geändert, dass sie Folgendes verwendet: New-Item -Name $ (encode-sqlname $ g.value) -Pfad "sqlserver: \ SQLRegistration \ $ ($ choice) \ $ ($ g.parentfolder)" -ItemType $ g .type -Value ("Server = $ regsrv; integrierte Sicherheit = true; Anfangskatalog = Datenbankname; ApplicationIntent = ReadOnly"); Kein Glück! Wenn dies funktionieren würde, würde ich dies gerne als Option verwenden. Danke noch einmal.
DBAuser

0

Dies wurde in SQL 2016 SSMS bei Verwendung mit registrierten Servern behoben. Ich konnte eine ReadOnly Intent-Verbindung als Teil der lokalen Servergruppe registrieren und die gespeicherte Verbindung für die zukünftige Verwendung öffnen. Danke für die Hilfe dabei.


0

Ich kann keinen Kommentar abgeben, füge aber die Antwort von DBAUser hinzu.

Beim Einrichten der Verbindung im Bereich der registrierten Server konnte keine Option zum Hinzufügen von Application Intent in der GUI angezeigt werden.

Ich musste entweder eine Verbindung mit dem Objekt-Explorer (mit Data Source=<Listener>;Initial Catalog=<Database>;ApplicationIntent=ReadOnly) herstellen und dann den Server registrieren, sobald ich verbunden war.

Oder fügen Sie Initial Catalog=<Database>;ApplicationIntent=ReadOnlyder Verbindungszeichenfolge in der .regsrvr-Datei hinzu.


Sie müssen den readOnly-Server im Objektexplorer registrieren, um dies als Teil der lokalen Servergruppen auf den registrierten Servern zu sehen. Klicken Sie im Objektexplorer nach dem Erstellen einer readOnly-Verbindung zum Server mit applicationintent mit der rechten Maustaste auf den Server und dann auf Registrieren. Ändern Sie dann den registrierten Servernamen in den gewünschten. Dies wird als Teil der lokalen Server auf den registrierten Servern gespeichert. Hoffe das hilft!
DBAuser
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.