Serveurs enregistrés SSMS avec intention d'application en lecture seule

10

Nous travaillons sur les tests POC de SQL Server 2014 avec AlwaysOn et l'un des utilisateurs a demandé comment enregistrer la configuration de SSMS avec ReadOnly Intent en utilisant les serveurs enregistrés dans le groupe de serveurs locaux. De cette façon, ils n'ont pas à taper le nom d'alias chaque fois qu'ils ont besoin d'accéder à la réplique en lecture seule .

Malheureusement, il n'y a pas d'option dans les serveurs enregistrés pour ajouter l'option ApplicationIntent contrairement à l'explorateur d'objets classique.

Je suis tombé sur cet article de Microsoft sur la modification de la chaîne de connexion dans RegSrvr.xml.

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

J'ai essayé leur suggestion et il ne s'est pas connecté au nœud de réplique droit lors de la connexion via le serveur local dans les serveurs enregistrés.

L' option Lecture seule fonctionne correctement à partir de l'explorateur d'objets lorsque vous utilisez les options de la fenêtre de connexion> Paramètres de connexion supplémentaires. Mais il n'enregistre pas les modifications apportées à la connexion.

Quelqu'un connaît-il d'autres solutions pour enregistrer les configurations avec la propriété ReadOnly Intent avec SSMS? Merci d'avance pour votre aide.

DBAuser
la source

Réponses:

3

SQL Management Studio (versions antérieures à 2016)

Malheureusement, certaines mises en garde rendent l'utilisation de l'intention d'application dans SQL Management Studio quelque peu pénible:

Pour vous connecter manuellement avec l'intention ReadOnly, après avoir ouvert la boîte de dialogue Se connecter au serveur à partir de l'Explorateur d'objets, les utilisateurs doivent se rappeler de:

  1. Cliquez sur Options >> .
  2. Accédez à l' onglet Paramètres de connexion supplémentaires .
  3. Entrez le paramètre supplémentaire comme ApplicationIntent = ReadOnly;
  4. (Remarque: les utilisateurs ne doivent pas cliquer sur le bouton Options << après avoir entré les paramètres de connexion supplémentaires, sinon les paramètres seront perdus.)
  5. Cliquez sur Connecter .
  6. Lancez toujours les fenêtres de requête en cliquant avec le bouton droit sur la base de données souhaitée dans la vue Explorateur d'objets et en choisissant Nouvelle requête pour éviter de rencontrer la mise en garde n ° 3 ci-dessous.

Les mises en garde qui s'appliquent sont les suivantes:

  1. Bien que vous puissiez faire en sorte que SQL Management Studio se connecte avec l'intention de lecture seule, il ne stocke pas les paramètres de connexion supplémentaires lorsqu'une connexion est ajoutée aux serveurs enregistrés.
  2. Le comportement lors de la modification manuelle des serveurs enregistrés localement dans le fichier RegSrvr.xml pour ajouter l'intention d'application est extrêmement incohérent et sera écrasé chaque fois qu'une modification est effectuée via l'interface graphique rendant cette solution de contournement peu fiable.
  3. La base de données Always On doit être sélectionnée avant l'ouverture de la fenêtre de requête; sinon, la connexion est routée vers le serveur principal. Si vous essayez de sélectionner la base de données à l'aide du menu déroulant de la fenêtre de requête après que la fenêtre de requête a déjà été ouverte sur une base de données non toujours active, vous obtiendrez une boîte de dialogue d'erreur. Si vous essayez de changer la base de données en une base de données Always On avec une instruction USE après que la fenêtre de requête a déjà été ouverte vers une base de données non Always On, les résultats ressemblent à ceci lorsque vous essayez d'exécuter la requête 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 (versions 2016 ou ultérieures)

SQL Server Management Studio 2016 ou supérieur peut se connecter avec l'intention d'application en lecture seule (en utilisant les mêmes 6 étapes que les versions précédentes) et il stocke les paramètres de connexion supplémentaires. Il y a encore quelques mises en garde:

  1. La vue Explorateur d'objets n'énumère aucune des tables ou autres objets dans les bases de données AlwaysOn. Tenter de les développer entraîne un message d'accès refusé.
  2. Vous ne pouvez pas avoir une connexion en lecture seule et non en lecture seule au même écouteur ouverte en même temps.
  3. Intellisense pour les noms d'objets dans la base de données ne fonctionne pas. (Curieusement, les objets sont énumérés très bien dans le Concepteur de requêtes que vous pouvez lancer à l'aide de Design Query dans l'éditeur ... à partir du menu contextuel.)
  4. La mise en garde 3 des mises en garde des versions précédentes s'applique toujours.

Produits tiers

LinqPad stocke la chaîne de connexion entière, y compris l'intention de l'application et la base de données lorsque vous enregistrez une connexion et peut donc être une option viable pour effectuer des requêtes en lecture seule sur les bases de données Always On.

JamieSee
la source
0

Vous manquez peut-être une partie importante du puzzle ou du moins je ne l'ai vu nulle part dans votre question:

ApplicationIntent=readonlyest la moitié de l'équation. Vous devez également transmettre le paramètre MultiSubnetFailover=True.

Par exemple, dans l'onglet Paramètres de connexion supplémentaires, vous souhaitez saisir les informations suivantes:

MultiSubnetFailover=True;ApplicationIntent=readonly;
Tony Castro
la source
Merci Tony, mais ce n'est pas le problème que j'ai.
DBAuser
0

Est-il possible que vous créiez un fichier de configuration et que vous créiez ensuite automatiquement les serveurs enregistrés nécessaires dans SSMS? Tout comme mentionné dans mon article MSSQLTips:

Automatiser l'enregistrement et la maintenance des serveurs dans SQL Server Management Studio (SSMS)

jyao
la source
Salut jyao, Merci pour ta réponse. Vous avez publié un script PowerShell intéressé dans cet article, mais ne fonctionne malheureusement pas avec la propriété ApplicationIntent. J'ai changé le PS pour utiliser ce qui suit: New-Item -Name $ (encode-sqlname $ g.value) -path "sqlserver: \ SQLRegistration \ $ ($ choice) \ $ ($ g.parentfolder)" -ItemType $ g .type -Value ("Server = $ regsrv; integrated security = true; Initial Catalog = dbname; ApplicationIntent = ReadOnly"); Pas de chance! Si cela fonctionnait, j'aurais plus qu'heureux de l'utiliser comme option. Merci encore.
DBAuser
0

Cela a été corrigé dans SQL 2016 SSMS lors de l'utilisation avec des serveurs enregistrés. J'ai pu enregistrer une connexion ReadOnly Intent dans le cadre du groupe de serveurs locaux et ouvrir la connexion enregistrée pour une utilisation future. Merci pour votre aide.

DBAuser
la source
0

Je ne peux pas commenter mais j'ajoute à la réponse de DBAUser.

Je ne pouvais pas voir une option pour ajouter l'intention d'application dans l'interface graphique lors de la configuration de la connexion dans la zone des serveurs enregistrés.

Je devais soit me connecter en utilisant l'explorateur d'objets (en utilisant Data Source=<Listener>;Initial Catalog=<Database>;ApplicationIntent=ReadOnly), puis enregistrer le serveur une fois que j'étais connecté.

Ou ajoutez Initial Catalog=<Database>;ApplicationIntent=ReadOnlyà la chaîne de connexion dans le fichier .regsrvr.

marclancy
la source
Vous devrez enregistrer le serveur readOnly dans l'explorateur d'objets afin de le voir comme faisant partie des groupes de serveurs locaux dans les serveurs enregistrés. Dans l'explorateur d'objets, Une fois que vous avez créé une connexion en lecture seule au serveur avec applicationintent, faites un clic droit sur le serveur et cliquez sur Enregistrer. Remplacez ensuite le nom de serveur enregistré par celui que vous souhaitez. Cela sera enregistré en tant que partie des serveurs locaux dans les serveurs enregistrés. J'espère que cela t'aides!
DBAuser