Server registrati SSMS con intento applicazione ReadOnly


10

Stiamo lavorando al test POC di SQL Server 2014 con AlwaysOn e uno degli utenti ha chiesto di salvare la configurazione di SSMS con ReadOnly Intent utilizzando i server registrati nel gruppo di server locali. In questo modo non devono digitare il nome alias ogni volta che devono accedere alla replica ReadOnly .

Sfortunatamente non esiste alcuna opzione nei server registrati per aggiungere l'opzione ApplicationIntent a differenza del normale Esplora oggetti.

Mi sono imbattuto in questo articolo di Microsoft sulla modifica della stringa di connessione in RegSrvr.xml.

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

Ho provato il loro suggerimento e non si è collegato al nodo di replica corretto durante la connessione tramite il server locale nei server registrati.

L' opzione ReadOnly funziona perfettamente da Esplora oggetti quando si utilizzano le opzioni nella finestra di connessione> Parametri di connessione aggiuntivi. Ma non salva le modifiche apportate alla connessione.

Qualcuno è a conoscenza di soluzioni alternative per il salvataggio delle configurazioni con proprietà ReadOnly Intent con SSMS? Grazie in anticipo per il vostro aiuto.

Risposte:


3

SQL Management Studio (versioni precedenti al 2016)

Sfortunatamente, ci sono alcuni avvertimenti che rendono un po 'doloroso l'utilizzo di Application Intent in SQL Management Studio:

Per connettersi manualmente con intento ReadOnly, dopo aver visualizzato la finestra di dialogo Connetti al server da Esplora oggetti, gli utenti devono ricordare di:

  1. Fai clic su Opzioni >> .
  2. Vai alla scheda Parametri di connessione aggiuntivi .
  3. Immettere il parametro aggiuntivo come ApplicationIntent = ReadOnly;
  4. (Nota: gli utenti non devono fare clic sul pulsante Opzioni << dopo aver inserito i Parametri di connessione aggiuntivi o i parametri andranno persi.)
  5. Fai clic su Connetti .
  6. Avviare sempre le finestre delle query facendo clic con il pulsante destro del mouse sul database desiderato nella vista Esplora oggetti e scegliendo Nuova query per evitare di imbattersi nell'avvertimento n. 3 di seguito.

Le avvertenze che si applicano sono le seguenti:

  1. Sebbene sia possibile far sì che SQL Management Studio si connetta con Intento di sola lettura, non memorizza i parametri di connessione aggiuntivi quando viene aggiunta una connessione ai server registrati.
  2. Il comportamento durante la modifica manuale dei server registrati localmente nel file RegSrvr.xml per aggiungere l'intento dell'applicazione è estremamente incoerente e verrà sovrascritto ogni volta che viene apportata una modifica tramite la GUI che rende questa soluzione alternativa inaffidabile.
  3. Il database Always On deve essere selezionato prima di aprire la finestra della query; in caso contrario, la connessione viene instradata al server primario. Se si tenta di selezionare il database utilizzando il menu a discesa della finestra della query dopo che la finestra della query è già stata aperta a un database non sempre attivo, verrà visualizzata una finestra di dialogo di errore. Se si tenta di modificare il database in un database Always On con un'istruzione USE dopo che la finestra della query è già stata aperta in un database non Always On, i risultati si presentano così quando si tenta di eseguire la query 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 (versioni 2016 o successive)

SQL Server Management Studio 2016 o versione successiva può connettersi con Intento applicazione di sola lettura (utilizzando gli stessi 6 passaggi delle versioni precedenti) e memorizza i parametri di connessione aggiuntivi. Ci sono ancora alcuni avvertimenti:

  1. La vista Esplora oggetti non enumera nessuna delle tabelle o altri oggetti nei database AlwaysOn. Il tentativo di espanderli provoca un messaggio di accesso negato.
  2. Non è possibile avere contemporaneamente una connessione di sola lettura e non di sola lettura allo stesso listener.
  3. Intellisense per i nomi degli oggetti nel database non funziona. (Stranamente, gli oggetti vengono enumerati bene in Progettazione query che è possibile avviare utilizzando Progettazione query in Editor ... dal menu di scelta rapida.)
  4. Si applica ancora l'avvertenza 3 delle avvertenze delle versioni precedenti.

Prodotti di terze parti

LinqPad memorizza l'intera stringa di connessione incluso Intento applicazione e il database quando si salva una connessione e pertanto potrebbe essere un'opzione valida per eseguire query di sola lettura su database Always On.


0

Potresti perdere una parte importante del puzzle o almeno non l'ho visto da nessuna parte nella tua domanda:

ApplicationIntent=readonlyè la metà dell'equazione. È inoltre necessario passare il parametro MultiSubnetFailover=True.

Ad esempio, nella scheda Parametri di connessione aggiuntivi, si desidera inserire quanto segue:

MultiSubnetFailover=True;ApplicationIntent=readonly;

Grazie Tony, ma non è questo il problema.
DBAuser,


0

È possibile creare un file di configurazione e quindi creare automaticamente i server registrati necessari in SSMS? Proprio come menzionato nel mio articolo MSSQLTips:

Automatizzare la registrazione e la manutenzione dei server in SQL Server Management Studio (SSMS)


Ciao jyao, grazie per la tua risposta. Hai pubblicato uno script PowerShell interessato in quell'articolo ma sfortunatamente non funziona con la proprietà ApplicationIntent. Ho modificato il PS per utilizzare quanto segue: New-Item -Name $ (encode-sqlname $ g.value) -path "sqlserver: \ SQLRegistration \ $ ($ choice) \ $ ($ g.parentfolder)" -ItemType $ g .type -Value ("Server = $ regsrv; sicurezza integrata = true; Catalogo iniziale = dbname; ApplicationIntent = ReadOnly"); Senza fortuna! Se funzionasse, sarei più che felice di usarlo come opzione. Grazie ancora.
DBAuser,

0

Questo problema è stato risolto in SQL 2016 SSMS quando si utilizza con i server registrati. Sono stato in grado di registrare una connessione Intento ReadOnly come parte del gruppo di server locali e aprire la connessione salvata per un utilizzo futuro. Grazie per l'aiuto.


0

Non posso commentare, ma sto aggiungendo alla risposta di DBAUser.

Non è stata visualizzata un'opzione per aggiungere Intento applicazione nella GUI durante l'impostazione della connessione nell'area dei server registrati.

Ho dovuto connettermi usando Esplora oggetti (usando Data Source=<Listener>;Initial Catalog=<Database>;ApplicationIntent=ReadOnly), quindi registrare il server una volta che ero connesso.

Oppure aggiungi Initial Catalog=<Database>;ApplicationIntent=ReadOnlyalla stringa di connessione nel file .regsrvr.


Sarà necessario registrare il server readOnly in Esplora oggetti per vederlo come parte dei gruppi di server locali nei server registrati. In Esplora oggetti, dopo aver creato una connessione readOnly al server con applicationintent, fare clic con il tasto destro del mouse sul server e fare clic su Registra. Quindi modificare il nome del server registrato con quello desiderato. Questo verrà salvato come parte dei server locali nei server registrati. Spero che sia di aiuto!
DBAuser,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.