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

时间:2013-09-17 14:52:09

标签: sql sql-server sql-server-2012

我需要针对SQL Server 2012可用性组创建链接服务器,并且我希望将所有请求路由到只读副本。但是,我无法确定如何指定ReadOnly Application Intent以确保将请求路由到正确的副本。

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

4 个答案:

答案 0 :(得分:5)

我已尝试过这两种方法,下面(来自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';

答案 1 :(得分:2)

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

经过进一步调查后,我发现造成这种情况的根本原因是因为与该登录相关联的默认数据库设置为“master”。可以通过运行以下查询来测试:

 sp_helplogins

为避免此问题,我现在使用以下连接参数来确保连接到数据库副本:

ApplicationIntent=ReadOnly;Database=database-db

此外,通过链接服务器连接到数据库时,请务必使用以下查询格式:

 SELECT * FROM [server].[database].[scheme].[table]

答案 2 :(得分: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' 

答案 3 :(得分:0)

https://docs.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