概述
本文介绍在CentOS 7系统上运行的SQL Server如何链接访问其他SQL Server服务器的详细步骤,包括驱动安装、配置和连接测试。
安装必要组件
1. 安装ODBC驱动
bash
# 安装基础ODBC组件
sudo yum install unixODBC unixODBC-devel
# 添加Microsoft仓库
curl https://packages.microsoft.com/config/rhel/7/prod.repo | sudo tee /etc/yum.repos.d/mssql-release.repo
# 安装SQL Server ODBC驱动
sudo ACCEPT_EULA=Y yum install msodbcsql17
2. 验证安装
bash
odbcinst -q -d -n "ODBC Driver 17 for SQL Server"
SQL Server配置
1. 启用Ad Hoc分布式查询
sql
-- 启用高级选项
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
-- 启用Ad Hoc Distributed Queries
EXEC sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
-- 验证设置
EXEC sp_configure 'Ad Hoc Distributed Queries';
2. 生成服务主密钥(如需要)
sql
ALTER SERVICE MASTER KEY FORCE REGENERATE
连接测试方法
方法1:使用OPENROWSET直接连接
sql
SELECT * FROM OPENROWSET('MSOLEDBSQL', 'Server=远程服务器;UID=用户名;PWD=密码;',
'SELECT * FROM 数据库名.dbo.表名');
方法2:配置链接服务器(推荐)
sql
-- 添加链接服务器
EXEC master.dbo.sp_addlinkedserver
@server = N'LinkedServerName', -- 本地使用的链接服务器名称
@srvproduct = '', -- 产品名称,SQL Server留空
@provider = 'MSOLEDBSQL', -- 提供程序
@datasrc = '192.168.1.22,1433', -- 目标服务器地址和端口
@catalog = 'pcb_biz'; -- 默认数据库
-- 配置登录凭据
EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname = N'LinkedServerName', -- 链接服务器名称
@useself = 'false', -- 不使用本地凭据
@locallogin = NULL, -- 对所有本地登录应用此配置
@rmtuser = N'远程用户名', -- 远程登录用户名
@rmtpassword = N'远程密码'; -- 远程登录密码
- 查看已经创建的链接服务器
sql
EXEC sp_linkedservers; -- 检查是否存在
EXEC sp_helpserver; -- 查看服务器详情
- 删除链接服务器
sql
EXEC master.dbo.sp_dropserver @server = N'LinkedServerName';
测试链接服务器
sql
-- 查询远程服务器上的表
SELECT TOP 1 * FROM [LinkedServerName].[pcb_biz].sys.tables;
常见问题解决
- 连接失败:检查防火墙设置,确保1433端口开放
- 权限问题:确认远程SQL Server允许sa2账户远程连接
- 驱动问题:验证ODBC驱动是否正确安装
- 服务主密钥:如遇加密错误,尝试重新生成服务主密钥
bash
# 验证基本连接
sqlcmd -S 远程服务器IP -U 用户名 -P 密码 -d 数据库名 -Q "SELECT 1"
最佳实践
- 使用链接服务器而非OPENROWSET进行持久化连接
- 为链接服务器创建专用账户而非sa账户
- 在生产环境中使用更安全的认证方式
- 定期检查链接服务器的连接状态