具有只读应用程序意图的SSMS注册服务器


10

我们正在使用AlwaysOn进行SQL Server 2014 POC测试,其中一位用户被问到如何使用本地服务器组中注册的服务器使用ReadOnly Intent 保存SSMS的配置。这样,他们不必在每次需要访问ReadOnly副本时都键入别名。

不幸的是,与常规对象资源管理器不同,已注册服务器中没有添加ApplicationIntent选项的选项。

我从Microsoft那里碰到过有关更改RegSrvr.xml中的连接字符串的这篇文章。

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

我尝试了他们的建议,当通过已注册服务器中的本地服务器连接时,它没有连接到正确的副本节点。

使用连接窗口>其他连接参数中的选项时,ReadOnly选项在对象资源管理器中可以正常工作。但是它不会保存对连接所做的更改。

有谁知道通过SSMS 使用ReadOnly Intent属性保存配置的任何替代解决方案吗?在此先感谢您的帮助。

Answers:


3

SQL Management Studio(2016年之前的版本)

不幸的是,有一些警告使在SQL Management Studio中使用应用程序意图有些痛苦:

要以ReadOnly意图手动连接,从对象资源管理器中弹出“ 连接到服务器”对话框后,用户必须记住:

  1. 单击选项>>
  2. 转到“ 其他连接参数”选项卡。
  3. 输入其他参数为ApplicationIntent = ReadOnly;
  4. (注意:输入附加连接参数后,用户不得单击选项<<按钮,否则参数将丢失。)
  5. 单击连接
  6. 始终通过在“ 对象资源管理器”视图中右键单击所需的数据库并选择“ 新建查询”来启动查询窗口,以避免遇到下面的#3警告。

适用的警告如下:

  1. 尽管可以使SQL Management Studio与只读意图进行连接,但是当将连接添加到已注册服务器时,它不会存储其他连接参数。
  2. 手动编辑RegSrvr.xml文件中的本地注册服务器以添加应用程序意图时的行为非常不一致,并且每次通过GUI进行更改时都会被覆盖,从而使此解决方法不可靠。
  3. 在打开查询窗口之前,必须选择Always On数据库。否则,连接将路由到主服务器。如果在查询窗口已打开到非始终在线数据库后,尝试使用查询窗口的下拉列表选择数据库,则会出现错误对话框。如果在已将查询窗口打开到非始终在线数据库后尝试使用USE语句将数据库更改为始终在线数据库,则在尝试执行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(版本2016或更高版本)

SQL Server Management Studio 2016或更高版本可以使用只读应用程序意图进行连接(使用与以前版本相同的6个步骤),并且它确实存储了其他连接参数。还有一些警告:

  1. 对象资源管理器视图将不会枚举AlwaysOn数据库中的任何表或其他对象。尝试扩展它们会导致访问拒绝消息。
  2. 您不能同时打开到同一侦听器的只读和非只读连接。
  3. 数据库中对象名称的Intellisense不起作用。(奇怪的是,在查询设计器中可以很好地枚举对象,您可以从右键单击菜单中使用“ 编辑器中的设计查询”来启动对象。)
  4. 先前版本的警告中的警告3仍然适用。

第三方产品

当您保存连接时,LinqPad会存储包括应用程序意图和数据库在内的整个连接字符串,因此对于对Always On数据库执行只读查询可能是一个可行的选择。


0

您可能错过了难题的重要部分,或者至少在您的问题中没有看到它:

ApplicationIntent=readonly是等式的一半。您还需要传递参数MultiSubnetFailover=True

例如,在“其他连接参数”选项卡中,您要输入以下内容:

MultiSubnetFailover=True;ApplicationIntent=readonly;

谢谢托尼,但这不是我遇到的问题。
DBAuser


0

是否可以先创建配置文件,然后在SSMS中自动创建必要的注册服务器?就像我的MSSQLTips文章中提到的那样:

在SQL Server Management Studio(SSMS)中自动注册和维护服务器


您好jyao,感谢您的答复。您已在该文章中发布了感兴趣的Powershell脚本,但不幸的是,它不适用于ApplicationIntent属性。我将PS更改为使用以下命令:New-Item -Name $(encode-sqlname $ g.value)-path“ sqlserver:\ SQLRegistration \ $($ choice)\ $($ g.parentfolder)” -ItemType $ g .type -Value(“服务器= $ regsrv;集成安全性= true;初始目录= dbname; ApplicationIntent = ReadOnly”);没运气!如果这行得通,我很乐意将此作为选项。再次感谢。
DBAuser 2015年

0

与注册服务器一起使用时,此问题已在SQL 2016 SSMS中修复。我能够将ReadOnly Intent连接注册为本地服务器组的一部分,并打开保存的连接以供将来使用。感谢您的帮助。


0

我无法发表评论,但正在添加DBAUser的答案。

在注册的服务器区域内建立连接时,我看不到在GUI中添加应用程序意图的选项。

我必须使用对象资源管理器(使用Data Source=<Listener>;Initial Catalog=<Database>;ApplicationIntent=ReadOnly)进行连接,然后在连接后注册服务器。

Initial Catalog=<Database>;ApplicationIntent=ReadOnly在.regsrvr文件中添加到连接字符串。


您将需要在对象资源管理器中注册readOnly服务器,以便将其视为已注册服务器中本地服务器组的一部分。在对象资源管理器中,使用应用程序意图创建到服务器的只读连接后,右键单击服务器,然后单击注册。然后将注册的服务器名称更改为您想要的名称。这将被保存为已注册服务器中本地服务器的一部分。希望这可以帮助!
DBAuser
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.