SQL Server 2012 链接服务器应用意图

8

我需要创建一个链接服务器,针对 SQL Server 2012 可用性组,并希望将所有请求路由到只读副本。然而,我一直无法确定如何指定只读应用程序意图,以确保请求被路由到正确的副本。

有人成功地以这种方式配置了链接服务器吗?

4个回答

6
我尝试了两种方法,以下方法(来自Microsoft技术网站)可行。
EXEC sp_addlinkedserver 
@server = N'linked_svr', 
@srvproduct=N'SqlServer',
@provider=N'SQLNCLI11', 
@datasrc=N'AG_Listener_Name', 
@provstr=N'ApplicationIntent=ReadOnly', 
@catalog=N'MY_DB_NAME';

我创建了联接服务器。但是,当我对联接服务器执行查询时,我收到了这个错误消息,而且我不知道它的含义。OLE DB提供程序“SQLNCLI11”为链接服务器“My Linked Server Name”提供了不一致的元数据列。“Object Name”的“Database Name”。“Schema Name”中的列“My Column Name”(编译时序数1)被报告为在编译时为0,在运行时为0的“不完整模式错误逻辑”。 - chad
我能够通过这篇帖子的帮助解决上述问题 - https://dev59.com/kXM_5IYBdhLWcg3w43lt。然而,在观察SQL Profiler时,针对链接服务器执行的SQL语句仍然命中主要副本而不是只读副本。 - chad

3

当测试与数据库的链接服务器连接时,即使在连接参数中指定了ApplicationIntent=ReadOnly,我发现仍然会访问主数据库。

经过进一步调查,我发现导致这个问题的根本原因是与该登录相关联的默认数据库设置为“master”。您可以通过运行以下查询来测试此内容:

 sp_helplogins

为了避免这个问题,我现在使用以下连接参数来确保我连接到数据库副本:
ApplicationIntent=ReadOnly;Database=database-db

此外,当通过链接服务器连接数据库时,请确保使用以下查询格式:
 SELECT * FROM [server].[database].[scheme].[table]

0

我没有AlwaysOn可用性组来测试这个,但是您可以在通过sp_addlinkedserver设置链接服务器时指定连接字符串。

SQL Server 2012接受以下内容并成功创建一个链接服务器,无论它是否遵守ApplicationIntent属性,您都必须进行测试,但是它应该会这样做,因为它被设置为使用本地客户端作为提供程序:

sp_addlinkedserver 
@srvproduct = 'DB', --Don't use 'SQL Server' otherwise it won't let you set any properties
@server = 'LINKED-SERVER-NAME',
@provider = 'SQLNCLI',
@provstr = 'Data Source=SERVER\INSTANCE;Initial Catalog = Database;ApplicationIntent=ReadOnly' 

根据此文档(http://technet.microsoft.com/en-us/library/hh403414.aspx),您可以为本地 SQL Server 链接服务器设置 provstr 参数。 - Ben Thul

0

https://learn.microsoft.com/en-us/windows-server/networking/core-network-guide/cncg/server-certs/create-an-alias-cname-record-in-dns-for-web1

我已经在只读节点上使用了CNAME。 对于只读服务器,sql AO或Windows集群非常有用。 例如:您的第二个节点服务器名称为SERVERB,您可以将其重定向到以下别名名称。 SERVERB -----> SERVERB.corp.contoso.com。

然后从SSMS检查是否可以连接,或者从命令提示屏幕ping别名名称是否有效。

ping SERVERB.corp.contoso.com


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接