全面指南,如何使用 SQL Server 连接另一台服务器

admin
本指南详细介绍了使用 SQL Server 连接另一台服务器的多种方法,内容涵盖了利用 T-SQL 语句(如 OPENDATASOURCEOPENQUERYLINKED SERVERS)进行跨服务器查询,以及如何配置网络、防火墙和身份验证(如 Windows 和 SQL 身份验证),文章还讲解了如何执行分布式事务及处理连接错误,帮助用户掌握跨数据库操作的核心技巧与注意事项。

在现代企业级应用开发中,数据库往往分布在不同的服务器上,为了进行数据汇总、报表生成或数据迁移,我们经常需要在一个 SQL Server 实例中访问另一个实例的数据,实现这一功能的核心技术通常被称为“跨服务器查询”或“链接服务器”。

本文将详细介绍如何配置环境,使用 SQL Server 连接另一台服务器,并提供两种主要的方法:图形化界面配置和 T-SQL 脚本配置。

前置条件检查

在尝试 SQL Server 连接另一台服务器 之前,请确保满足以下网络和配置要求,否则连接将会失败:

全面指南,如何使用 SQL Server 连接另一台服务器

  1. 网络连通性:确保两台服务器之间的网络是互通的,可以通过 Ping 命令测试。
  2. 端口开放:SQL Server 默认使用 1433 端口,请检查防火墙是否允许该端口的入站和出站流量。
  3. 服务配置:在目标服务器上,确保 SQL Server 服务已启动,并且配置管理器中启用了 TCP/IP 协议。
  4. 身份验证模式:目标服务器必须设置为“混合模式”,否则无法使用 SQL 身份验证进行连接。

方法一:使用 SSMS 图形化界面配置

对于初学者或不常编写脚本的 DBA 使用 SQL Server Management Studio (SSMS) 是最直观的方式。

  1. 在源服务器上,打开 SSMS 并连接到当前实例。
  2. 在“对象资源管理器”中,右键点击“服务器对象”,选择“链接服务器”。
  3. 在弹出的对话框中,点击“新建链接服务器”。
  4. 常规 页面:
    • 链接服务器:输入目标服务器的名称或 IP 地址。
    • 服务器类型:选择“SQL Server”。
    • 安全性:选择“使用此安全上下文”,然后输入具有访问权限的目标服务器账号和密码。
  5. 点击确定,配置即完成,之后你就可以在查询窗口中直接使用 SELECT * FROM [目标服务器名].[数据库名].[架构].[表名] 进行查询。

方法二:使用 T-SQL 脚本配置

对于自动化部署和脚本管理,使用 T-SQL 命令更为高效,我们主要使用 sp_addlinkedserversp_addlinkedsrvlogin 这两个存储过程。

创建链接服务器

我们需要告诉 SQL Server 有一台外部服务器可供访问:

EXEC master.dbo.sp_addlinkedserver 
    @server = N'TargetServerName',      -- 链接服务器的名称(本地别名)
    @srvproduct = N'',                  -- 产品名称
    @provider = N'SQLNCLI',             -- OLE DB 提供程序
    @datasrc = N'192.168.1.100';        -- 目标服务器的 IP 地址或主机名

配置登录映射

创建链接服务器后,我们需要指定使用哪个账号去登录目标服务器:

EXEC master.dbo.sp_addlinkedsrvlogin 
    @rmtsrvname = N'TargetServerName',  -- 对应上面创建的链接服务器名
    @useself = N'False',                -- 不使用当前连接的登录账号
    @locallogin = NULL,                 -- 不限制本地登录用户
    @rmtuser = N'target_user',          -- 目标服务器的登录用户名
    @rmtpassword = N'target_password';  -- 目标服务器的密码

测试连接

配置完成后,可以执行以下命令验证是否成功:

SELECT * FROM [TargetServerName].[你的目标数据库名].[dbo].[你的目标表名]

常见问题排查

如果你发现无法成功 SQL Server 连接另一台服务器,请按以下顺序排查:

  • 错误代码 53:通常表示网络不可达或协议未启用。
  • 错误代码 18456:表示身份验证失败,请检查用户名密码是否正确,以及目标服务器是否开启了混合模式。
  • 性能问题:跨服务器查询(分布式查询)的性能通常比本地查询慢,因为数据需要在网络中传输,在编写查询时,尽量避免全表扫描,
文章版权声明:除非注明,否则均为xmsdn原创文章,转载或复制请以超链接形式并注明出处。

取消
微信二维码
微信二维码
支付宝二维码