我需要针对 SQL Server 2012 可用性组创建链接服务器,并且我希望将所有请求路由到只读副本。但是,我无法确定如何指定 ReadOnly Application Intent 以确保将请求路由到正确的副本。
有没有人以这种方式成功配置链接服务器?
我需要针对 SQL Server 2012 可用性组创建链接服务器,并且我希望将所有请求路由到只读副本。但是,我无法确定如何指定 ReadOnly Application Intent 以确保将请求路由到正确的副本。
有没有人以这种方式成功配置链接服务器?
我已经尝试了这两种方法,并且以下(来自 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';
在测试与数据库的链接服务器连接时,我发现即使在连接参数中指定 ApplicationIntent=ReadOnly 时,我仍在访问主数据库。
经过进一步调查,我发现造成这种情况的根本原因是与该登录关联的默认数据库设置为“master”。这可以通过运行以下查询来测试:
sp_helplogins
为了避免这个问题,我现在使用以下连接参数来确保我连接到数据库副本:
ApplicationIntent=ReadOnly;Database=database-db
另外,通过链接服务器连接数据库时,请务必使用以下查询格式:
SELECT * FROM [server].[database].[scheme].[table]
我没有 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'
我已将 CNAME 用于只读节点。sql AO 或 windows 集群对于只读服务器非常有用。EX:您的第二个节点服务器名称是 SERVERB,您将其重定向到别名,如下所示。SERVERB ----- >SERVERB.corp.contoso.com。
然后从 SSMS 检查您是否可以连接,或者从命令提示符屏幕 ping 别名是否有效。
ping SERVERB.corp.contoso.com