描述
RDS SQL Server 开放了 Linked Server功能,但是默认只能在RDS之间,或者同VPC 下的ECS 自建SQL Server,实现Linkded Server 功能。本文将介绍,利用VPC SNAT 功能,实现RDS Linked Server 访问公网数据库的能力。
链接服务器
功能
链接服务器使您能够实现可以获取和更新其他数据库中的数据的分布式数据库。在需要实现数据库分片而不需要创建自定义应用程序代码或直接从远程数据源加载的场景中,它们是一种很好的解决方案。
优点
- 从SQL Server外部访问数据的能力。
- 在跨企业的异构数据源上发布分布式查询、更新、命令和事务的能力。
- 类似地处理不同数据源的能力。
RDS 链接服务器
RDS 实例,默认是没有权限执行SQL Server 自带的添加链接服务的存储过程。
需要参考阿里云官方文档,通过RDS 自带的存储过程来添加链接服务器。
增加链接服务器Linked Server
T-SQL命令
sp_rds_add_linked_server
支持的实例
- SQL Server 2012、2014、2016、2017、2019标准高可用版(独享型或通用型实例)
- SQL Server 2012、2014、2016企业高可用版(独享型或通用型实例)
- SQL Server 2017、2019企业集群版(独享型或通用型实例)
说明共享型规格实例暂不支持该存储过程。
描述
增加实例的链接服务器。支持分布式事务,实例主备自动创建,切换不需要再配置。
使用方法
DECLARE @linked_server_name sysname = N'y******lb',@data_source sysname = N'****.sqlserver.rds.aliyuncs.com,1433',--style: 10.1.10.1,1433@user_name sysname = N'***',@password nvarchar(128)= N'******',@source_user_name sysname = N't**t',@source_password nvarchar(128)= N'******',@link_server_options xml = N' <rds_linked_server> <config option="data access">true</config> <config option="rpc">true</config> <config option="rpc out">true</config> </rds_linked_server>'EXEC sp_rds_add_linked_server @linked_server_name,@data_source,@user_name,@password,@source_user_name,@source_password,@link_server_options
链接服务器配置
未配置SNAT 情况下
报错:A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible.
如截图:
ECS SNAT 配置
1. 查看RDS 实例的VPC ID信息
2. 点 vpc id ,进行专有网络页面,选择公网NAT网关,创建NAT网关
确认目前交换机没有公网NAT网关
3. 创建公网NAT网关,选择RDS 实例所使用的VPC ID(需要付费支付)
4. 等待NAT网关创建成功
5. 查看公网NAT网关和SNAT条目ID信息
6. 查看路由表记录,确认,自定义路由条目,目标网段和下一跳为刚创建的公网NAT网关
7. 此时找一台同VPC ECS 主机实例进行验证,访问公网地址是否通。
注: ECS 要通过VNC 登录,不能申请公网地址,否则验证会不准
8. 创建RDS 实例,注意选择刚才配置的 VPC
9 .在RDS SQL Server 创建链接服务器
注:显示链接服务器创建成功,部分报错是RDS 存储过程权限兼容性问题,不影响使用。
10. 测试验证插入和查询功能成功
参考文档
微软 Linked Server 文档:
阿里云链接服务器文档:
https://help.aliyun.com/document_detail/88094.html#section-ckn-jv3-v2b