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

DBA*_*ser 11 sql-server ssms availability-groups sql-server-2014

我们正在使用 AlwaysOn 进行 SQL Server 2014 POC 测试,其中一位用户询问是否使用本地服务器组中的注册服务器保存具有只读意图的 SSMS 配置。这样他们就不必在每次需要访问只读副本时都输入别名。

不幸的是,与常规对象浏览器不同,注册服务器中没有选项可以添加 ApplicationIntent 选项。

我从 Microsoft 看到了这篇关于更改 RegSrvr.xml 中的连接字符串的文章。

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

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

使用连接窗口 > 附加连接参数中的选项时,对象资源管理器中的只读选项工作正常。但它不会保存对连接所做的更改。

有没有人知道使用 SSMS保存具有只读意图属性的配置的任何替代解决方案?在此先感谢您的帮助。

Jam*_*See 5

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

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

要使用只读意图手动连接,从对象资源管理器打开“连接到服务器”对话框后,用户必须记住:

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

适用的注意事项如下:

  1. 尽管您可以让 SQL Management Studio 以只读意图进行连接,但在将连接添加到注册服务器时,它不会存储附加连接参数。
  2. 在 RegSrvr.xml 文件中手动编辑本地注册服务器以添加应用程序意图时的行为极其不一致,并且每次通过 GUI 进行更改时都会被覆盖,从而使该解决方法变得不可靠。
  3. 在打开查询窗口之前必须选择Always On数据库;否则,连接将被路由到主服务器。如果在已打开非 Always On 数据库的查询窗口后尝试使用查询窗口的下拉菜单选择数据库,您将收到一个错误对话框。如果在已打开非 Always On 数据库的查询窗口后尝试使用 USE 语句将数据库更改为 Always On 数据库,则当您尝试执行 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.
Run Code Online (Sandbox Code Playgroud)

SQL Management Studio(2016 或更高版本)

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

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

第三方产品

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


DBA*_*ser 0

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