CentOS 7上配置SQL Server链接其他SQL Server服务器

概述

本文介绍在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;

常见问题解决

  1. 连接失败:检查防火墙设置,确保1433端口开放
  2. 权限问题:确认远程SQL Server允许sa2账户远程连接
  3. 驱动问题:验证ODBC驱动是否正确安装
  4. 服务主密钥:如遇加密错误,尝试重新生成服务主密钥
bash 复制代码
# 验证基本连接
sqlcmd -S 远程服务器IP -U 用户名 -P 密码 -d 数据库名 -Q "SELECT 1"

最佳实践

  • 使用链接服务器而非OPENROWSET进行持久化连接
  • 为链接服务器创建专用账户而非sa账户
  • 在生产环境中使用更安全的认证方式
  • 定期检查链接服务器的连接状态
相关推荐
踏月的造梦星球21 小时前
DMDPC 学习:架构、部署、运维与调优
运维·数据库·学习·架构
潘正翔21 小时前
docker核心概念
linux·运维·服务器·docker·容器·centos·运维开发
韩楚风1 天前
【参天引擎】事务生命周期 / MVCC / Undo / ACID / 分布式事务 功能域整体解析
数据库·分布式·mysql·架构·cantian
renhongxia11 天前
世界模型,是“空中楼阁”还是AGI的“最后一块拼图”?
运维·服务器·数据库·人工智能·算法·agi
程序员无隅1 天前
Coding Agent 为什么压缩上下文后还能继续工作?上下文模块设计拆解
java·开发语言·数据库
愿做无知一猿1 天前
Nacos连接MySQL异常?DataGrip竟成救星
数据库·mysql
G.O.G.O.G1 天前
LeetCode SQL 从入门到精通(MySQL)06(上)
数据库·sql·mysql·leetcode
研究员子楚1 天前
GEO行业发展标准体系白皮书V2.0-第10卷 · 全球篇:跨国标准协同与全球品牌语义治理框架
数据库·人工智能·microsoft·架构·geo
Dovis(誓平步青云)1 天前
远程办公软件文件传输实测:6 款工具的速度、稳定性和办公体验对比
linux·运维·服务器·后端·生成对抗网络
专注_每天进步一点点1 天前
SLB(绑定弹性公网ip)-gateway-业务pod,gateway上出现reset by peer,业务pod上没有reset by peer
服务器·tcp/ip·gateway