Servidores registrados SSMS con intención de solicitud de solo lectura

10

Estamos trabajando en las pruebas POC de SQL Server 2014 con AlwaysOn y uno de los usuarios preguntó sobre cómo guardar la configuración de SSMS con ReadOnly Intent utilizando los servidores registrados en el grupo de servidores locales. De esta manera, no tienen que escribir el nombre del alias cada vez que necesitan acceder a la réplica de solo lectura .

Desafortunadamente, no hay una opción dentro de los servidores registrados para agregar la opción ApplicationIntent a diferencia del explorador de objetos normal.

Encontré este artículo de Microsoft sobre cómo cambiar la cadena de conexión en RegSrvr.xml.

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

Intenté su sugerencia y no se conectó al nodo de réplica correcto al conectarse a través del servidor local en los servidores registrados.

La opción ReadOnly funciona bien desde el explorador de objetos cuando se usan las opciones en la ventana de conexión> Parámetros de conexión adicionales. Pero no guarda los cambios realizados en la conexión.

¿Alguien sabe de alguna solución alternativa para guardar las configuraciones con propiedad ReadOnly Intent con SSMS? Gracias de antemano por tu ayuda.

DBAuser
fuente

Respuestas:

3

SQL Management Studio (versiones anteriores a 2016)

Desafortunadamente, hay algunas advertencias que hacen que el uso de la intención de aplicación en SQL Management Studio sea algo doloroso:

Para conectarse manualmente con la intención de solo lectura, después de abrir el cuadro de diálogo Conectar al servidor desde el Explorador de objetos, los usuarios deben recordar:

  1. Haga clic en Opciones >> .
  2. Vaya a la pestaña Parámetros de conexión adicionales .
  3. Ingrese el parámetro adicional como ApplicationIntent = ReadOnly;
  4. (Nota: Los usuarios no deben hacer clic en el botón Opciones << después de ingresar los Parámetros de conexión adicionales o los parámetros se perderán).
  5. Haz clic en Conectar .
  6. Siempre inicie las ventanas de consulta haciendo clic derecho en la base de datos deseada en la vista Explorador de objetos y eligiendo Nueva consulta para evitar encontrarse con la advertencia # 3 a continuación.

Las advertencias que se aplican son las siguientes:

  1. Aunque puede hacer que SQL Management Studio se conecte con la intención de solo lectura, no almacena los parámetros de conexión adicionales cuando se agrega una conexión a servidores registrados.
  2. El comportamiento al editar manualmente los servidores registrados localmente en el archivo RegSrvr.xml para agregar la intención de la aplicación es extremadamente inconsistente y se sobrescribirá cada vez que se realice un cambio a través de la GUI, lo que hace que esta solución no sea confiable.
  3. La base de datos Always On debe seleccionarse antes de abrir la ventana de consulta; de lo contrario, la conexión se enruta al servidor primario. Si intenta seleccionar la base de datos utilizando el menú desplegable de la ventana de consulta después de que la ventana de consulta ya se haya abierto a una base de datos que no esté siempre activada, obtendrá un cuadro de diálogo de error. Si intenta cambiar la base de datos a una base de datos Always On con una instrucción USE después de que la ventana de consulta ya se haya abierto a una base de datos no Always On, los resultados se verán así cuando intente ejecutar la consulta 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 (versiones 2016 o posterior)

SQL Server Management Studio 2016 o superior puede conectarse con la intención de aplicación de solo lectura (utilizando los mismos 6 pasos que las versiones anteriores) y almacena los parámetros de conexión adicionales. Todavía hay algunas advertencias:

  1. La vista del Explorador de objetos no enumerará ninguna de las tablas u otros objetos en las bases de datos AlwaysOn. Intentar expandirlos da como resultado un mensaje de acceso denegado.
  2. No puede tener una conexión de solo lectura y una conexión que no sea de solo lectura para el mismo oyente abierto al mismo tiempo.
  3. Intellisense para nombres de objetos en la base de datos no funciona. (Curiosamente, los objetos se enumeran muy bien en el Diseñador de consultas que puede iniciar utilizando Design Query en el Editor ... desde el menú contextual).
  4. La advertencia 3 de las advertencias de las versiones anteriores todavía se aplica.

Productos de terceros

LinqPad almacena la cadena de conexión completa, incluida la intención de la aplicación y la base de datos cuando guarda una conexión y, por lo tanto, podría ser una opción viable para realizar consultas de solo lectura en las bases de datos Always On.

JamieVer
fuente
0

Puede que te estés perdiendo una parte importante del rompecabezas o al menos no lo vi en ninguna parte de tu pregunta:

ApplicationIntent=readonlyes la mitad de la ecuación. También debe pasar el parámetro MultiSubnetFailover=True.

Por ejemplo, en la pestaña Parámetros de conexión adicionales, desea ingresar lo siguiente:

MultiSubnetFailover=True;ApplicationIntent=readonly;
Tony Castro
fuente
Gracias Tony, pero este no es el problema que estoy teniendo.
DBAuser
0

¿Es posible que cree un archivo de configuración y luego cree automáticamente los servidores registrados necesarios en SSMS? Tal como se menciona en mi artículo MSSQLTips:

Automatizar el registro y el mantenimiento de servidores en SQL Server Management Studio (SSMS)

jyao
fuente
Hola jyao, gracias por tu respuesta. Ha publicado un script de PowerShell interesado en ese artículo, pero desafortunadamente no funciona con la propiedad ApplicationIntent. Cambié la PS para usar lo siguiente: New-Item -Name $ (encode-sqlname $ g.value) -path "sqlserver: \ SQLRegistration \ $ ($ choice) \ $ ($ g.parentfolder)" -ItemType $ g .type -Value ("Servidor = $ regsrv; seguridad integrada = verdadero; Catálogo inicial = dbname; ApplicationIntent = ReadOnly"); ¡Sin suerte! Si esto funcionara, estaría más que feliz de usar esto como una opción. Gracias de nuevo.
DBAuser
0

Esto se ha solucionado en SQL 2016 SSMS cuando se usa con servidores registrados. Pude registrar una conexión de intención de solo lectura como parte del grupo de servidores locales y abrir la conexión guardada para uso futuro. Gracias por la ayuda con esto.

DBAuser
fuente
0

No puedo comentar pero estoy agregando a la respuesta de DBAUser.

No pude ver una opción para agregar Intención de aplicación en la GUI al configurar la conexión dentro del área de servidores registrados.

Tuve que conectarme usando el explorador de objetos (usando Data Source=<Listener>;Initial Catalog=<Database>;ApplicationIntent=ReadOnly) y luego registrar el servidor una vez que estuve conectado.

O agregue Initial Catalog=<Database>;ApplicationIntent=ReadOnlya la cadena de conexión en el archivo .regsrvr.

marclancy
fuente
Deberá registrar el servidor readOnly en el explorador de objetos para ver esto como parte de los grupos de servidores locales en los servidores registrados. En el explorador de objetos, una vez que cree una conexión de solo lectura al servidor con la solicitud de la aplicación, haga clic derecho en el servidor y haga clic en Registrarse. Luego cambie el nombre del servidor registrado al que desea. Esto se guardará como parte de los servidores locales en los servidores registrados. ¡Espero que esto ayude!
DBAuser